Это старая версия документа.
Содержание
FIXME IP-Балансировка: объединяем несколько интернет каналов в один
Цели и средства
- Имеется два или более каналов интернет,работающие на разных интерфейсах
- Необходимо объединить эти каналы,увеличив общую скорость интернет,что может быть полезно для программ,создающих множественные подключения (Transmission,aMule и т.д.)
- В руководстве предлагается 3 способа это сделать.Два из них не требуют дополнительного программного обеспечения,третий предполагает использование пакета patch-o-matic-ng (последний способ не проверен автором данного руководства)
Способ 1
- Настройка iproute2 : Создать в /etc/iproute2/rt_tables две таблицы для каждого из провайдеров:
sudo nano /etc/iproute2/rt_tables
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 101 FreeNet 102 Wireless
- Создать файл /etc/routing/FreeNet.list в него можно дописывать адреса путь к которым будет идти четко через основного провайдера.
- Создать и запустить данный скрипт,предварительно отредактировав переменные:
#!/bin/sh ################### CONFIG ############ FreeNet="/etc/routing/FreeNet.list" ### Home Network l_eth=eth2 l_ip=192.168.5.1 l_net=192.168.5.0/24 ########### Local ISP Network ######### li_net=10.0.0.0/8 ########### ISP1 ###################### i1_eth=eth0 i1_ip=89.252.20.173 i1_net=89.252.20.0/24 i1_gw=89.252.20.1 ########### ISP2 ###################### i2_eth=eth1 i2_ip=10.1.2.161 i2_net=10.0.0.0/16 i2_gw=10.1.0.1 #########ip route2 tables############## t1=101 t2=102 ####################################### ########### Flushing ################## iptables -t mangle -F NEW_OUT_CONN iptables -t mangle -F PREROUTING iptables -t mangle -F OUTPUT iptables -t mangle -X NEW_OUT_CONN ip route flush table $t2 ip rule del table $t2 ip route flush table $t1 ip rule del table $t1 ip route flush cache ####################################### iptables -t mangle -N NEW_OUT_CONN iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1 iptables -t mangle -A NEW_OUT_CONN -m statistic --mode random --probability 0.50 -j RETURN iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 2 for file in $FreeNet; do if [ -f "$file" ]; then { cat "$file" ; echo ; } | while read ip_addr; do if [ "$ip_addr" != "" ]; then echo "Статическая маршрутизация для $ip_addr" iptables -t mangle -A NEW_OUT_CONN -d $ip_addr -j CONNMARK --set-mark 1 fi done fi done iptables -t mangle -A PREROUTING -d $l_net -j RETURN iptables -t mangle -A PREROUTING -d $li_net -j RETURN iptables -t mangle -A PREROUTING -s $l_net -m state --state new,related -j NEW_OUT_CONN iptables -t mangle -A PREROUTING -s $l_net -j CONNMARK --restore-mark iptables -t mangle -A OUTPUT -d $l_net -j RETURN iptables -t mangle -A OUTPUT -d $li_net -j RETURN iptables -t mangle -A OUTPUT -s $l_net -m state --state new,related -j NEW_OUT_CONN iptables -t mangle -A OUTPUT -s $li_net -j CONNMARK --restore-mark ip route add $l_net dev $l_eth scope link table $t1 ip route add $i2_net dev $i2_eth scope link table $t1 ip route add $i1_net dev $i1_eth scope link src $i1_ip table $t1 ip route add 127.0.0.0/8 dev lo scope link table $t1 ip route add default via $i1_gw table $t1 ip rule add prio 51 fwmark 1 table $t1 ip rule add from $i1_ip table $t1 ip route add $l_net dev $l_eth scope link table $t2 ip route add $i1_net dev $i1_eth scope link table $t2 ip route add $i2_net dev $i2_eth scope link src $i2_ip table $t2 ip route add 127.0.0.0/8 dev lo scope link table $t2 ip route add default via $i2_gw table $t2 ip rule add prio 52 fwmark 2 table $t2 ip rule add from $i2_ip table $t2 ip route flush cache
- Это рабочее решение в приниципе для любой Linux системы с версией iptables 1.3.8 и выше.
Способ 2
- Создаём папку для скриптов:
sudo mkdir /etc/balance
- Для начала определим переменные:
#!/bin/bash # LAN interface IF0="eth1" # WAN interface 1 IF1="eth0" # WAN interface 2 IF2="ppp0" IP1="194.9.xx.xx" IP2="`ip addr show $IF2 | grep inet | awk '{print $2}'`" # gateway 1 P1="194.9.xx.xx" # gateway 2 P2="195.5.xx.xx" # LAN netmask P0_NET="192.168.0.0/24" # WAN1 netmask P1_NET="194.9.xx.xx/xx" # WAN2 netmask P2_NET="195.5.xx.xx/xx" TBL1="provider1" TBL2="provider2" # Realtive weight of channels bandwidth W1="2" W2="1"
- Добавим в файл /etc/iproute2/rt_tables две дополнительные таблицы маршрутизации:
echo "1 provider1" >> /etc/iproute2/rt_tables echo "2 provider2" >> /etc/iproute2/rt_tables
ведутся работы