Linux

Linux上的負載平衡和NAT-ing多個ISP連接

  • March 26, 2014

我有來自兩個不同 ISP 的兩個 Internet 連接,我需要平衡兩個 ISP 之間來自我的網路的流量。我正在使用 Debian GNU/Linux。

我的設置是這樣的——

eth0(192.168.0.0/24) – 本地網路

eth1(192.168.1.0/24) – ISP #1

eth2(192.168.2.0/24) – ISP #2

我的本地網路通過 eth0 連接到該伺服器,該框是 LAN 中所有機器的 DHCP 伺服器兼網關。

伺服器需要在兩個 ISP 之間進行負載平衡,還需要進行 NAT-ing。

我已按照lartc.org上的路由說明進行操作,但我仍然需要說明才能正確進行 NAT-ing。

任何幫助將不勝感激。

PS - 我知道 pFsense,但我需要使用 Linux。

我已經使用 lartc.org 和iptables方法完成了負載均衡,我發現iptables方法更容易理解和實現。唯一的缺點是您需要一個相當新的iptables版本才能使用統計模組

讓我們假設一些事情:

LAN: eth0: 192.168.0.1/24

ISP1:eth1:192.168.1.1/24,網關:192.168.1.2/24

ISP2:eth2:192.168.2.1/24,網關:192.168.2.2/24

所以這是我使用 iptables 方法的方法:

路由表

首先編輯 /etc/iproute2/rt_tables 以添加路由表編號和 ISP 名稱之間的映射

...
10 ISP1
20 ISP2
...

所以表 10 和 20 分別適用於 ISP1 和 ISP2。我需要使用此程式碼片段(我取自 hxxp://linux-ip.net/html/adv-multi-internet.html)使用來自主表的路由填充這些表

ip route show table main | grep -Ev '^default' \
  | while read ROUTE ; do
    ip route add table ISP1 $ROUTE
done

並通過 ISP1 的網關將預設網關添加到 ISP1:

ip route add default via 192.168.1.2 table ISP1

對 ISP2 做同樣的事情

所以現在我有 2 個路由表,每個 ISP 有 1 個。

iptables

好的,現在我使用 iptables 將數據包均勻地分配到每個路由表。更多關於這項工作的資訊可以在這裡(http://www.diegolima.org/wordpress/?p=36>)和這裡(<http://home.regit.org/?page_id=7)找到

# iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j ACCEPT
# iptables -t mangle -A PREROUTING -j MARK --set-mark 10
# iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 20
# iptables -t mangle -A PREROUTING -j CONNMARK --save-mark

夜晚

那麼NAT很容易:

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE

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