Нужно соединить две локальные сети на L3 уровне модели OSI, при условии, что эти сети находятся за разными маршрутизаторами, а трафик между маршрутизаторами должен быть зашифрован. Другими словами: чтобы локальная сеть в одном городе видела локальную сеть другом городе, но никто больше не видел о чем они там между собой шепчутся. Так называемый Site-to-Site VPN
Один из вариантов реализации задачи: использовать open source продукт OpenVPN .
Пример настройки на основе двух маршрутизаторов под CentOS 6.x:
Office 1
- LAN: 192.168.0.0/24
- WAN IP: 10.0.0.1
Office 2
- LAN: 172.16.0.0/24
- WAN IP: 10.255.255.1
Настройки на маршрутизаторе Office 1 (роль — сервер):
# yum -y install openvpn # chkconfig openvpn on
- Сгенерируем сертификаты и ключи по инструкции: генерация сертификатов для OpenVPN и разместим ключи в /etc/openvpn/keys/.
- создаем файл /etc/openvpn/vpn.conf следующего содержания:
dev tun remote 10.255.255.1 ifconfig 10.10.10.1 10.10.10.2 up /etc/openvpn/scripts/routes.up.sh tls-server daemon # Diffie-Hellman Parameters (tls-server only) dh /etc/openvpn/keys/dh2048.pem # Certificate Authority file ca /etc/openvpn/keys/ca.crt # Our certificate/public key cert /etc/openvpn/keys/office1.crt # Our private key key /etc/openvpn/keys/office1.key reneg-sec 300 port 1194 # Verbosity level. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting verb 3
- Содержание файла /etc/openvpn/scripts/routes.up.sh:
#!/bin/sh /sbin/route add -net 172.16.0.0 netmask 255.255.255.0 gw 10.10.10.2
Файл должен быть с правами на исполнение:
# chmod 700 /etc/openvpn/scripts/routes.up.sh
- Для iptables добавляем в chain filter:
-A INPUT -i eth0 -m udp -p udp -s 10.255.255.1 --dport 1194 -j ACCEPT -A FORWARD -i eth1 -o tun0 -j ACCEPT -A FORWARD -i tun0 -o eth1 -j ACCEPT
где eth1 — LAN интерфейс
- Запускаем сервис:
# service openvpn start
Если используется OpenVZ контейнер, нужно дать разрешение на операции с tun:
vzctl set [CTID] --devnodes net/tun:rw --capability net_admin:on --saveCTID — ID контейнера
Настройки на маршрутизаторе Office 2 (роль — клиент):
# yum -y install openvpn # chkconfig openvpn on
- Клиентский сертификат, ключ и CA сертификат разместить в /etc/openvpn/keys/
- создаем файл /etc/openvpn/vpn.conf следующего содержания:
dev tun remote 10.0.0.1 ifconfig 10.10.10.2 10.10.10.1 up /etc/openvpn/scripts/routes.up.sh tls-client remote-cert-tls server daemon # Certificate Authority file ca /etc/openvpn/keys/ca.crt # Our certificate/public key cert /etc/openvpn/keys/office2.crt # Our private key key /etc/openvpn/keys/office2.key reneg-sec 300 port 1194 # Verbosity level. # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting verb 3
- Содержание файла /etc/openvpn/scripts/routes.up.sh:
#!/bin/sh /sbin/route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.10.10.1
Файл должен быть с правами на исполнение:
# chmod 700 /etc/openvpn/scripts/routes.up.sh
- Для iptables добавляем в chain filter:
-A INPUT -i eth0 -m udp -p udp -s 10.0.0.1 --dport 1194 -j ACCEPT -A FORWARD -i eth1 -o tun0 -j ACCEPT -A FORWARD -i tun0 -o eth1 -j ACCEPT
где eth1 — LAN интерфейс
- Запускаем сервис:
# service openvpn start
В итоге получаем шифрованный канал со стойким алгоритмом шифрования и перезапуском крипто-сессии каждые 5 минут ( reneg-sec 300 ) для наибольшей защиты от взлома.
А зачем файл /etc/openvpn/scripts/routes.up.sh? Ведь маршруты можно в конфиге сервера писать и сcd