为什么 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 1
key 作为测试特定的选项。