Переключение Ubuntu с Ethernet-на-ADSL-модема на USB 3G ключ

У меня есть подключенный к Интернету сервер Ubuntu, подключенный через Ethernet к жилой линии ADSL. В большинстве случаев этого достаточно, но я не могу полагаться на то, что ADSL-соединение будет настолько надежным, насколько мне хотелось бы. Закон Мерфи уже продиктовал, что время простоя наступает, когда это наименее удобно.

Я бы хотел использовать USB-ключ 3G с платой по мере использования для обеспечения отработки отказа. Мне не хватает информации как о типовых конфигурациях, которые работают для других людей, так и о наиболее подходящем (недорогом) оборудовании для моих целей. Цель состоит в том, что, когда моя линия ADSL отключена, сервер обнаруживает это и подключается к услуге 3G - отслеживая линию ADSL и бесперебойно переключаясь обратно, когда его соединение восстанавливается.

Основной сервис, который мне небезразличен, - это туннель OpenVPN - через UDP к удаленному серверу. Другим полезным сервисом был бы Squid - поэтому у меня все еще будет доступ к сети из моей локальной сети, когда ADSL отключен.

Вопросы:

  1. Насколько сложно это будет настроить?
  2. Буду ли я вынужден "свернуть свой собственный" - или есть пакеты / инструкции, которые я пропустил?
  3. Какое (недорогое) аппаратное обеспечение рекомендуется (главным образом, связано с автоматической надёжностью)?
  4. Любые анекдоты успеха или неудачи от других, кто уже занялся этим?

6 ответов

Я делал это в любое время для клиентов, и я не нашел развитой системы, чтобы сделать это, поэтому я когда-либо делал свои собственные, шаги, которые Манве дал вам, более или менее те, что я делаю, когда они мне нужны, но я вставлю сюда любые грубые скрипты bash, которые я использую (когда у меня есть время, я хочу сделать это намного лучше в python).

В основном я проверяю, есть ли у меня интернет или нет, и использую ли я резервное копирование WAN и вносить необходимые изменения

#!/bin/bash
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
primary_gw="192.168.1.1" #for example.
check_one="8.8.8.8"
check_two="8.8.4.4"

#first we check internet connection.
if `ping -c 1 -W 1 $check_one |grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null` &&\
   `ping -c 1 -W 1 $check_two |grep -E '(unreachable|100\%\ packet\ loss)' &>/dev/null`
  then #if we don't have internet
    if [ -e /tmp/wan_backup ]
      #if we are using backup right now we try to change to primary connection
      then ./script_change_to_primary.sh && rm /tmp/wan_backup
      #else we change to wan backup.
      else ./script_change_to_backup.sh && touch /tmp/wan_backup
    fi
fi

#if we are using wan backup right now we check if primary connection works.
if [ -e /tmp/wan_backup ]
  then
    if `ip route add $check_one via $primary_gw; ip route add $check_two via $primary_gw;\
        sleep 2; ping -c 1 -W 1 $check_one | grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null &&\
        ping -c 1 -W 1 $check_two | grep -E '(unreachable|100\%\ packet\ loss)' &> /dev/null`
      then #don't works we clean the routes and stay using backup
        ip route del $check_one via $primary_gw
        ip route del $check_two via $primary_gw
      else #it works so we change active connection 
        ip route del $check_one via $primary_gw
        ip route del $check_two via $primary_gw
        ./script_change_to_primary.sh
        rm /tmp/wan_backup
    fi
fi

Учитывая, что вы хотите, чтобы ваш сервер использовал 3g только в случае сбоя adsl, я использовал бы только iptables snat или masquerade только в adsl iface и заблокировал бы доступ к squid в./script_change_to_secondary.sh, ваши файлы могут быть:

script_change_to_secondary.sh

#!/bin/bash
pon 3gIsp #this one it is going to change the default route of server anyway
#drop squid connections, you could disable here the boot snat or masquerade for adsl
#but given your adsl is not active i don't see the need anyway
iptables -I INPUT -s LAN_IP_RANGE -d SERVER_IP -p tcp --dport 3128 -j DROP

script_change_to_primary.sh

#!/bin/bash
poff 3gIsp
iptables -D INPUT -s LAN_IP_RANGE -d SERVER_IP -p tcp --dport 3128 -j DROP
/etc/init.d/openvpn restart

Вы также должны иметь в /etc/ppp/ip-up.d/ скрипт bash с "/etc/init.d/openvpn restart", так что каждый раз, когда вы подключаетесь к провайдеру ppp, ваш openvpn будет перезапускаться автоматически.

Ну, как я уже сказал, это немного уродливо и грубо, но это работает:), если вы найдете интегрированное чистое решение для этого, дайте мне знать, пожалуйста:), одна хорошая вещь, которую вы делаете сами, это то, что у вас есть полный контроль системы, это упрощение того, что я делаю с любыми клиентами, у которых есть два или три соединения в одно и то же время и которые выполняют балансировку нагрузки и QoS, все интегрированные со сценариями, которые обнаруживают проблемы с соединениями и изменяют маршруты и QoS.

Если вы предпочитаете интегрированное решение по собственному усмотрению, вы можете использовать дистрибутив, например zentyal, он поддерживает то, что вы хотите использовать, но это полный дистрибутив, созданный для создания сервера SmallBusiness, я обычно предпочитаю настраивать свои серверы на моем собственный, но это хороший дистрибутив, которым можно управлять через Интернет.

