На данный момент мы имеем частную VPN-сеть маршрутизаторов, развернутую поверх каналов провайдера. Осталось настроить маршрутизацию на роутерах, чтобы связать воедино локальные сети филиалов.
Головной филиал (сервер OpenVPN)
В конфигурационном файле сервера OpenVPN (/etc/openvpn/server.conf) добавляем маршруты на сети, находящиеся за роутерами филиалов (это можно сделать в том блоке, где был определён ccd-каталог). Убираем закомментированную строку и прописываем свои значения:
.... # EXAMPLE: Suppose the client # having the certificate common name "Thelonious" # also has a small subnet behind his connecting # machine, such as 192.168.40.128/255.255.255.248. # First, uncomment out these lines: client-config-dir ccd route 192.168.1.0 255.255.255.0 route 192.168.2.0 255.255.255.0 route 192.168.3.0 255.255.255.0 # Then create a file ccd/Thelonious with this line: # iroute 192.168.40.128 255.255.255.248 # This will allow Thelonious' private subnet to # access the VPN. This example will only work # if you are routing, not bridging, i.e. you are # using "dev tun" and "server" directives. ....
Этими директивами мы сообщаем OpenVPN-серверу, что указанные маршруты должны добавляться в системную таблицу маршрутизации при запуске службы и удаляться при остановке.
Включаем внутренний роутинг OpenVPN на сети филиалов. Переходим в каталог /etc/openvpn/ccd и редактируем файлы клиентских настроек, прописывая в каждый из них параметры сети, находящейся за ним.
На примере файла /etc/openvpn/ccd/filial2, должна получится такая картина:
ifconfig-push 10.10.0.5 10.10.0.6
iroute 192.168.1.0 255.255.255.0
Остальные файлы клиентских настроек в этом каталоге (filial3, filial4 и т.п.) – отредактируйте сами по аналогии.
Разрешаем форвардинг пакетов между интерфейсами в iptables (добавляем записи в файл /etc/sysconfig/iptables):
-A FORWARD -i eth1 -o tun0 -j ACCEPT -A FORWARD -i tun0 -o eth1 -j ACCEPT
Здесь 'eth1' – интерфейс, которым маршрутизатор подключен в локальную сеть.
После внесения указанных изменений необходимо перезапустить openvpn и iptables:
[root@gateway1 ~]# /etc/init.d/openvpn restart [root@gateway1 ~]# /etc/init.d/iptables restart
На основном маршрутизаторе сети головного филиала необходимо прописать маршруты на сети прочих филиалов, указав шлюзом наш маршрутизатор VPN-сети; либо для всех компьютеров сети назначить наш маршрутизатор шлюзом по умолчанию.
Дочерний филиал (клиент OpenVPN)
На VPN-маршрутизаторе филиала разрешаем форвардинг пакетов между интерфейсами в iptables (добавляем записи в файл /etc/sysconfig/iptables):
-A FORWARD -i eth1 -o tun0 -j ACCEPT -A FORWARD -i tun0 -o eth1 -j ACCEPT
Здесь 'eth1' – интерфейс, которым маршрутизатор подключен в локальную сеть филиала.
Перезапускаем iptables:
[root@gateway2 ~]# /etc/init.d/iptables restart
Перезапускаем службу openvpn для форсированного переподключения к VPN-серверу:
[root@gateway2 ~]# /etc/init.d/openvpn restart
В локальной сети дочернего филиала на основном маршрутизаторе сети необходимо прописать маршруты на сети прочих филиалов, указав шлюзом наш VPN-маршрутизатор филиала; как вариант, назначить наш маршрутизатор шлюзом по умолчанию для всех машин в сети.
В результате вышеописанных действий, компьютеры сети основного филиала смогут обращаться к компьютерам дочерних филиалов, и наоборот – из дочернего филиала можно подключаться к компьютерам основного.
По умолчанию, каждая клиентская сеть может видеть только сеть основного филиала (а основной филиал «видит» всех клиентов), в большинстве случаев это необходимое условие по соображениям безопасности. Если всё же нужно, чтобы клиентские подсети могли обращаться друг к другу, на стороне OpenVPN-сервера нужно сделать некоторые дополнительные настройки:
-A FORWARD -i tun0 -o tun0 -j ACCEPT
После внесения изменений не забудьте перезапустить iptables и openvpn:
[root@gateway1 ~]# /etc/init.d/iptables restart [root@gateway1 ~]# /etc/init.d/openvpn restart
На этом настройка нашей VPN-сети завершена. Проверьте, что компьютеры филиалов могут обращаться по друг к другу по IP-адресу (или по доменному имени, если настроена служба DNS).
В следующей, заключительной части, будут рассмотрены некоторые моменты в настройке, расширяющие функционал и показывающие детали, которые могли остаться «за кадром».
Обсуждение