Настройка MikroTik и 3G модема в качестве резервного канала

. Просмотров: 18051

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

На днях надо было срочно сделать резервный канал на Микротике с помощью 3G модема с автоматическим переключением резервный/основной.

Данная статья построена на конфигурации описанной в статье Настройка MikroTik RB951G-2HnD

Надеюсь кому-то пригодится.

  1. Втыкаем USB 3G модем в Микротик. Со списком поддерживаемого оборудования можно ознакомится на официальном сайте.
  2. Заходим на Микротик через Winbox в Терминал или по ssh и вводим:

    /interface ppp-client
    print

  3. Если модем появился то увидите что-то вроде этого:

    [admin@papa-admin] /interface ppp-client> print
    Flags: X - disabled, R - running
    0 X name="ppp-out1" max-mtu=1500 max-mru=1500 mrru=disabled port=usb1 data-channel=0
    info-channel=0 apn="internet" pin="" user="" password="" profile=default phone=""
    dial-command="ATDT" modem-init="" null-modem=no dial-on-demand=yes add-default-route=yes
    use-peer-dns=yes keepalive-timeout=30 allow=pap,chap,mschap1,mschap2
    [admin@papa-admin] /interface ppp-client>

    Из списка видно что у нас один интерфейс с номером 0. Если у вас несколько или, к примеру, интернет провайдер через pptp то находим нужный.

  4. Переименовываем модем и снимаем dial-on-demand и use-peer-dns:

    set 0 name=ppp-3G dial-on-demand=no use-peer-dns=no

  5. Создаем список адресов inet2 с адресами которым будет разрешен выход в интернет через 3G модем.

    /ip firewall address-list
    add address=192.168.0.1 disabled=no list=inet2
    add address=192.168.0.100 disabled=no list=inet2

    В нашем примере выход в интернет будет разрешен только адресам 192.168.0.1 & 192.168.0.100.
    Если надо разрешить доступ всем из локальной сети, то используйте команду:
    /ip firewall address-list add address=192.168.0.0/24 disabled=no list=inet2

  6. Смотрим существующие правила файервола (нас интересует forward)

    /ip firewall filter
    print

    7 ;;; Allow related connections
    chain=forward action=accept connection-state=related

    8 ;;; Allow acess to internet
    chain=forward action=accept src-address-list=inet in-interface=bridge-local
    out-interface=wan

    9 ;;; All other drop
    chain=forward action=drop

    [admin@papa-admin] /ip firewall filter>

  7. Нам надо перед последним запрещающим правилом forward (в данном случае оно №9) вставить свое:

    add place-before=9 action=accept chain=forward comment="acess to internet via 3G" disabled=no in-interface=bridge-local out-interface=ppp-3G src-address-list=inet2

  8. Проверяем что у нас получилось командой print:

    8 ;;; Allow acess to internet
    chain=forward action=accept src-address-list=inet in-interface=bridge-local
    out-interface=wan

    9 I ;;; acess to internet via 3G
    chain=forward action=accept src-address-list=inet2 in-interface=bridge-local
    out-interface=ppp-3G

    10 ;;; All other drop
    chain=forward action=drop

    [admin@papa-admin] /ip firewall filter>

  9. Не забываем добавить правило для маскарадинга через 3G модем:

    /ip firewall nat add action=masquerade chain=srcnat out-interface=ppp-3G

  10. Ну, а теперь самое интересное - механизм который будет переключать на резервный канал и обратно. Я предлагаю вариант с Netwatch. Маршрутизатор регулярно будет проверять адрес 8.8.4.4 и в случае его недоступности переключатся на резервный канал 3G модема.
    ВНИМАНИЕ: использование Netwatch имеет существенный недостаток. Лучше использовать скрипт из статьи: Автоматическое переключение на резервный 3G модем

    Первым делом делаем так чтобы пакеты на 8.8.4.4 всегда шли через основного провайдера:

    /ip route add comment="always via ISP1" disabled=no dst-address=8.8.4.4/32 gateway=1.2.3.254

    Теперь создаем netwatch правило:

    /tool netwatch
    add disabled=no down-script="/interface enable [find name=\"ppp-3G\"];\r\
    \n:log warning \"Switch to 3G modem\";\r\
    \n/ip route disable [find comment=\"isp\"];\r\
    \n" host=8.8.4.4 interval=10s timeout=100ms up-script="/interface disable \
    [find name=\"ppp-3G\"];\r\
    \n:log warning \"Switch to main internet\";\r\
    \n/ip route enable [find comment=\"isp\"];\r\
    \n"

    Немного пояснений как это работает: netwatch каждые 10 секунд проверяет адрес 8.8.4.4, если он недоступен (down), то отключает маршрут по умолчанию (с комментом isp) и включает 3G модем. При этом проверка адреса 8.8.4.4 у нас по прежнему будет идти через основного провайдера. Модем у нас настроен так  что сразу подключается и получает от провайдера новый маршрут по умолчанию и адреса DNS серверов. В случае получения ответов от 8.8.4.4 (up) 3G модем отключается, тем самым отключая маршрут и DNS сервера оператора связи, и активируется маршрутизация через основного провайдера.

 

Хочу обратить внимание. что данную статью написал по памяти, на тестовом маршрутизаторе без самого 3g модема. Но принцип, думаю, понятен :)

 

Комментарии  

0 # Vladimir 05.01.2014 09:54
Скрипт не будет работать если пропадет линк до шлюза провайдера: wan перейдет в Unreachable, статический маршрут на 8.8.4.4 следом за ним. И далее весь трафик, включая 8.8.4.4 пойдет через следующий доступный шлюз, а это у нас 3G.
В итоге интернет будет через 3G по 10 секунд с перерывом в 10 секунд.
+1 # alex 06.01.2014 13:05
Вы абсолютно правы. При отсутствии линка на wan интерфейсе получится полная фигня.
У меня как раз в ближайшие дни намечается задачка с 4G модемом, вот на нем и будет время протестировать и сделать скрипт корректно обрабатывающий такую ситуацию.
Спасибо за предупреждение.
+1 # alexander 19.09.2014 09:18
Чтобы избежать этой проблемы, нужно добавить blackhole или unreachable маршрут для 8.8.4.4 с низким приоритетом:
/ip route add comment="else nowhere" disabled=no dst-address=8.8 .4.4/32 distance=200 type=blackhole

Недостаточно прав для комментирования