我在CentOS 7上configuration一个iptables NAT时遇到了一些问题。当前在NAT后面的客户端可以到达外部IP而不是外部networking。
我遵循这个教程来设置我的NAT,知道它在Gentoo和Arch上运行良好:
http://www.revsys.com/writings/quicktips/nat.html
模式化我的问题:
当我从192.168.2.2 ping:
请注意,我也build立了一个从192.168.1.1:80到192.168.2.2:80的端口转发规则。 这样做很好,根据Wireshark我的数据包被成功转发到192.168.2.2。 然后192.168.2.2回复但数据包被丢弃,所以我看到多个TCP重新传输。 没有任何“主机行政禁止”消息。
当我尝试从外部连接到192.168.2.2:80时,这里是滴水信息:
1 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at tcp_rcv_state_process+1b0 (0xffffffff815e5030) 1 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at tcp_rcv_state_process+1b0 (0xffffffff815e5030) 1 drops at ip_error+68 (0xffffffff815c47d8) 2 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at tcp_v4_do_rcv+80 (0xffffffff815ef160) 1 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at tcp_v4_do_rcv+80 (0xffffffff815ef160) 1 drops at ip_error+68 (0xffffffff815c47d8) 2 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at tcp_v4_do_rcv+80 (0xffffffff815ef160) 2 drops at ip_error+68 (0xffffffff815c47d8) 1 drops at tcp_v4_do_rcv+80 (0xffffffff815ef160) 1 drops at ip_error+68 (0xffffffff815c47d8)
请有人知道我做错了什么吗? 谢谢大家。
编辑:
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth1 -o eth0 -j ACCEPT -A FORWARD -d 192.168.2.2/32 -p tcp -m tcp --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT Chain PREROUTING (policy ACCEPT 1270 packets, 123K bytes) pkts bytes target prot opt in out source destination 30 1696 DNAT tcp -- eth0 any anywhere anywhere tcp dpt:http to:192.168.2.2:80 Chain INPUT (policy ACCEPT 347 packets, 42272 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 6 packets, 431 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 30 packets, 1696 bytes) pkts bytes target prot opt in out source destination 6 431 MASQUERADE all -- any eth0 anywhere anywhere
编辑:
是IP转发已正确设置。 当我从192.168.2.2 ping到192.168.1.2我无法看到192.168.1.2 Wireshark任何传入的数据包。 在使用Wireshark的时候我也看不到eth0的任何包。
奇怪的是,当我成功从192.168.2.2 ping 192.168.1.1时,我看不到在eth0上传入的任何ICMP数据包。
我想我必须补充一些我没有披露的东西,因为我没有发现它是相关的。 实际上,我正试图将一个名为br0的网桥(我的eth1在这里)连接到本地局域网。 我的服务器192.168.2.2是在一个连接到网桥veth的容器。
我不知道是否应该编辑我的所有post,以更好地反映情况。 我认为我的问题纯粹是一个iptable错误,但在networking堆栈中似乎有些问题,因为ping 192.168.1.1时应该看到传入的ICMP数据包。
当我说我已经在Gentoo和Arch上进行了这个设置时,也使用了LXC。 现在我尝试使用systemd-nspawn。 Selinux被定为宽容。 从我的CentOS主机ping 192.168.2.2是好的,迫使它使用eth0不起作用,但这是正常的行为。
路线主持人:
default via 192.168.1.254 dev eth0 proto static metric 100 192.168.2.0/24 dev br0 proto kernel scope link src 192.168.2.1 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 metric 100
路线容器:
default via 192.168.2.1 dev host0 proto static 192.168.2.0/24 dev host0 proto kernel scope link src 192.168.2.2
最后,我非常头疼后find解决scheme…
我正在使用systemd-networkd来设置我的网桥。 虽然net.ipv4.ip_forward被正确设置为1,并且我也将net.ipv4.conf.all.forwarding设置为1,但是似乎systemd-networkd没有考虑到我的默认设置,同时启动网桥。
Si它结束net.ipv4.conf.br0.forwarding被设置为0.我只是将其设置为1,现在它的工作。
对于碰巧遇到类似问题的所有人,请运行以下命令:
sysctl -a | grep "\.forwarding" | grep ipv4
确保您的所有接口都已启用转发。
祝你今天愉快。