rev="post-447" 1 Comment
Постановката е следната:
Линукс рутер който се ползва за NAT-ване на домашна/офис мрежа за достъп до Интернет.
Два Интернет доставчика за да има някаква резервираност.
В най-простия пример линукс рутера е с 3 лан-карти – Доставчик1, Доставчик2 и Вътрешна мрежа. Приемам, че можете да си конфигурирате маскирането (NAT) така, че вътрешната мрежа да има Интернет, но проблема ви е, че рутера не може да има едновременно два шлюза по подразбиране (default gateway). Добре де, за тези, които не знаят ще дам кратко примерче и за това 🙂
Доставчик1:
закачен е към eth0
IP: 100.100.100.12/255.255.255.0
GW: 100.100.100.1
Доставчик2:
закачен е към eth1
IP: 200.200.200.56/255.255.255.0
GW: 200.200.200.1
Вътрешна мрежа:
закачена е към eth2
192.168.1.1/24
Транслиране на изходящия трафик през интерфейсите към Интернет доставчиците:
# iptables -t nat -A POSTROUTING -j MASQUERADE
Маскирането по този начин работи дори и IP адреса да е динамичен.
От тук нататък дали ще ползваме Доставчик1 или Доставчик2 зависи само от това кой шлюз по подразбиране ще оставим активен на рутера – 100.100.100.1 или 200.200.200.1.
Сега едно малко скрипт-роботче ще проверява през 5 минути (или колкото вие решите) дали има връзка към Интернет. Проверката ще става като пингва един от ДНС сървърите на OpenDNS 208.67.222.222 (може и ИП адреса на някой root-DNS да сложите, няма значение – нещо което е винаги винаги на линия). Механизъмът е устроен така, че ако не получи отговор, ще подмени шлюза с този на другия доставчик.
#!/bin/bash
GW1=100.100.100.1
GW2=200.200.200.1
CHECK_HOST=208.67.222.222
DEFAULT_GW=`ip route list | grep default | awk '{print $3}'`
if /bin/ping -n -c 5 $CHECK_HOST 1>/dev/null 2>/dev/null; then
echo "Link OK"
else
echo "Link down! Switching..."
if [ $DEFAULT_GW==GW1 ]; then
ip route del default
ip route add default via $GW2
else
ip route del default
ip route add default via $GW1
fi
fi
Копирайте този скрипт в текстов файл, направете го изпълним (chmod +x filename) и го добавете в crontab за изпълнение през определено време.
В този пример и двата доставчика са еднакво предпочитани. Т.е. когато от Д1 отпадне и преминем на Д2 – ще останем на Д2 дори и след като Д1 възстанови нормална работа. И така докато ползваният в момента доставчик не отпадне.
В следващ пост ще покажа и пример с 2 доставчика, в който се следи състоянието на 2те линии едновременно и можем да конфигурираме предпочитан и резервен доставчик.
Здравей ако не е проблем би ли написал статия и за това как става да следи състоянието на 2 те линии едновременно и резервен доставчик благодаря