Проброс портов в локальную сеть с помощью iptables

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

Описание задачи

Допустим, есть у вас компьютер с операционной системой Linux на борту, который еще выступает в качестве шлюза (роутера) в вашей локальной сети. Есть у вас другой компьютер, на котором, допустим, крутится сайт, к которому нужно обеспечить доступ из внешнего мира. Задача я думаю ясна — нужно пробросить 80 порт с шлюза до компьютера внутри локальной сети.

Статья предполагает, что у вас уже разрешен IP Forwarding на вашем устройстве под управлением Linux. Если же нет, то прочитать о том, как включить IP Forwarding в Linux можно по этой ссылке.

Пусть шлюз будет иметь ip адрес 192.168.1.1, а компьютер с сайтом — 192.168.1.10. Внешний адрес шлюза (внешний ip) пусть будет 123.123.123.123. Пробрасывать, повторюсь, будем 80 порт. Во внешний мир смотрит интерфейс eth0, в локальную сеть — eth1.

Решение

После выполнения этой команды, все что приходит на адрес 123.123.123.123 по 80 порту будет передаваться на адрес 192.168.1.10:

iptables -t nat -A PREROUTING --dst 123.123.123.123 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10

Однако, чтобы все работало как надо, нужно еще добавить разрешающее передачу пакетов правило, так как иначе фаирволл просто не будет пропускать соединения:

iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.1.10 -p tcp -m tcp --dport 80 -j ACCEPT

Теперь любой из внешней сети, набрав в адресной строке ip адрес 123.123.123.123, или связанное с ним доменное имя, попадет на 80 порт компьютера 192.168.1.10, который находится внутри локальной сети.

Чтобы клиенты из локальной сети могли зайти по этому же внешнему адресу, и их перекинуло на 80 порт компьютера внутри локальной сети, необходимо добавить так же еще одно правило:

iptables -t nat -A POSTROUTING --dst 192.168.1.10 -p tcp --dport 80 -j SNAT --to-source 123.123.123.123

Так же можно сделать правило на тот случай, если обратиться к этому адресу нужно будет с самого шлюза:

iptables -t nat -A OUTPUT --dst 123.123.123.123 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10

Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *