Networking

netperf + iptables 偽裝 -> 網路不可達

  • September 12, 2016

為什麼 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 destination

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 數據包。

是這樣嗎,我該如何配置呢?

答案在這裡:https ://stackoverflow.com/a/24211455/1234026

簡而言之:netperf對UDP_STREAM測試預設禁用IP路由,如果目標地址在不同的子網,則找不到路由。為了使其正常執行,我需要提供-R 1密鑰作為特定於測試的選項。

引用自:https://serverfault.com/questions/802320