兩個 ISP 和多路徑網關配置

兩個 ISP 和多路徑網關配置

我有兩個不同的 ISP。我想設置某種負載平衡設置,將資料包分發給這些提供者。我知道這可以使用不同的路由表來完成,但我想使用稱為“多路徑網關”的東西。

我已經在文件中配置了兩個介面/etc/network/interfaces。兩個連接都是單獨工作的。我將預​​設網關替換為以下網關:

# ip route add default \
    nexthop via 192.168.1.1 dev bond0 weight 1 \
    nexthop via 10.143.105.17 dev wwan0 weight 1

iptables我在兩個介面上添加了偽裝目標:

iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o bond0 -j MASQUERADE

我還通過以下方式啟用了(部分)反向路徑過濾sysctl

net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 2

這個設定有效。資料包(連接)透過兩個介面發送。只有一個問題我不懂。

當我想使用以下命令檢查我的 IP 位址時:

$ curl text.whatisyourip.org
$ curl eko.one.pl/host.php

兩種情況下的 IP 位址不同,這意味著該機制運作良好。我也可以看到它在wireshark.但是,例如,當我嘗試向上述第一個網域發送多個請求時,我總是得到相同的 IP 位址作為回應。因此,發送到特定 IP 位址的封包看起來總是透過同一介面。我只是想知道為什麼。是否有任何機制可以記住先前請求的目標 IP 位址,並使下一個請求透過相同的介面傳送到相同的位址?

答案1

我已經成功解決了這個問題。在這個連結您可以閱讀以下內容:

IPv4:基於雜湊的多路徑路由。當路由快取在 3.6 中被刪除時,IPv4 多路徑演算法從或多或少基於目的地變為準隨機的每資料包調度。這增加了封包亂序的風險,並且無法將多路徑與選播服務一起使用。在此版本中,多路徑路由實作被替換為基於流的負載平衡,該負載平衡基於來源位址和目標位址合併提交的雜湊值

因此,即使在核心 3.6 中刪除了緩存,請求仍然會被緩存。現在來源位址和目標位址很重要。這就是為什麼資料包總是通過相同的介面。

相關內容