我有一個具有多個介面的系統。我使用一些sysctl
選項以及路由表和規則將所有這些介面相互隔離。
每個介面都有自己的路由表,定義預設路由。
每個路由表都有一組 4 條規則,用於定義哪些資料包應傳送至哪個表。
為了簡單起見,假設我有eth0 (192.168.1.1)
和eth1 (192.168.1.2)
。
從
192.168.1.1
表eth0
到
192.168.1.1
餐桌eth0
eth0
table eth0
歐伊夫 eth0
table eth0
因為eth2
它是一樣的。
選項sysctl
有:
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1
這對於我 99% 的預期用例都非常有效,但有一個失敗了。如果封包是從未綁定的套接字產生的,例如使用「sendto」回覆 UDP 用戶端,則呼叫會失敗並顯示「網路無法存取」。如果在呼叫sendto之前綁定了特定的IP位址,則呼叫會如預期般成功。
如果無法為此類情況設定包羅萬象的預設路由,是否可以使用策略路由(例如 iptables、ip 規則)來解決此問題?
謝謝