netperf + iptables 伪装 -> 网络不可达

netperf + iptables 伪装 -> 网络不可达

为什么 iptables 规则可以通过 netperf TCP_STREAM 测试,但是会破坏 UDP_STREAM?

我有一个网络:

    +---------------+
    |               |
[client]--[NAT]--[server]

在NAT上,我添加了以下iptables规则:

$ iptables -t nat -L

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

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  --  anywhere             anywhere 

$ iptables -L:链输入(策略接受)目标保护选择源目标

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             state NEW,RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

当我在客户端上运行ping server、通过 TCP 运行 netperf 以及通过直接连接通过 UDP 运行 netperf 时,它运行良好。但是如果我运行以下命令,它不起作用:

$ netperf -H 192.168.2.10 -t UDP_STREAM -l 1
MIGRATED UDP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.2.10 () port 0 AF_INET : demo
send_data: data send error: errno 101
netperf: send_omni: send_data failed: Network is unreachable

看起来,iptables 防火墙阻止了 UDP 数据包。

是的吗?我该如何配置它才能避免这种情况?

答案1

答案就在这里:https://stackoverflow.com/a/24211455/1234026

简而言之:netperf 默认禁用 UDP_STREAM 测试的 IP 路由,如果目标地址位于不同的子网中,则无法找到路由。为了使其正常运行,我需要提供-R 1key 作为测试特定的选项。

相关内容