Linux системы набирают популярность, и частенько приходится использовать их как маршрутизатор в локальной сети, например, дома.
И, как правило, в таких случаях нам помогает такая утилита, как iptables — стандартный брендмауэр Linux.
C его помощью, например, можно достаточно легко организовать локальную сеть с NAT.
Начнем с краткого описания нужных операций в iptables:
Синтаксис: iptables -t *таблица* *команда*
Ключи:
-L — список правил
-F — удалить все правила
-A — добавить правило
пример: iptables -t *таблица* -A *цепочка* *правило*
-D — удалить правило
пример: iptables -t *таблица* -D *цепочка* *номер правила*
Для сохранения текущих правил выполните:
[code]
/etc/init.d/iptables save
[/code]
И так, допустим, у нас есть локальная сеть, и нам необходимо обеспечить ее Интернетом, а так же пробросить порты с внешнего адреса в локальную сеть.
Для начала нам нужно включить форвардинг:
[code]
echo 1 > /proc/sys/net/ipv4/ip_forward
[/code]
Для автоматического включения открываем файл /etc/sysctl.conf и ищем там строку и убираем знак комментария:
# net.ipv4.ip_forward=1
у нас получается:
net.ipv4.ip_forward=1
Предположим, что eth0 подключен к провайдеру и имеет IP-адрес в его подсети, допустим 199.199.199.2.
eth1 подключен к компьютеру в локальной сети, которому нужно обеспечить доступ в Интернет через NAT.
eth1 имеет адрес 10.10.10.1.
IP-адрес компьютера, которому необходимо обеспечить доступ — 10.10.10.2
Даем доступ интерфейсу eth1 с IP-адреса 10.10.10.2:
[code]
iptables -t nat -A POSTROUTING -s 10.10.10.2 -o eth1 -j MASQUERADE
[/code]
или всей подсети:
[code]
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
[/code]
Взависимости от ситуации внешний порт можно пробросить на локальную машину.
Например, у нас имеется ftp сервер внутри сети — 10.10.10.2 порт 21,и нам нужно разрешить пользователям подключаться к нему из Интеренета.
Внешний адрес — 199.199.199.2, адрес ftp — 10.10.10.2, порт — 21.
[code]
iptables -t nat -A PREROUTING —dst 199.199.199.2 -p tcp —dport 21 -j DNAT —to-destination 10.10.10.2
iptables -I FORWARD -i eth0 -o eth1 -d 10.10.10.2 -p tcp -m tcp —dport 21 -j ACCEPT
[/code]
Первое правило добавляется в табицу трасляции (-t nat), оно перенапрявляет пакеты, посланные на порт 21, с адреса 199.199.199.2 на 10.10.10.2.
Второе правило разрешает пакетам проходить по данному маршруту.
Для проброса более одного порта используется двоеточие.
Например для проброса всех портов используйте комманды:
[code]
iptables -t nat -A PREROUTING —dst 199.199.199.2 -p tcp —dport 1024:65535 -j DNAT —to-destination 10.10.10.2
iptables -I FORWARD -i eth0 -o eth1 -d 10.10.10.2 -p tcp -m tcp —dport 1024:65535 -j ACCEPT
[/code]
В случае переадресации внешний порт можно изменить, например, с 21 на 4321.
Например, нам надо замаскировать сервис так, чтобы при подключении к 199.199.199.2:4321 клиент попадал на 192.168.0.2:21.
Для этого добавляем правила:
[code]
iptables -t nat -A PREROUTING —dst 199.199.199.2 -p tcp -m tcp —dport 4321 -j DNAT —to-destination 10.10.10.2:21
iptables -I FORWARD -i eth0 -o eth1 -d 10.10.10.2 -p tcp -m tcp —dport 21 -j ACCEPT
[/code]
strong