Добрый день товарищи!

Спешу поделится реализацией отказоустойчивой VPN сети для малых, не больших, и в какой-то мере средних компаний, у которых есть некоторое количество объектов (субъективно, это можно использовать при 10 и более точках).

Ну почему 10 и более — наверное до этой магической цифры все поддерживать, звонить провайдерам при обрывах связи, общаться с пользователями с той стороны, мониторить и поднимать не составляет особого труда.


Однако, при большем количестве объектов, тенденции обрыва связи на конечных объектах приводят к потерям рабочего времени как стороной удаленного офиса, так и потерям админского времени, а так же к бизнес издержкам.

Да и вообще знать, что VPN сеть ляжет только в случае войны глобального характера как минимум приятно, а как максимум спится спокойнее.

Опять же для малого и среднего бизнеса (смотря в каком разрезе представлять малый и средний бизнес) издержки и потери от обрывов связи могут быть разными — тут все зависит от тех сервисов которые необходимо предоставлять этому самому бизнесу в рамках данных VPN каналов связи.

Рассмотрим вариант при котором продажи (ну или что-либо еще) организованы по средством терминального доступа на сервер в пределах офиса через VPN канал. Ну так же к этому подойдут все возможные реализации предоставлению бизнесу каналов связи, отказоустойчивых, и что самое не мало важное — за разумные деньги.

Под отказоустойчивым VPN мы будем понимать:

1) Офис — 2 провайдера с 2 внешними ip.
2) Клиент — с основным провайдером и 3g (один из вариантов) резервным.
3) Автоматическое переключение VPN на резервный канал (подключение к доступному серверу) (поднятие 3G), отправку письма предупреждения о падении основного канала связи, постоянный дальнейший мониторинг основного канала, переключение VPN обратно на него при появлении сервиса от ISP (отключение 3G), и отправку письма счастья — «я переключился отбратно».

В мире есть большое количество подобных реализаций, но произведя анализ рынка становится ясным — для развивающихся компаний покупка устройств 10+ рублей — это несколько дороговато. Да и вообще это дороговато!

Я вот работаю в средней компании с количеством объектов порядка 100. Мы планируем развиваться, и открыть еще 100 магазинов. Если продолжать покупать Cisco как это делали раньше — траты будут по 1000 долларов за один девайс, плюсом для него сейчас докупается 3g девайсина, и роутер Keenetic от Zyxel для предоставления клиентам отдельной Wifi точки доступа. Получается средняя цена для организации такой схемы вырастает еще на долларов 150.

Если считать дальше получается на один магазин — 1150 $ — а сто — 115000 $.
Если я предположу, что можно тратить всего по — 150$ — для ста — 15000 $?

Я думаю многим будет интересна такая арифметика. Товарищи с которыми я долго обсуждаю эту готовую реализацию, аргументируют и стараются парировать мои доводы, своими — далее я обо всем подробно расскажу.

Доводы товарищей:

1) Если не Cisco — то не надежно.
2) Лучше потратить один раз — чем 2.
3) Срок жизни Cisco 5-6 лет.

Мои доводы:

1) Цена.
2) По функционалу — тоже самое.
3) Легкость нахождения замены.
4) Полный Fail-over.

Вот допустим мы используем Cisco за 1000 и она живет 5 лет. Или мы используем «другое» оборудование со сроком жизни 2-3 года. Конечная цена самого девайса — 40 долларов. Даже если мое, «другое», оборудование за это время один раз выйдет из строя — будет не так страшно — оно стоит не дорого, можно найти в любом магазине в радиусе километра. Если не дай бог из строя выйдет Cisco — быстро ее поменять не получится, никак. Она и стоить будет не 40 долларов и пока ее купишь, отправишь в этот город, пройдет столько времени, что порушится весь месячный план этого подразделения.

Каждый может отвечать и парировать как хочет — это поможет делу!

И все таки — я лично уже с этой реализацией год работаю — и все на столько красиво — что прочтя — грех просто не попробовать.

Будучи фактически единственным *nix админом в своей компании, честно могу сказать, что убедить (на данный момент) товарищей и коллег на работе в правильности данного пути так и не удалось.

Однако доводы такие как:

1) Легкость поддержки.
2) Наглядность.
3) Простота развертывания.
4) Цена.
5) Отказоустойчивость.

Могут повлиять на ситуацию.

Сразу расскажу, что во время разработки находясь еще на прошлом месте работы сложно было объяснить, что оно того стоит. Хотя явно это понимало руководство. И видит бог — руководство не ошиблось. Люди как сказать — переживали, что данная идея потерпит крах.

Однако непосредственно — Profit:

1) Сервер OpenVPN (это уж на ваш выбор в принципе) — 2 внешних ip адреса.
2) Роутер TP-LINK MR-3420
3) Модем 3G из линейки Huawei к примеру E1550, E172 и еще с пяток моделей (нужно чтоб в девайсе был слот под MicroSD)
4) MicroSD (объем на ваше усмотрение, я беру на 2 Гб)

В самом простом виде действия по настройке заключаются в следующем — далее по пунктам.

1) Установка любимого дистрибутива Linux.
2) Настройка сети.
3) Настройка openvpn сервера.
4) Генерация сертификатов.
5) Настройка клиентов.

