Назад | Перейти на главную страницу

iptables, Apache2 и cgi

Я запускаю сценарий Perl cgi, предоставляющий некоторые отчеты о веб-сервере Apache на хосте за модемом DSL, выполняющем переадресацию портов. Обзор:

net <-> DSL_Modem (192.168.1.254) <-> Ap2host (eth1/192.168.1.222, eth0/10.0.0.1)

DSL-модем перенаправляет общий порт 30016 к хосту Apache2, а именно 192.168.1.222:30016.

Открытие веб-страницы скрипта из частной сети (10.0.0.0/8, предоставляемый хостом Apache2 через eth0) работает отлично.

Теперь, что странно, если я настрою пересылку таким образом:

/sbin/iptables -t nat -A PREROUTING -p tcp -d 192.168.1.222 --dport 30016 -j DNAT --to-destination 10.0.0.1:80
/sbin/iptables -t nat -I POSTROUTING 1 -p tcp --dst 10.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1:30016
/sbin/iptables -I genfilter 1 -p tcp -m state --state NEW -m tcp --dport 30016 -j ACCEPT

... браузер отображает содержимое Perl-скрипта, когда URL-адрес открывается из Интернета (например, URL-адрес http://example.com:30016).

Но если я сделаю это вместо этого:

/sbin/iptables -t nat -I PREROUTING -p tcp -d 192.168.1.222 --dport 30050 -j REDIRECT --to-port 80
/sbin/iptables -I genfilter 1 -p tcp -m state --state NEW -m tcp --dport 30050 -j ACCEPT

..браузер правильно открывает сгенерированную страницу (конечно, опять же из Интернета).

Почему следует -j REDIRECT работать пока DNAT/SNAT переадресация портов может быть проблемой? Это (DNAT/SNAT) способ переадресации портов отлично подходит для других служб, например Перенаправление порта RDP.