為什麼通過 libpcap 發送的數據包會被本地主機過濾掉?
我有一些在 linux ( linux_host)上執行的模擬器軟體,其中正在執行另一個 linux ( linux_sim )。模擬器使用 libpcap 訪問乙太網以在linux_sim上提供網路模擬。網路在linux_host和linux_sim上啟動OK。我可以從linux_sim訪問 LAN 中的任何主機(例如,它使用 dhcp 來設置 IP)。
問題是從linux_sim發送的數據包沒有到達linux_host,但是它們以相反的方向行進。後者我可以用在linux_host上執行的 wireshark 來證明:如果我在 linux_host 上 ping linux_sim -我看到 ICMP 請求和回复(來自linux_sim)沒有到達linux_host,如果我 ping 反之亦然 - 我只看到 ICMP 請求(來自linux_sim) .
以下大致描述了我擁有的架構:
LAN | linux_host-----[eth0] | libpcap | simulator | linux_sim
附言
linux_host和linux_sim具有不同的 MAC 地址、IP 和來自 LAN 的看起來像獨立的 linux 主機。
我在三台不同的 linux 機器上嘗試了相同的結果(使用 Debian、CentOS 和 Gentoo)。
那麼,在這種情況下,您有什麼建議檢查/調整/配置?因為我認為在這種情況下linux_host需要一個不尋常的路由/過濾配置。
更新
廣播流量確實從linux_sim到達linux_host ,因為我看到 IP 地址已通過 ARP 解析(請求廣播得到答复),當 ping 開始時正常。
我認為一個很好的測試是將 linux_host 和 linux_sim 放在不同的子網上。在這個 VLAN 上放置一個路由器(可能是另一個 linux 機器),並在兩個子網中給它兩個子介面,並讓它能夠在機器之間路由。我認為您在反向路徑檢測方面遇到了某種問題。你已經把它關掉了嗎?
您沒有太多關於如何配置網路的資訊。如果您的模擬器通過網橋介面訪問外部世界,您必須考慮 NIC 硬體(及其驅動程序)在做什麼。例如,在大多數較新的 Intel NIC 上,您必須禁用 GRO 才能使 TCP 與橋接 VM 一起工作。NIC 硬體解除安裝和 IO-SRV 也經常出現問題。查看您的驅動程序文件以獲取有關橋接的說明。