У нас есть пара небольших маршрутизаторов edimax 3g, которые имеют 1 wlan, 1 lan и usb для 3G-флешки. Порт LAN может быть настроен как часть локальной сети или как основной порт порта WAN (3g действует как аварийное переключение). Я не связан с edimax, и мы используем их в дороге или на конвенциях для их размера (и один из тех, что у нас есть, работает от батареи).

Сказав, что я пойду с настройкой на сервере Ubuntu.

ответы:

  1. Легко, если вы опытный администратор сервера. В противном случае, если вы готовы потратить время, чтобы узнать и понять, что вы делаете, это выполнимо для опытного пользователя.
  2. Я не знаю о доступных пакетах, но

изменить на 3g - пример сценария:

pon YourIsp-name
route del default gw "your_adls_defaultGW"
route add -host "ping_or_other_test_host_for_checking_adsl_route" gw  "your_adls_defaultGW"
"do_other_stuff_like_restart_openvpn_maybe"

перейти на adsl - пример скрипта:

poff YourIsp-name
route add default gw "your_adls_defaultGW"
route del -host "ping_or_other_test_host_for_checking_adsl_route" gw  "your_adls_defaultGW"
"do_other_stuff_like_restart_openvpn_maybe"

Использование dhcp с adsl испортит этот простой пример, и вам придется либо изменять /etc/resolv.conf при каждом изменении, либо использовать открытые dns-серверы, такие как Google 8.8.8.8 (или ваш собственный распознаватель). Теперь... мониторинг немного сложнее, но если поместить что-то подобное в cron (не надо, это наивный пример), вы получите отказоустойчивость до 3g и обратно.

ping -q -c 2 "ping_or_other_test_host_for_checking_adsl_route"  && TARGETUP=1 || TARGETUP=0 ;  echo $TARGETUP ; if [ "$TARGETUP" == 1 ] ; then ( rm /tmp/.adsl_down ; [ -e /tmp/.adsl_up ] || ( PATH_TO_YOUR_ADSL_UP_SCRIPT && touch /tmp/.adsl_up ) ); else  ( rm /tmp/.adsl_up ; [ -e /tmp/.adsl_down ] || ( PATH_TO_YOUR_3G_UP_SCRIPT && touch /tmp/.adsl_down )) ; fi

3) Посмотрите на маршрутизаторы Edimax 3g ( zeroshell linuxfw-distribution выглядит так, как будто в zeroshell есть отказоустойчивость, поэтому приобретите дешевый компьютер для маршрутизатора и используйте zeroshell. Хотя я его не тестировал)

Четыре) Тестируйте, сохраняйте, и когда аварийное переключение необходимо в первый раз, оно потерпит неудачу (из-за чего-то глупого...).

Я не уверен, что вам нужен squid для этой настройки, если только вы не ускорите соединение 3g с локальным кешем наиболее часто посещаемых вами страниц.

Рассматривали ли вы какие-либо аппаратные решения, поскольку я вижу большинство постеров, использующих программные решения?

Не уверен, сколько вы хотите потратить, но DrayTek Vigor 2830n будет соответствовать вашим потребностям. Могут быть более дешевые альтернативы, но именно эту я использовал на двух разных сайтах и ​​функционировал исключительно хорошо.

На этом устройстве есть 3 WAN-соединения, стандартная линия ADSL, Ethernet-соединение и 3G-адаптер. Вы можете настроить это, используя ADSL и 3G ключ и сам маршрутизатор. Ключ 3G не обязательно должен находиться в "режиме балансировки нагрузки", а только в режиме чистого WAN-резервного копирования.

Перечитав исходный пост, я хотел бы добавить, что вы даже можете ограничить трафик VPN только через 3G-ключ, чтобы минимизировать стоимость пропускной способности вашего 3G-ключа.

Драйтек Triple WAN Модем / маршрутизатор

1) Не слишком сложно - запустите задачу и проверьте состояние вашего DSL - при его сбое запустите 3G-интерфейс и переключитесь на маршрут по умолчанию. Возможно, вам может понадобиться перезагрузить VPN.

2 и 3) Никогда не проверял пакет предварительной сборки, так как мой любимый брандмауэр включает эту функцию по умолчанию. Посетите сайт www.astaro.com (программное обеспечение бесплатно для домашнего использования или вы можете использовать 30-дневную пробную версию по умолчанию для тестирования)

4) Никогда не было каких-либо значительных проблем с отработками отказа в глобальной сети (кроме того, что резервная линия также не работает)

отсчет по радионавигационной системе, полученный при использовании пространственной волны от ведущей станции и поверхностной волны от ведомой станции

Вы могли бы использовать shorewall (доступен пакет ubuntu) и очень полезный скрипт с именем gwping для создания решения, которое вам понравится.

Я думаю, что вы могли бы использовать keepalived для пингования удаленного интернет-адреса (Google mayhaps) каждые.. 30 секунд с некоторым таймаутом. Если время пинга настроено, оставьте активным отключение eth0 и включите интерфейс 3G, затем перезапустите VPN.

Вы должны учитывать задержки и т. Д. При настройке keepalived, чтобы он не переключал интерфейсы, когда в этом нет необходимости. Некоторые испытания / эксперименты будут необходимы. Я не могу придумать, как вернуться к линии ADSL, когда она жива.

Если у вас есть маршрутизатор между модемом ADSL и вашим сервером, или у модема есть внешний адрес, который вы можете пропинговать, вы, вероятно, могли бы использовать его в качестве критерия для восстановления соединения.

KeepaliveD сайт

Надеюсь, что вы можете начать!

Другие вопросы по тегам