我一直在为自己设置路由器,主要用于 dns+dhcp 功能(与许多虚拟机混在一起)。我有两个接口 eth0 和 eth1。eth0 可以看作是 WAN,eth1 是内部网络。
这是我当前的 IPtables 规则,它在启动时运行,并且运行良好,只是转发而已。
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 10.3.193.185
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
这是我已经尝试添加但不起作用的规则。
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j DNAT --to 10.3.193.185
我还有多个 Web(端口 80)服务器,那么我该如何进行端口转发?
答案1
如果您只是想将到达路由器端口 80 的流量转发到某个内部服务器的端口 80,则需要以下一系列预路由和转发规则才能使端口转发正常工作。
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 80 --sport 1024:65535 -j DNAT --to 10.3.193.185:80
iptables -A FORWARD -p tcp -i eth0 -o eth1 -d 10.3.193.185 --dport 80 --sport 1024:65535 -m state --state NEW -j ACCEPT
iptables -A FORWARD -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT