Skip to content

By Тодор in Linux

Постановката е следната:
Линукс рутер който се ползва за 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те линии едновременно и можем да конфигурираме предпочитан и резервен доставчик.

Tags: , , , , , , ,

Comment Feed

One Response

  1. Ivan09/10/2014 @ 10:39 am

    Здравей ако не е проблем би ли написал статия и за това как става да следи състоянието на 2 те линии едновременно и резервен доставчик благодаря



Some HTML is OK

or, reply to this post via trackback.