Networking
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 INPUT (policy ACCEPT) target prot opt source destinationChain 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 數據包。
是這樣嗎,我該如何配置呢?
答案在這裡:https ://stackoverflow.com/a/24211455/1234026
簡而言之:netperf對UDP_STREAM測試預設禁用IP路由,如果目標地址在不同的子網,則找不到路由。為了使其正常執行,我需要提供
-R 1
密鑰作為特定於測試的選項。