Додаткова 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, у якому гарно реалізований такий підхід.

Коментарів:

Коментарі неавторизованих користувачів перед публікацією проходять премодерацію