Часто в системном администрировании может потребоваться осуществление переадресации портов (port forwarding) через linux-шлюз. Прежде всего, такая необходимость появляется, когда вы хотите сделать доступными ресурсы локальной сети в сеть внешнюю. В этой статье будет дан пример на базе ОС Ubuntu, хотя аналогичным образом перенаправление можно будет осуществить в любой другой linux-системе, с помощью функционала iptables.
Для начала стоит ввести команду
ifconfig
и определить для себя две вещи: интерфейс связывающий шлюз со внешней сетью (допустим eth0) и внешний ip-адрес шлюза на этом интерфейсе (допустим 123.123.123.123).
Далее, предположим, вам надо пробросить ssh-порт одной из машин локальной сети.
Для этого под root-пользователем введите следующие команды:
iptables -t nat -A POSTROUTING -s 192.168.0.100 -o eth0 -j MASQUERADE
(где 192.168.0.100 – ip-адрес локальной машины, эта команда делает доступной этот хост для построутинга)
iptables -t nat -A PREROUTING -p tcp -d 123.123.123.123 --dport 20022 -j DNAT --to-destination 192.168.0.100:22
iptables -t filter -A FORWARD -i eth0 -d 192.168.0.100 -p tcp --dport 20022 -j ACCEPT
(где 20022 – порт, на который будет переадресация с 192.168.0.100:22)
Вам, соответственно, надо будет поменять адреса, порты и имя интерфейса в этих двух командах.
Аналогичным образом можно настроить любое количество перенаправляемых портов, в случае, если вы сделали все верно, то можно внести эти настройки в автозагрузку в системе Ubuntu двумя способами:
- как описано в конце этой статьи, сохранив всю нынешнюю конфигурацию iptables и добавив ее в поднятие сетевого интерфейса;
- или как описано в этой статье, написав отдельный скрипт с этими командами и добавив его в init.d.
