我在 linux 上观察到一个奇怪的行为:
首先,我清理所有路由和 iptables 规则:
ip route flush table main
ip route flush table default
ip route flush table local
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT
ip6tables -t nat -F
ip6tables -t mangle -F
ip6tables -F
ip6tables -X
然后我添加一个本地路由:
ip route add local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 table local
然后,在一个终端上我打开一个端口,nc -lp 12345
在另一个终端上我连接到它,nc 127.0.0.1 12345
我可以在 netcat 服务器和客户端之间发送和接收数据。所以现在,一切都很好。
现在,从它并在杀死以前的 netcat 服务器和客户端之后,如果我运行:
iptables -t nat -A POSTROUTING -j MASQUERADE
然后我重新启动 netcat 服务器,然后客户端无法连接。你知道为什么吗?
我注意到添加ip route add local 192.168.0.10 dev wlan0 proto kernel scope host src 192.168.0.10 table local
使 netcat 连接再次起作用。但是,我不明白为什么 wlan0 接口(IP 为 192.168.0.10)会影响环回接口?
有关信息,我正在使用 ArchLinux