Типичная задача: связать две площадки (офисы, ЦОД и филиал) через 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– пути к PKIserver 10.8.0.0 255.255.255.0– пул адресов VPNpush "route 192.168.1.0 255.255.255.0"– отдать клиенту маршрут в LAN офиса Aroute 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.