Iptables

基於路由表從環回介面轉發數據包

  • December 7, 2020

我有一個問題,我需要處理一些數據包並將其發送到多個介面/網路。

我的解決方案是將數據包發送到環回/虛擬介面,並根據 Linux 路由表將數據包轉發到相應的介面/網路。

問題:來自應用程序的數據包被發送到環回/虛擬介面,但它沒有根據路由表轉發。

有沒有辦法根據路由表從環回/虛擬介面轉發數據包。?

我嘗試在 iptables 中接受 FORWARD 鏈中的數據包,但數據包沒有來這裡。我厭倦了啟用/ipv4/ip_forwarding,這也沒有幫助。

編輯 我的設備是一個中間設備,它從一個介面(WAN)收集數據包並處理每個數據包並將其轉發到正確的目的地(不同的 LAN)。現在我的問題是我不知道要發送哪個介面,因為有 n 個輸出介面。我需要根據傳入數據包中的 ip.dst 來引導數據包。

我覺得你想多了。

如果您的應用程序是伺服器,那麼您只需綁定到0.0.0.0它將偵聽所有可用的本地介面(這將在添加/刪除介面時起作用)。如果您只是回复accept()客戶端連接時返回的套接字,它將自動選擇正確的本地 IP 地址進行回复,並將通過正確的介面路由出去。

如果您的應用程序正在啟動與遠端電腦的連接,那麼您需要提前知道主機地址以設置正確的目標地址,您不能只發送一個數據包並期望作業系統通過所有如果您使用單播,則為介面。為此,您需要跟踪電腦上的所有實時介面,然後根據本地地址/子網派生目標 IP 地址。

鑑於評論,我認為您可能希望考慮擴展 iptables,因為這將使您能夠即時攔截/修改/重新發送數據包,並讓正常路由完成它。

例如像這樣的東西

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