OpenVPN между двумя офисами: site-to-site на практике

iphone, mac, ios-4699057.jpg

Типичная задача: связать две площадки (офисы, ЦОД и филиал) через VPN, чтобы сети видели друг друга без «белого» доступа ко всему интернету. Ниже – схема site-to-site на OpenVPN: сертификаты Easy-RSA, server/client.conf, маршруты между подсетями.

Подготовка

Нужны две машины (или роутеры/ВМ), на одной – OpenVPN server, на другой – client. Внутренние сети офисов не должны пересекаться, например:

  • Офис A (server): 192.168.1.0/24
  • Офис B (client): 192.168.2.0/24
  • Туннель: 10.8.0.0/24

На сервере снаружи должен быть доступен UDP/TCP порт OpenVPN (часто 1194/udp). На обеих сторонах – IP forwarding, если трафик ходит не только в сам host VPN, а в LAN.

Сервер: установка и PKI

sudo apt update && sudo apt install openvpn easy-rsa

Инициализация CA и ключей (классический workflow Easy-RSA 2.x; на новых дистрибутивах команды easyrsa 3.x чуть другие, смысл тот же):

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
source vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret keys/ta.key

build-ca – корневой CA, build-key-server – сертификат сервера, build-dh – параметры Diffie-Hellman, ta.key – TLS-auth (доп. защита от сканирования/флуда).

Конфиг сервера

sudo gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz \
  > /etc/openvpn/server.conf

Ключевые директивы в server.conf:

  • ca ca.crt, cert server.crt, key server.key, dh dh.pem – пути к PKI
  • server 10.8.0.0 255.255.255.0 – пул адресов VPN
  • push "route 192.168.1.0 255.255.255.0" – отдать клиенту маршрут в LAN офиса A
  • route 192.168.2.0 255.255.255.0 – знать LAN офиса B (со стороны client)
  • при необходимости: client-config-dir + iroute для точной маршрутизации site-to-site

Скопируйте сертификаты/ключи в каталог, на который ссылается конфиг (часто /etc/openvpn), и запустите службу:

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server
sudo systemctl status openvpn@server

Клиент (второй офис)

На CA (обычно на сервере) выпускаете клиентский сертификат:

./build-key client1

На машину офиса B переносите: ca.crt, client1.crt, client1.key, ta.key (если TLS-auth включён). Пример client.conf:

client
dev tun
proto udp
remote SERVER_PUBLIC_IP 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
cipher AES-256-CBC
verb 3

Подставьте реальный адрес/DNS сервера. Запуск:

sudo systemctl start openvpn@client
sudo systemctl enable openvpn@client

Маршруты и проверка

  • На обеих сторонах: ip a (интерфейс tun0), ip r (маршруты в чужую LAN через туннель).
  • Пинг с хоста в LAN A на хост в LAN B (и обратно) – не только ping между самими VPN-нодами.
  • IP forwarding: net.ipv4.ip_forward=1 (sysctl), плюс firewall (ufw/nftables/iptables): разрешить forward между tun и LAN, при необходимости MASQUERADE/SNAT.
  • Для «чистого» site-to-site часто нужен CCD: на server iroute 192.168.2.0 255.255.255.0 для client1, чтобы другие клиенты/сервер знали, куда слать пакеты в сеть B.

Практика без боли

  • Не пересекайте RFC1918-подсети офисов – иначе маршруты станут лотереей.
  • Храните CA офлайн или отдельно; private key CA – не на «боевом» edge без нужды.
  • Ограничьте firewall: только нужный порт OpenVPN снаружи, внутри – только нужные сети/порты.
  • Логи: journalctl -u openvpn@server -f при первом подключении.

Краткий вывод

Site-to-site на OpenVPN – это PKI + согласованные маршруты + forwarding/firewall. Сертификаты и ta.key закрывают доступ, push route/iroute и sysctl – чтобы LAN ходили друг к другу, а не только VPN-интерфейсы. После поднятия tun обязательно проверяйте связность end-to-end между рабочими станциями, не ограничиваясь ping 10.8.0.x.

Источники и ссылки


Комментарии загружаются…