Har*_*ris 6 networking tcp loopback iptables
我正在尝试检查软件在出现网络故障时的行为方式。该软件正在使用tcpsend()并recv()进行通信。
以前,我通过将它们放在 LAN 网络上的 2 台不同机器上来使软件进行通信。因此,为了模拟网络故障,我使用了以下规则。
sudo iptables -A INPUT -p tcp -s 10.100.52.234 -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
让我们假设10.100.52.234是其中一个系统的 IP。这导致一瞬间的失败。一切都很好。
现在,我正在尝试使用 loopback address 在一台机器上模拟这一点127.0.0.1。一切都像以前的设置一样工作,但上面的命令不起作用。它不会使网络连接失败,软件只是挂起。没有发生通信,但也不会失败。
我已经使用了命令
sudo iptables -A INPUT -p tcp -s 127.0.0.1 -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
和
sudo iptables -A INPUT -p tcp -i lo -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
两者都不起作用。该软件需要很长时间才能失败。
是否有不同的方法可以立即使环回地址的连接失败?
127.0.0.1我重现了您的结果(在我sshd监听时尝试进行 SSH 连接)。确实,软件只是挂起。
我认为该软件正在等待响应或错误消息,但错误消息属于同一规则并被拒绝。我不知道错误消息是否存在一些连锁反应——我没有调查那么远。我可能一开始就弄错了,所以如果有人有更好的解释,我会很乐意阅读。
这是在我的 Debian 中有效的解决方案:
您应该连接到127.0.0.2(此处有解释)并制定规则,如下所示:
sudo iptables -I INPUT 1 -p tcp -d 127.0.0.2 -j REJECT --reject-with tcp-reset
Run Code Online (Sandbox Code Playgroud)
请注意-I INPUT 1确保将规则插入到第一个位置的片段,以优先于ACCEPT环回接口上可能已有的任何规则(就像我在 Debian 中一样)。
我重复了测试(尝试使用 SSH 连接,这次是127.0.0.2)。它立即失败了
Connection refused
我认为它如您所愿,因为现在错误消息注定是127.0.0.1,因此不会被拒绝规则捕获并能够通过。
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |