Интернет шлюз на Linux — установка и настройка

Средствами ОС Linux легко раздать интернет в локальную сеть, как по проводным сетям, так и по wi-fi. В настоящее время появилось много роутеров, которые способны выполнить такую задачу.

Но у них тоже есть недостатки — некоторые без причин регулярно подвисают, требуя перезагрузки, у других функционал настроек доступа ограничен. Так что если есть желание полностью контролировать раздачу интернета в локальную сеть, лучшим вариантом будет настроить интернет шлюз на Linux.

Способов настройки множество, все зависит от квалификации того, кто будет ее производить. Есть специальные дистрибутивы, в которых организовать подобный доступ можно через работу мастера или через web-интерфейс, есть графические программы для организации интернет шлюза. Но в основе всего лежит один принцип работы.

Настройка интернет шлюза на Linux

Раздача интернета производится в Linux с помощью файрволлов. Их несколько видов, но основным, который постоянно развивается, дополняется новыми функциями, и в тоже время прост в настройке, является iptables.

В iptables раздать интернет можно с помощью трансляции сетевых адресов — NAT, а сам метод называется IP маскарадинг. Но кроме самой настройки правил iptables нужно загрузить модули ядра, отвечающие за трансляцию сетевых адресов (по умолчанию они отключены).

Самый простой способ — это сохранение настроек iptables и загрузки модулей ядра в конфигурационный файл. Затем только останется настроить его выполнение при каждом запуске компьютера. И естественно, на компьютере должны быть установлены две сетевые карты — с одной получают интернет, а другая будет раздавать интернет в локальную сеть. Или одна, если доступ в интернет организован c юсб-модема.

Вот пример, надо учесть, что в этом случае iptables установлен, но не настроен.

Процесс самой настройки интернет шлюза

Открываем консоль с правами администратора, создаем файл командой:

touche /etc/nat.sh

Открываем в знакомом редакторе, здесь пример для nano:

nano -w /etc/nat.sh

И вписываем в него строки

#!/bin/bash

Объявим переменные, пути для нужных исполняемых файлов и обозначения сетевых интерфейсов:

IPT=/sbin/iptables
MDB=/sbin/modprobe

eth0 будем считать тот интерфейс, по которому интернет приходит на компьютер, а eth1 подключен к локальной сети, куда будет раздавать трафик интернет шлюз на Linux:

EX="eth0"
INT="eth1"

Подгружаем нужные для NAT модули ядра:

$MDB ip_tables
$MDB ip_conntrack
$MDB ip_conntrack_ftp
$MDB ip_conntrack_irc
$MDB iptable_nat
$MDB ip_nat_ftp
$MDB ip_nat_irc

Разрешаем форвардинг пакетов:

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

Сбрасываем все настройки iptables:

$IPT -P INPUT ACCEPT
$IPT -F INPUT
$IPT -P OUTPUT ACCEPT
$IPT -F OUTPUT

В iptables правила настраиваются так — сначала запрещаются все соединения, а затем создаются правила, которые разрешают то или иное соединение

Устанавливаем блокировку на все цепочки:

$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

далее пойдут разрешающие правила:

Сначала общие, не раздающие интернет, а разрешающие прохождение пакетов из внешнего интерфейса:

$IPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
$IPT-A INPUT -i lo -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT -p tcp -m multiport --dports 21,22,1024:6800 -j ACCEPT
$IPT -A INPUT - multiport --dports 21,80,8080,443,3306,8000,411,22,27015,26016 -j ACCEPT

А вот на каких правилах будет основан интернет шлюз на Linux — разрешаем форвардинг пакетов c внешнего соединения в локальную сеть:

$IPT -A FORWARD -i $EX -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $ EX -o $ INT -j ACCEPT

Включаем трансляцию адресов:

$ IPT -t nat -A POSTROUTING -o $EX -j MASQUERADE

Теперь сохраняем файл, делаем его исполняемым, chmod +x /etc/nat.sh, добавляем строчку sh /etc/nat.sh в файл rc.local до строки exit 0. Перезагружаемся и проверяем, есть ли интернет в локальной сети.

Это самый простой способ, можно организовывать контроль доступа, как компьютеров, так и сайтов c нежелательным контентом, ведение мониторинга соединений, но для этого лучше использовать интернет шлюз на Linux c прокси-сервером, например SQUID.

Добавить комментарий