Конфиг VPN сервера:

port 1194 # or any other port you want to use
dev tap
float
tls-server
proto udp
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh1024.pem
mode server
ifconfig 10.10.10.1 255.255.255.0 # openvpn gateway
ifconfig-pool 10.10.10.2 10.10.10.11 255.255.255.0 # ip range for openvpn client
ifconfig-pool-persist /etc/openvpn/ipp.txt
client-to-client
push «dhcp-option DNS 192.168.0.200» # push DNS entries to openvpn client
push «dhcp-option DNS 192.168.0.201»
push «route-gateway 10.10.10.1» # push default gateway
tun-mtu 1500
tun-mtu-extra 32
mssfix
ping 10
ping-restart 120
push «ping 10»
push «ping-restart 60»
push «route 192.168.0.0 255.255.255.0 10.10.10.1» # add route to to protected network
comp-lzo
status /var/log/openvpn-status.log
verb 4


Теперь — основное — настройка клиентов.

Настройка состоит из трех этапов.

При повторной настройке весь процесс занимает не более 15-20 минут, что в принципе сродни настройке среднего девайса.

Значит как сделал я — 1) Пошел на openwrt.org и скачал ветку под этот девайс из раздела download целиком (snapshots/trunk) и положил на свой любимый свеже установленный сервер.
2) Залил прошивку на девайс.
3) Зашел на девайс telnet'ом и сделал passwd root, после чего зашел по ssh.
4) Создаем 2 файлика, одну символическую ссылку и ставим несколько пакетов.
5) Распаковываем бекап (уже подготовленный) на отформатированную в Ext4 MicroSD
6) Меняем режим работы модема через HyperTerminal (или под Linux) убирая из него функционал CD-ROM (в него developers любят всякую софтинку класть)
7) Вставляем MicroSD в 3G модем, все это в TP-link и включаем.

Далее только настройка непосредственно нового клиента:
1) Выбор подсети для него;
2) Выбор адреса внутри VPN сети;
2) Перенастройка одного файлика и заброс сертификатов для подключения.

Тюнится далее все просто, и не сложно. Набитая рука позволяет выполнять этот процесс очень быстро — реально быстрее 10 минут.

Непосредственно после включения девайса у него присутствует весьма приятный веб интерфейс. (при желании все перенастраивается)

Теперь разберем пункты — 1,2,3 — весьма понятны и так, и продолжим мы с пункта 4:

Так как у нас на своем (VPN сервере или другой машине, где есть веб сервер) сервере лежит наш только скаченный репозитарий) чистый девайс настраиваем на использование нашего rep'а.

Делается это в файлике /etc/opkg.conf — меняется только одно — адрес сервера. (ну или варианты если они есть, зависят от ваших предпочтений по размещению данных скачанных с openwrt.org на своем веб-сервере)

После чего —
1) opkg update
2) opkg install kmod-usb-core kmod-usb-uhci kmod-usb-storage kmod-usb2 kmod-fs-ext4 e2fsprogs fdisk kmod-dm block-mount nano
3) insmod ext2
4) insmod jbd
5) insmod ext3
6) insmod ext4
7) nano /etc/init.d/pivotroot

#!/bin/sh
# change this to your boot device
/sbin/fdisk -l /dev/sda
boot_dev="/dev/sda1"
/sbin/hotplug2 --override --persistent --max-children 1 --no-coldplug &
for module in usbcore uhci scsi_mod sd_mod usb-storage jbd ext2 ext3; do {
insmod $module
}; done

# this may need to be higher if your disk is slow to initialize
sleep 30s
# mount the usb stick
mount "$boot_dev" /mnt
# if everything looks ok, do the pivot root
killall hotplug2
[ -x /mnt/sbin/init ] && {
mount -o move /proc /mnt/proc && \
pivot_root /mnt /mnt/mnt && {
mount -o move /mnt/dev /dev
mount -o move /mnt/tmp /tmp
mount -o move /mnt/jffs2 /jffs2 2>&-
mount -o move /mnt/sys /sys 2>&-
}
}


8) chmod a+x /etc/init.d/pivotroot
9) ln -s /etc/init.d/pivotroot /etc/rc.d/S10pivotroot
10) nano /etc/init.d/rcS — добавить после #!/bin/bash

/sbin/fdisk -l /dev/sda
if test $2 == «boot»; then
/etc/init.d/pivotroot
fi
{
for i in /etc/rc.d/$1*; do
$i $2 2>&1
done
} | logger -s -p 6 -t '' &


На этом этап настройки самой железки закончен — она готова после перезагрузки запустить систему с MicroSD карты внутри 3G модема.

Так как MicroSD и 3G модем уже подготовленны и настроены — остается только все вставить и включить.

После ребута получаем девайс который умеет все вышеперечисленное.

Сам скрипт (аля-демон) лежит /wrk/vpn_keepalive крутится по крону раз в 2 минуты, не сбоит, пишет письма, написан грамотно, создает pid ну в общем — сделано добротно.

Для товарищей которые захотят это все попробовать — в личку — будет больше информации, а так же непосредственно tar архива для MicroSD.

Переключение модема в режим работы без CD-ROM:
Передать через HyperTerminal — AT^U2DIAG=256