Linux上的負載平衡和NAT-ing多個ISP連接
我有來自兩個不同 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