Нещодавно довелося в авральному режимі піднімати ВПН зв’язок між двома конторами, в яких виникла чиста та світла любов між собою.
Час – то гроші! Тому до праці!
За мотивами 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!