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

前端之家收集整理的这篇文章主要介绍了ubuntu – 使用iptables进行端口转发不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Ubuntu Server Box(10.04)将我的网络路由到互联网.这个盒子有2个以太网卡(eth0用于互联网连接,eth1用于lan – 192.168.1.1),我想将端口80转发到我的服务器(192.168.1.254).所以,我设置了以下内容
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X
iptables -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 tunnel
iptables -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

# NAT
modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -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.254

iptables -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_IP

iptables -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,因为它对网络和路由器系统资源的使用效率相当低.

猜你在找的Ubuntu相关文章