ubuntu – 使用iptables进行端口转发不起作用

ubuntu – 使用iptables进行端口转发不起作用
我正在使用Ubuntu Server Box(10.04)将我的网络路由到互联网.这个盒子有2个以太网卡(eth0用于互联网连接,eth1用于lan – 192.168.1.1),我想将端口80转发到我的服务器(192.168.1.254).所以,我设置了以下内容:
iptables -Fiptables -t nat -Fiptables -Xiptables -t nat -Xiptables -t mangle -F# default route:ip route add default via 200.160.111.67# www tunnel:iptables -I FORWARD -p tcp -d 192.168.1.254 --dport 80 -i eth0 -j ACCEPT# this line locks up internet access for all users:#iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.254:80# ssh tunneliptables -I FORWARD -p tcp -d 192.168.1.254 --dport 22 -i eth0 -j ACCEPT# this line uncommented locks all my accesses to external ssh servers:#iptables -t nat -A PREROUTING -p tcp --dport 22 -j DNAT --to-destination 192.168.1.254:22# NATmodprobe iptable_natecho 1 > /proc/sys/net/ipv4/ip_forwardiptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

用于我网络内部连接的NAT正在运行,但是端口转发(ssh和www)都不起作用,我不知道我做错了什么.你可以帮帮我吗?

您的DNAT规则需要更具体一些才能正常工作.一种方法是向每个条件添加–destination(或-d)条件,例如:
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 80 -j DNAT     --to-destination 192.168.1.254iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 22 -j DNAT     --to-destination 192.168.1.254

其中$EXT_IP是路由器的外部(全局可路由)IP地址.

警告:如果内部客户端尝试通过外部(全局可路由)IP地址连接到192.168.1.254上的www或ssh服务,则其连接尝试将失败(直接连接到192.168.1.254的连接将成功).

要解决此问题,最好告诉内部客户端通过其内部IP地址访问服务器.或者,您可以通过添加更多iptables规则来配置“发夹NAT”,如下所示:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.254 -p tcp     --dport 80 -j SNAT --to-source $INT_IPiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.254 -p tcp     --dport 22 -j SNAT --to-source $INT_IP

其中$INT_IP是路由器的内部IP地址(例如192.168.1.1).根据这些规则,从内部客户端到外部IP地址的连接将通过路由器.尽可能避免使用发夹NAT,因为它对网络和路由器系统资源的使用效率相当低.

推荐阅读