Дополнительный IP адрес для OpenVPN

Многие хостинг-провайдеры предлагают за умеренную плату подключить дополнительные 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, там ловко реализован такой подход.

Комментариев:

Комментарии неавторизованных пользователей перед публикацией проходят премодерацию