Linux上的负载均衡和NAT多个ISP连接

我有来自两个不同ISP的两个互联网连接,我需要平衡来自两个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.

解决方法

我使用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

NAT很简单:

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

相关文章

在Linux上编写运行C语言程序,经常会遇到程序崩溃、卡死等异...
git使用小结很多人可能和我一样,起初对git是一无所知的。我...
1. 操作系统环境、安装包准备 宿主机:Max OSX 10.10.5 虚拟...
因为业务系统需求,需要对web服务作nginx代理,在不断的尝试...
Linux模块机制浅析 Linux允许用户通过插入模块,实现干预内核...
一、Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个...