X

Iptables проброс портов

Понадобилось мне пробросить порт на другую машину с сервачка.. Решение нашел достаточно быстро, однако оно работало как-то через раз..

Прежде всего расскажу, об ip адресах и интерфейсах:

eth0 = 256.150.202.108 = внешний ip сервера (ошибка в ip адресе допущена специально, чтобы никого не обидеть)
eth1 = 192.168.2.1 = внутренний ip сервера
192.168.2.103 = адрес компьютера куда будет пробрасываться порт с сервера
256.150.202.108:8080 = порт куда будут обращаться
192.168.2.103:80 = порт куда должны попасть

Т.е. мы заходим по адресу 256.150.202.108:8080, а попадаем сюда: 192.168.2.103:80. Графически это выглядит вот так:

Схема проброса портов

Вначале я сделал такие правила:

# Расшариваем инет
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 256.150.202.108

# проброс портов на внутреннюю машину
iptables -t nat -A PREROUTING  -p tcp --dst 256.150.202.108 --dport 8080 -j DNAT --to-destination 192.168.2.103:80
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.2.103   --dport 80   -j SNAT --to-source      256.150.202.108:8080

Однако поведение было довольно странное - отправляю запрос, все ок - проброс сработал. Пробую повторить - ничего не работает, до перезагрузки iptables..Т.е. работает, но только один раз..

В итоге, убил на это два дня, пока методом подбора, не модифицировал правила вот так:

# Расшариваем инет
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 256.150.202.108

# проброс портов на внутреннюю машину
iptables -t nat -A PREROUTING  -p tcp --dst 256.150.202.108 --dport 8080 -j DNAT --to-destination 192.168.2.103:80
iptables -t nat -A POSTROUTING -p tcp --dst 192.168.2.103   --dport 80   -j SNAT --to-source      192.168.2.1
iptables -t nat -A OUTPUT      -p tcp --dst 256.150.202.108 --dport 8080 -j DNAT --to-destination 192.168.2.103:80

После этого все начало работать так как и ожидалось. Честно сказать, в чем была проблема я до конца и не понял, все же мои познания в iptables, оставляют желать лучшего. Оставлю этот вопрос "на потом". Если кто-то понимает причину, напишите пожалуйста в комментариях..

 

Категории: Linux
Тэги: iptables

Комментарии (2)

    • Пять балов за внимательность :) Это было сделано специально, чтобы не палить реальный ip, об этом написано в посте и сути не меняет.