我正在使用Ubuntu Server Box(10.04)将我的networking路由到Internet。 这个盒子有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
我的networking内部连接的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规则来configuration“发夹式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地址的连接将stream经路由器。 尽可能避免使用发夹NAT,因为对networking和路由器系统资源的使用效率相当低。