Bai*_*ose 17 networking linux local-area-network nat load-balancing
我有来自两个不同 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 的说明。
任何帮助将不胜感激。
PS - 我知道 pFsense,但我需要使用 Linux。
小智 21
我已经使用lartc.org和iptables方法做了负载均衡,我发现iptables方法更容易理解和实现。唯一的缺点是你需要一个相当新的iptables版本才能使用统计模块
让我们假设一些事情:
局域网: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
...
Run Code Online (Sandbox Code Playgroud)
因此表 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
Run Code Online (Sandbox Code Playgroud)
并通过该 ISP1 的网关将默认网关添加到 ISP1:
ip route add default via 192.168.1.2 table ISP1
Run Code Online (Sandbox Code Playgroud)
对 ISP2 执行相同操作
所以现在我有 2 个路由表,每个 ISP 1 个。
好的,现在我使用 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
Run Code Online (Sandbox Code Playgroud)
NAT 很简单:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
39331 次 |
最近记录: |