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