Багато хостінг-провайдерів пропонують за помірну плату приєднати додаткову 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, у якому гарно реалізований такий підхід.
Коментарі неавторизованих користувачів перед публікацією проходять премодерацію