Переключение Ubuntu с Ethernet-на-ADSL-модема на USB 3G ключ
У меня есть подключенный к Интернету сервер Ubuntu, подключенный через Ethernet к жилой линии ADSL. В большинстве случаев этого достаточно, но я не могу полагаться на то, что ADSL-соединение будет настолько надежным, насколько мне хотелось бы. Закон Мерфи уже продиктовал, что время простоя наступает, когда это наименее удобно.
Я бы хотел использовать USB-ключ 3G с платой по мере использования для обеспечения отработки отказа. Мне не хватает информации как о типовых конфигурациях, которые работают для других людей, так и о наиболее подходящем (недорогом) оборудовании для моих целей. Цель состоит в том, что, когда моя линия ADSL отключена, сервер обнаруживает это и подключается к услуге 3G - отслеживая линию ADSL и бесперебойно переключаясь обратно, когда его соединение восстанавливается.
Основной сервис, который мне небезразличен, - это туннель OpenVPN - через UDP к удаленному серверу. Другим полезным сервисом был бы Squid - поэтому у меня все еще будет доступ к сети из моей локальной сети, когда ADSL отключен.
Вопросы:
- Насколько сложно это будет настроить?
- Буду ли я вынужден "свернуть свой собственный" - или есть пакеты / инструкции, которые я пропустил?
- Какое (недорогое) аппаратное обеспечение рекомендуется (главным образом, связано с автоматической надёжностью)?
- Любые анекдоты успеха или неудачи от других, кто уже занялся этим?
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.
ответы:
- Легко, если вы опытный администратор сервера. В противном случае, если вы готовы потратить время, чтобы узнать и понять, что вы делаете, это выполнимо для опытного пользователя.
- Я не знаю о доступных пакетах, но
изменить на 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-ключа.
1) Не слишком сложно - запустите задачу и проверьте состояние вашего DSL - при его сбое запустите 3G-интерфейс и переключитесь на маршрут по умолчанию. Возможно, вам может понадобиться перезагрузить VPN.
2 и 3) Никогда не проверял пакет предварительной сборки, так как мой любимый брандмауэр включает эту функцию по умолчанию. Посетите сайт www.astaro.com (программное обеспечение бесплатно для домашнего использования или вы можете использовать 30-дневную пробную версию по умолчанию для тестирования)
4) Никогда не было каких-либо значительных проблем с отработками отказа в глобальной сети (кроме того, что резервная линия также не работает)
отсчет по радионавигационной системе, полученный при использовании пространственной волны от ведущей станции и поверхностной волны от ведомой станции
Вы могли бы использовать shorewall (доступен пакет ubuntu) и очень полезный скрипт с именем gwping для создания решения, которое вам понравится.
Я думаю, что вы могли бы использовать keepalived для пингования удаленного интернет-адреса (Google mayhaps) каждые.. 30 секунд с некоторым таймаутом. Если время пинга настроено, оставьте активным отключение eth0 и включите интерфейс 3G, затем перезапустите VPN.
Вы должны учитывать задержки и т. Д. При настройке keepalived, чтобы он не переключал интерфейсы, когда в этом нет необходимости. Некоторые испытания / эксперименты будут необходимы. Я не могу придумать, как вернуться к линии ADSL, когда она жива.
Если у вас есть маршрутизатор между модемом ADSL и вашим сервером, или у модема есть внешний адрес, который вы можете пропинговать, вы, вероятно, могли бы использовать его в качестве критерия для восстановления соединения.
Надеюсь, что вы можете начать!