我在 Jessie Debian 中使用了几条 PREROUTING 规则,按照以下规则将 WAN 端口转发到 LAN ip
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8088 -j DNAT --to-destination 192.168.1.6:8088
ETH0 is public static IP
ETH0:0 is Local lan ip 192.168.1.2
这些是 NAT 相关的 IPTABLES
iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- !192.168.0.0/24 0.0.0.0/0 tcp dpt:8088 to:192.168.1.6:8088
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8091 to:192.168.1.7:80
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8092 to:192.168.1.1:80
DNAT tcp -- !192.168.0.0/24 0.0.0.0/0 tcp dpt:10554 to:192.168.2.10:554
DNAT udp -- !192.168.0.0/24 0.0.0.0/0 udp dpt:10554 to:192.168.2.10:554
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10080 to:192.168.2.1:8081
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10443 to:192.168.2.4:10443
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10052 to:192.168.2.1:8080
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:34567 to:192.168.2.10:34567
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:10050 to:192.168.2.1:10050
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
SNAT tcp -- 0.0.0.0/0 192.168.2.10 tcp dpt:554 to:192.168.1.2
SNAT udp -- 0.0.0.0/0 192.168.2.10 udp dpt:554 to:192.168.1.2
SNAT tcp -- 0.0.0.0/0 192.168.2.1 tcp dpt:8081 to:192.168.1.2
SNAT tcp -- 0.0.0.0/0 192.168.2.4 tcp dpt:10443 to:192.168.1.2
SNAT tcp -- 0.0.0.0/0 192.168.2.1 tcp dpt:8080 to:192.168.1.2
SNAT tcp -- 0.0.0.0/0 192.168.2.10 tcp dpt:34567 to:192.168.1.2
SNAT tcp -- 0.0.0.0/0 192.168.2.1 tcp dpt:10050 to:192.168.1.2
但是,从 LAN 访问该端口时也适用此规则。因此,我可以将任何 IP 和端口 8088 输入浏览器 URL,它始终会到达目的地。例如,我可以输入http://1.1.1.1:8088它会起作用。这不是所需的行为。
我想将 LAN 从 PREROUTING 中排除。
我试过 !-s 192.168.0.0/24 但在预路由中源参数“!”不起作用
我还尝试了另一种方法,即在规则中使用目标参数“-d mydoman.com”,但这只有在我从 /etc/hosts 中删除 mydoman.com 行时才有效,因为 mydoman.com 链接到服务器本地网络 IP。我也想保留该记录。
有没有更好的方法来避免本地网络的预路由规则?
答案1
如果您要从192.168.1.8
DNAT 规则中排除,则应使用192.168.0.0/23
或192.168.1.0/24
作为! -s
参数。网络范围192.168.0.0/24
结束于192.168.0.255
。
$ ipcalc 192.168.0.0/24
Address: 192.168.0.0 11000000.10101000.00000000. 00000000
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.0.0/24 11000000.10101000.00000000. 00000000
HostMin: 192.168.0.1 11000000.10101000.00000000. 00000001
HostMax: 192.168.0.254 11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255 11000000.10101000.00000000. 11111111
Hosts/Net: 254
您可以通过接口而不是使用地址来限制 DNAT 规则。例如:
iptables -t nat -A PREROUTING '!' -i eth0 -p tcp --dport 8088 \
-j DNAT --to-destination 192.168.1.6:8088
或者:
iptables -t nat -A PREROUTING -i ${your_wan_interface} -p tcp --dport 8088 \
-j DNAT --to-destination 192.168.1.6:8088
使用 RETURN 目标也是一个可能的选择:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8088 -j RETURN