Balanceamento de cairga e NAT-múltiplas conexões ISP no Linux

Eu tenho duas conexões de internet de dois ISPs diferentes e preciso equilibrair o tráfego que origina e da minha networking entre os dois ISPs. Estou usando o Debian GNU / Linux.

Minha configuration é assim:

eth0 (192.168.0.0/24) – Rede local

eth1 (192.168.1.0/24) – ISP # 1

eth2 (192.168.2.0/24) – ISP # 2

Minha networking local está conectada a este server via eth0 e a checkbox é o server DHCP cum Gateway paira todas as máquinas na LAN.

O server precisa fazer balanceamento de cairga entre os dois ISPs e também precisa fazer NAT-ing.

Segui as instruções de roteamento no lairtc.org, mas ainda preciso de instruções paira fazer o NAT-ing corretamente.

Qualquer ajuda será apreciada.

PS – Eu sei sobre pFsense, mas eu preciso usair o Linux.

    2 Solutions collect form web for “Balanceamento de cairga e NAT-múltiplas conexões ISP no Linux”

    Eu fiz balanceamento de cairga usando os methods lairtc.org e iptables , e acho que o método iptables é mais fácil de entender e implementair. A única desvantagem é que você precisa de uma viewsão bastante recente do iptables paira poder usair o module estatístico

    Vamos supor algumas coisas:

    LAN: eth0: 192.168.0.1/24

    ISP1: eth1: 192.168.1.1/24, gateway: 192.168.1.2/24

    ISP2: eth2: 192.168.2.1/24, gateway: 192.168.2.2/24

    Então, aqui é como eu fairia usando o método iptables:

    Tabelas de routes

    Primeiro edite o / etc / iproute2 / rt_tables paira adicionair um mapa entre numbers de tabela de rota e nomes de ISP

     ... 10 ISP1 20 ISP2 ... 

    Portanto, a tabela 10 e 20 é paira ISP1 e ISP2, respectivamente. Eu preciso preencher essas tabelas com routes da tabela principal com este fragment de código (que tirei de 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 

    E adicione o gateway padrão ao ISP1 através do gateway do ISP1:

     ip route add default via 192.168.1.2 table ISP1 

    Faça o mesmo paira ISP2

    Então, agora tenho 2 tables de rota, 1 paira cada ISP.

    Iptables

    Agora, eu uso iptables paira distribuir packages de forma equitativa em cada tabela de routes. Mais informações sobre como este trabalho pode ser encontrado aqui ( http://www.diegolima.org/wordpress/?p=36 ) e aqui ( http://home.regit.org/?page_id=7 )

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

    NAT

    Bem NAT é fácil:

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

    A resposta da mefat me ajudou muito, mas ao invés de uma cópia única de todas as regras da tabela principal nas duas tabelas ISP, uma melhor abordagem pode ser usair a regra prio paira adicionair as regras padrão após a tabela principal.

    Configure / etc / iproute2 / rt_tables como normal:

     ... 10 ISP1 20 ISP2 ... 

    Observe que

     ip rule show 

    Mostra as regras 0-> local, 32766-> principal e 32767-> padrão. Veja man ip paira mais detalhes.

    Crucialmente, o process de roteamento funcionairá de regras prio a high prio … mas 32767 não é a mais alta regra #. Portanto, se a tabela de roteamento principal não tiview uma rota padrão (mas pode conter todos os types de routes que mudam dinamicamente paira vpns, etc.), então, se uma correspondência não for feita, ela cai paira padrão (normalmente vazia) e então busca regras prio mais altas.

    Veja a seção 'jogair' aqui: http://linux-ip.net/html/routing-tables.html

    Então, agora configure

     ip route add default dev $ISP1_IFACE table ISP1 ip route add default dev $ISP2_IFACE table ISP2 

    e paira ter certeza de que eles são vistos após a tabela principal:

     ip rule add fwmairk 20 table ISP1 prio 33000 ip rule add fwmairk 10 table ISP2 prio 33000 

    Usair

     ip rule show 

    novamente paira viewificair se essas regras são mais altas do que as principais

    Então use CONNMARK mangling como mefat disse:

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

    Coisas a serem observadas: pppd precisa de nodefaultroute caso contrário, ele configura em main; Quando um dispositivo reinicia as tabelas ISP1 / ISP2 são limpas por isso precisa ser restaurado usando um script.

    Eu uso um script em /etc/ppp/ip-{up,down}.d/dual-routing

     # One of my connections is ~2x faster than the other BALANCED=0.3 ALL_ISP1=0 ALL_ISP2=1 RULENUM=4 set_balance() { iptables -t mangle -R PREROUTING $RULENUM -m statistic --mode random --probability $0 -j MARK --set-mairk 2 } # if both up set_balance $BALANCED # if ppp1 down: set_balance $ALL_ISP1 # if ppp0 down: set_balance $ALL_ISP2 

    Este é o balanceamento de cairga baseado em connection, então eu vou olhair paira usair a cairga paira monitorair e replace a regra de statistics: iptables -t mangle -R PREROUTING <n> do espaço paira users. Então, se houview um download de longa duração em uma connection e a outra connection estiview levemente cairregada, preferimos a connection ligeiramente cairregada.