OpenVPN: безпечний зв’язок між офісами за 5 хвилин

Нещодавно довелося в авральному режимі піднімати ВПН зв’язок між двома конторами, в яких виникла чиста та світла любов між собою.

Час – то гроші! Тому до праці!

За мотивами Static Key Mini-HOWTO піднімаємо безпечний зв’язок між двома віддаленими офісами за 5 хвилин.

Преамбула. Що маємо?

Офіс фірми А з локальною мережею 192.168.15.0/24 та шлюзом 192.168.15.251 та офіс фірми Б аналогічно: 192.168.0.0/24 та шлюзом 192.168.0.200. Обидва шлюзи мають прямий доступ в Інтернет зі статичними IP-адресами та є шлюзами по замовчуванню (default gateway) для обох офісів. В якості ОСі на одному офісі — Fedora, на іншому — CentOS.

Частина 1. Встановлюємо OpenVPN:

На обох офісах:

yum install -y openvpn

Частина 2. Створюємо статичний ключ OpenVPN для тунелю:

На одній машині генеруємо статичний ключ безпеки для шифрування тунельного трафіку між офісами:

openvpn --genkey --secret /etc/openvpn/static.key

Після цього по SSH передаємо його на іншу машину.

Частина 3. Налаштування OpenVPN:

На шлюзі фірми А:

cat /etc/openvpn/tun0.сonf

#який пристрій використовуємо
dev tun200

#куда стучатися для встановлення тунелю
remote зовнішній_хостнейм_чи_IP_офісу_Б 1194 udp

#статичний ключ
secret secret.key

# налаштування IP інтерфейсу тунелю
# перший параметр -- наш IP
# другий -- IP віддаленої сторони

ifconfig 192.168.254.1 192.168.254.2

#додати до таблиць маршрут в мережу (1) з маскою (2) через шлюз (3)
route 192.168.0.0 255.255.255.0 192.168.254.2

#використовуємо стиснення трафіку
comp-lzo
#не перечитувати ключі
# при отриманні сигналу
# SIGUSR1 або ping-restart 

persist-key
# не передьоргувати TUN\TAP
# пристрій при отриманні сигналу
# SIGUSR1 або ping-restart
persist-tun

# посилати на віддалену сторону keep-alive ping пакет
# (не ICMP! ) кожних 5 секунд, а через 30 секунд
# неотримання пінг-пакетів -- розривати з'єднання
keepalive 5 30

#статус пишем сюди
status /var/log/openvpn/tun0-status.log

#лог ДОПИСУЄМО! в файл
log-append /var/log/openvpn/tun0-openvpn.log

#рівень балакучості демона
# продакт -- не більше 3-х
# запуск -- можна 6
# при проблемах -- 9
verb 6

На шлюзі фірми Б:

cat /etc/openvpn/tun0.сonf

#який пристрій використовуємо
dev tun200

#статичний ключ
secret secret.key

# налаштування IP інтерфейсу тунелю
# перший параметр -- наш IP
# другий -- IP віддаленої сторони

ifconfig 192.168.254.2 192.168.254.1

#додати до таблиць маршрут в мережу (1) з маскою (2) через шлюз (3)
route 192.168.15.0 255.255.255.0 192.168.254.1

#використовуємо стиснення трафіку
comp-lzo

#не перечитувати ключі
# при отриманні сигналу
# SIGUSR1 або ping-restart
persist-key

# не передьоргувати TUN\TAP
# пристрій при отриманні сигналу
# SIGUSR1 або ping-restart
persist-tun

# посилати на віддалену сторону keep-alive ping пакет
# (не ICMP! ) кожних 5 секунд, а через 30 секунд
# неотримання пінг-пакетів -- розривати з'єднання
keepalive 5 30

#статус пишем сюди
status /var/log/openvpn/tun0-status.log

#лог ДОПИСУЄМО! в файл
log-append /var/log/openvpn/tun0-openvpn.log

#рівень балакучості демона
# продакт -- не більше 3-х
# запуск -- можна 6
# при проблемах -- 9
verb 6

Частина 4. Налаштування firewall iptables:

Додаємо до таблиць дозвіл на обмін UDP трафіком на порту 1194 (у нас і вихідний і цільовий), який використовує OpenVPN в нашій конфігурації, на зразок:

vi /etc/sysconfig/iptables

-A INPUT -s зовнішній_IP_іншої_сторони -p udp -m udp --dport 1194 --sport 1194 -j ACCEPT

Перезапускаємо фаєрвол:

service iptables restart

Частина 5. Вуа-ля:

Запускаємо ВНП сервер:

service openvpn start

Дивимося, чи з’явився вказаний TUN інтерфейс (tun200):

ifconfig

Дивимося, чи з’явилися маршрути на мережі віддаленого офісу:

  • на офісі А

ip route show | fgrep 192.168.0.0

192.168.0.0/24 via 192.168.254.2 dev tun200
  • на офісі Б

ip route show | fgrep 192.168.15.0

192.168.15.0/24 via 192.168.254.1 dev tun200

Якщо все добре (і в фаєрволі нема заборони на протокол ICMP) — пробуємо пропінгувати тунельний IP іншого офісу:

ping 192.168.254.1

Якщо все пройшло успішно, можна зайнятися доданням дозволяючих правил в налаштування фаєрволу. В найпростішому випадку, просто дозволяємо обмін будь-яким трафіком між віддаленими мережами (не використовуйте в реальному житті, приведено тільки для тесту):

vi /etc/sysconfig/iptables

-A FORWARD -i tun200 -j ACCEPT
-A FORWARD -o tun200 -j ACCEPT

Перезапускаємо фаєрвол:
service iptables restart

Перевіряємо, чи ходять пакети між віддаленими мережами:

З машини в одному офісі, наприклад 192.168.15.1, перевіримо доступність машини 192.168.0.1 в іншому офісі:

ping 192.168.0.1

Happy end!

Опубліковано у Fedora, Firewall, Linux, OpenVPN, SOHO, VPN, Безпека, Віддалена робота, Для малого офісу, Мережі | Теґи: , , , , , , , , . | Додати в закладки: постійне посилання на публікацію.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *