Архив на категория: Debian 6 Squeeze

Споделяне на повече от една Интернет връзка в локална мрежа

Здравейте,

работя в голям офис, затова наскоро пуснахме втора оптична връзка към Интернет през друг доставчик. Двете връзки не се таксуват нито на свързване, нито на трафик, така че можем да ги наречем равнопоставени.

Понякога потребителите прекаляват с гледането на клипове, слушане на онлайн радиа и т.н., затова работещите колеги се оплакват от скоростта на Интернет връзката. Шейпърите не са опция във фирмата, затова реших да пусна част от по-работещите потребители през новата оптика, а останалите да си работят както досега.

Настройката е много бърза и малка, но все пак реших да я споделя, освен това е тествана и работи 🙂 Изходните данни са следните:

LAN (eth0):
IP 192.168.0.1
Mask 255.255.0.0

WAN1 (eth1):
IP 10.0.0.2
Gateway 10.0.0.1 (default gateway)
Mask 255.255.255.0

WAN2 (eth2):
IP 10.0.1.2
Gateway 10.0.1.1
Mask 255.255.255.0

Потребителите ползват Интернет през WAN1 по подразбиране, а избраните потребители през WAN2. Споделянето на Интернет връзката през WAN1 е осъществено с iptables и е тривиално, тъй като 10.0.0.1 е default gateway за самия сървър, който споделя Интернет-а.

За използване на втората връзка обаче ще трябва да извършим няколко допълнителни стъпки.

Първо искам да създам routing таблица за втората Интернет връзка. Искам да ѝ задам име, защото така е по-прегледно. Това става като редактирам файла /etc/iproute2/rt_tables. В него на най-долния ред записвам:

4 btcroute

С това задавам име на routing таблица номер 4, а името е btcroute, което явно подсказва, че връзката е към БТК.

Нека проверим какво има в тази routing таблица:

ip route show table btcroute
или същата команда, по номер на таблицата
ip route show table 4

Оказва се, че е празна. Затова ще трябва да я напълним 🙂

Тъй като ползвам един скрипт за настройка на всички потребители, ползващи Интернет във фирмата, скрипта първо изтрива правилата и после ги инициализира наново. Ако вие ползвате if-up и if-down, просто поставете частта за изтриването на правилата в if-down.

#flush old rules (изтриване на правилата за таблица 4)
ip route flush table btcroute
ip rule del fwmark 4 table btcroute
ip rule del from 10.0.1.2 table btcroute

След като сме изтрили правилата, ги създаваме наново

#add new rules (добавяне на правилата в таблица 4)
ip route add default via 10.0.1.1 dev eth2 table btcroute
ip rule add fwmark 4 table btcroute
ip rule add from 10.0.1.2 table btcroute

Да ги разясним какво правим. С първия ред добавяме default gateway за тази routing таблица. С втория ред решаваме, че всички пакети, които са маркирани с 4, трябва да се обработват с таблица 4. С третия ред казваме, че щом пакета е от алтернативния ни IP адрес (10.0.1.2), таблица 4 ще го обработи.

С това настройката на iproute2 завърши.

Следва да споделим Интернет връзката с някой от колегите, например 192.168.0.5. За целта трябва да изпълним следните две команди:

iptables -t mangle -A PREROUTING -s 192.168.0.5 -j MARK –set-mark 4
iptables -t nat -A POSTROUTING -o eth2 -s 192.168.0.5 -j SNAT –to-source 10.0.1.2

С първата команда маркираме със стойност 4 всички пакети, които влизат в PREROUTING талбицата на сървъра и са от IP адреса на щастливия 192.168.0.5. С втората команда маскираме Интернет връзката, така че да използва алтернативната Интернет връзка.

Използвана литература:

  1. http://linux-ip.net/html/adv-multi-internet.html