0

Проброс портов в Linux

Тема описана практически в каждом блоге. Я запишу себе на память, потому как пришлось потратить время на правльные правила.

Задача стоит следующая:
Пробросить запросв, приходящие не 1.2.3.4:55322 на 10.144.174.162:22

Итак в моем случае схема выглядит следующим образом:

NAT_Scheme

Как видно, схема немного усложняется наличием роутера. На схеме не указаны ip роутера, т.к. они в данном случае не важны. Главное, что с 192.168.15.3 доступен 10.144.174.162.

Для начала надо убедиться, что на интерфейсах задействован forwarding.
В моем случае 1.2.3.4 — eth0, а 192.168.15.3 — eth3.

# echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
# echo 1 > /proc/sys/net/ipv4/conf/eth3/forwarding

Добавляю правило в таблицу PREROUTING
# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 55322 -j DNAT --to-destination 10.144.74.162:22
Далее разрешаю форвадить пакеты, которые идут на 10.144.74.162:22
# iptables -A FORWARD -p tcp -d 10.144.74.162 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Этого, как правило, достаточно, но фишка в моей схеме заключается в том, что обратно пакеты приходят от 10.144.74.162 на интерфейс eth3 (192.168.15.3). Об этом адресе GW не в курсе.
Поможет исправить ситуацию опять таки NAT. На этот раз цепочка POSTROUTING:
# iptables -t nat -A POSTROUTING -d 10.144.74.162 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.15.3

Alexey Egorychev

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.