Многие хостинг-провайдеры предлагают за умеренную плату подключить дополнительные IP адреса. Такая услуга называется failover IP. Чем больше адресов, тем выше отказоустойчивость системы. В теории, если основной сервер перестанет работать или окажется под ddos-атакой, то переходим на дополнительный адрес.
На практике, резервный адрес пригодится в специфических ситуациях:
- апгрейд или смена сервера
- горячее резервирование
- запуск нескольких приложений или сервисов на одном порту
- работа с виртуализацией
Без второго сервера failover IP бесполезен. Впрочем, давайте пустим его в дело для OpenVPN сервера. На выходе получим второй IP адрес в другой стране.
Давайте приступим к делу, тут все просто.
Запустить два экземпляра OpenVPN на одной машине можно с помощью systemd или init, кому как нравится и в зависимости от дистрибутива. Чтобы конструкция заработала, выполним три обязательных условия. Первое - использовать разные порты. Второе - прописать непересекающиеся подсети. Третье - добавить новое правило переадресации в файерволе.
Начнем ковырять конфиг на сервере. Скопируем основной конфигурационный файл, придумаем новое имя и откроем для редактированя:
cd /etc/openvpn
cp server.conf NEW_NAME.conf
$EDITOR NEW_NAME.conf
Заменим номер порта на любой незанятый, пропишем новую подсеть и укажем купленный failover IP, через специальный параметр local:
local 222.222.222.222
port 10000
server 10.8.2.0 255.255.255.0
Теперь добавим правило, разрешающее переадрессацию для нового диапазона 10.8.2.0. Но для начала узнаем имя интерефейса командой ip link show - в нашем случае это ens3. Подставляем нужные значения в правило:
iptables -t nat -A POSTROUTING -s 10.8.2.0/24 -o ens3 -j SNAT --to 222.222.222.222
Если пользуемся надстройкой UFW, то добавим это же правило в файл /etc/ufw/before.rules сразу под правилом для основного конфига OpenVPN:
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
### Your main and failover OpenVPN route
-A POSTROUTING -s 10.8.1.0/24 -o ens3 -j SNAT --to 111.111.111.111
-A POSTROUTING -s 10.8.2.0/24 -o ens3 -j SNAT --to 222.222.222.222
###
COMMIT
# END OPENVPN RULES
Перед тем как закончить работу на сервере, перезапустим оба экземпляра OpenVPN и убедимся в их активности:
$ systemctl restart openvpn@server.service openvpn@NEW_NAME.service
$ systemctl status openvpn@server.service openvpn@NEW_NAME.service
● openvpn@server.service - OpenVPN connection to server
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) ...
● openvpn@NEW_NAME.service - OpenVPN connection to NEW_NAME
Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
Active: active (running) ...
Осталось ввести нужные значения на стороне клиента. Откроем конфиг в формате .conf или .ovpn, чтобы исправить только одну строчку с адресом и портом:
remote 222.222.222.222 10000
На этом закончим. Теперь второй адрес подсоединим, к примеру, для скачивания и раздачи торрентов. Взгляните внимательнее на проект docker-transmission-openvpn, там ловко реализован такой подход.
Комментарии неавторизованных пользователей перед публикацией проходят премодерацию