我正在运行 Perl cgi 脚本,该脚本提供有关 DSL 调制解调器后面的主机上进行端口转发的 Apache Web 服务器的一些报告。概述:
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
...浏览器在从互联网打开 URL 时显示 Perl 脚本的内容(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