OpenVPN server. Пример настройки.



  • Настройка OpenVPN server.


    1 Первым делом создаем корневой СА сертификат.

    System-> Cert Manager

    1.1 Добавляем корневой сертификат.

    http://192.168.1.1/system_camanager.php

    Нажимаем "Плюс", [[i]add ot import ca]


    Descriptive Name: my.root.ca
    Для дальнейшего удобства, лучше дать простое и понятное имя сертификата, отражающее его назначение.

    Method: Create an internal Certificate Authority

    Key Length: 2048 bits

    lifetime: 3650 days

    Distinguished Name
    Country Code: RU
    State or province: Russia
    City: Saint-Petersburg
    Organisation: Stanislaw Home VPN
    email Address: stanislaw@fake-mail-not-real.com
    common name: my.root.ca
    Для дальнейшего удобства, лучше дать простое и понятное имя сертификата, отражающее его назначение.


    Нажимаем на "Save".

    Примечание. Во избежании глупых ошибок и траты многих часов на их поиски, я предпочитаю использовать одинаковые Descriptive Name и common name.

    Таким образом мы получили Certificate Authority, корневой сертификат под которым можем выпустить доверенные сертификаты для OpenVPN соединений.

    Открываем вкладку "Certificates".

    1.2 Добавляем сертификат для VPN сервера.

    http://192.168.1.1/system_certmanager.php

    Нажимаем "Плюс", [[i]add ot import ca]


    Descriptive Name: my.vpn.server
    Для дальнейшего удобства, лучше дать простое и понятное имя сертификата, отражающее его назначение.

    Method: Create an internal Certificate Authority

    Certificate authority: my.root.ca  [Тот CA сертификат, что был создан на первом шаге.]

    Digest Algorithm: SHA256

    Certificate Type: Server Certificate

    Key Length: 2048 bits

    lifetime: 3650 days

    Distinguished Name
    Country Code: RU
    State or province: Russia
    City: Saint-Petersburg
    Organisation: Stanislaw Home VPN
    email Address: stanislaw@fake-mail-not-real.com
    common name: my.vpn.server
    Для дальнейшего удобства, лучше дать простое и понятное имя сертификата, отражающее его назначение.


    Нажимаем на "Save".

    Картинка три

    1.3 Добавляем сертификат для VPN клиента.

    http://192.168.1.1/system_certmanager.php

    Нажимаем "Плюс", [[i]add ot import ca]


    Descriptive Name: my.vpn.remote.client
    Для дальнейшего удобства, лучше дать простое и понятное имя сертификата, отражающее его назначение.

    Method: Create an internal Certificate Authority

    Certificate authority: my.root.ca  [Тот CA сертификат, что был создан на первом шаге.]

    Digest Algorithm: SHA256

    Certificate Type: User Certificate

    Key Length: 2048 bits

    lifetime: 3650 days

    Distinguished Name
    Country Code: RU
    State or province: Russia
    City: Saint-Petersburg
    Organisation: Stanislaw Home VPN
    email Address: stanislaw@fake-mail-not-real.com
    common name: my.vpn.remote.client
    Для дальнейшего удобства, лучше дать простое и понятное имя сертификата, отражающее его назначение.


    Нажимаем на "Save".

    Обратите внимание!

    Мы получили два сертификата. один для VPN сервера и один для VPN клиента.


    2 Создаем VPN сервер.

    VPN -> OpenVPN  вкладка  Server

    http://192.168.1.1/vpn_openvpn_server.php

    Нажимаем "Плюс", [[i]add server]


    Server Mode: Remote Acces (SSL/TLS)
    Protocol: UDP
    Device mode: tun
    Interface: WAN
    Local port: 1194
    Description: My VPN
    Для красоты желательно дать простое и понятное имя службы сервера, отражающее его назначение.


    Peer Certificate Authoritymy.root.ca  [[i]тот самый первый созданный СА]
    Server Certificate: my.vpn.server [[i]тот самый сертификат, который мы создали вторым, для сервера]
    DH Parameters Length: 2048
    Encryption algorithm: BF-CBC
    Auth Digest Algorithm: SHA256


    IPv4 Tunnel Network: 192.168.2.0/24
    [[i]диапазон IP адресов. которые будут выдаваться клиентам и использоваться сервером VPN. Должен отличатся от используемых в локальной сети.]

    Compression: Enabled with Adaptive compression


    Dynamic IP: +  [ставим галочку]
    Address Pool: - [убираем галочку]

    Advanced:
    route 192.168.1.0 255.255.255.0;


    Нажимаем на "Save".

    Сервер создан.


    3 Создаем клиентское подключение.

    VPN -> OpenVPN  вкладка  Client Specific Override

    http://192.168.1.1/vpn_openvpn_csc.php

    Нажимаем "Плюс", [[i]add csc]


    Common name: my.vpn.remote.client    [[i]внимательно и аккуратно копипастим из нашего третьего сертификата, поле common name.  без пробелов. без лишних знаков.]

    Description: My laptop mobile client [[i]Для удобства заполняем описание, чтоб оптом через год вспомнить к кому это относится]


    Tunnel Network: 192.168.2.4/30  [закрепляем за этим клиентом IP адрес, для удобства]


    Нажимаем на "Save".

    Клиент создан.

    Теперь, удаленный клиент при соединении с нашим сервером, предъявив сертификат "my.vpn.remote.client" всегда будет получать адрес 192.168.2.6 
    что нам удобно для пинга и прочей диагностики.


    Если еще нету, устанавливаем пакет "OpenVPN Client Export Utility"  http://192.168.1.1/pkg_mgr.php


    4 Экспортируем настройки

    VPN -> OpenVPN  вкладка  Client Export.

    http://192.168.1.1/vpn_openvpn_export.php

    Выбираем наш VPN сервер (если их несколько)

    Remote Access Server: My VPN UDP:1194

    Host Name Resolution: Interface IP Address


    Client Install Packages:

    Скачиваем сконфигурированный установщик VPN клиента.

    Если у клиента уже установлен OpenVPN, можно скачать только конфиг.

    Я предпочитаю  Inline Configurations:  Others

    Вся конфигурация VPN клиента и необходимые сертификаты в одном файле.
    Для использования этой конфигурации с windows openvpn клиентом его достаточно перенести в папку "C:\Program Files\OpenVPN\config"


    5. Готово.

    Внезапно выясняем что "ничего не работает!"

    6. Firewall

    http://192.168.1.1/firewall_rules.php?if=openvpn

    По желанию создаем разрешающее правило "можно всем всё".

    Либо вручную разрешаем только трафик из сети VPN
    allow all  source 192.168.2.0/24 destination 192.168.1.0/24
    и обратно.
    allow all source 192.168.1.0/24 destination 192.168.2.0/24


    Если нам нужно подключить к нашей сети еще одного VPN клиента, для этого достаточно повторить шаги относящиеся к клиенту.

    1.3 Добавляем сертификат для VPN клиента.

    Новому клиенту соответственно задаем новые уникальные "Descriptive Name" и "common name", для его идентификации.

    3 Создаем клиентское подключение.

    задаем соответствующую следующую свободную подсеть:
    192.168.2.8/30  (клиент получит адрес .10)
    192.168.2.12/30 (клиент получит адрес .14)
    192.168.2.16/30 (клиент получит адрес .18)
    192.168.2.20/30 (клиент получит адрес .22)
    192.168.2.24/30 (клиент получит адрес .26)
    192.168.2.28/30 (клиент получит адрес .30)
    192.168.2.32/30 (клиент получит адрес .34)
    192.168.2.36/30 (клиент получит адрес .38)
    192.168.2.40/30 (клиент получит адрес .42)
    192.168.2.44/30 (клиент получит адрес .46)
    192.168.2.48/30 (клиент получит адрес .50)
    и так далее..

    4 Экспортируем настройки


    Это черновик руководства. Исправления и уточнения будут приняты с благодарностью.

    Это базовая конфигурация. по памяти.

    В два клика можно разрешить обмен трафиком между клиентами.

    В два клика можно "завернуть" весь трафик клиента через VPN сервер. Так что и в интернет он будет идти не через имеющееся у него соединение, а через наш pfSense, с ip адреса pfSense. через squid.

    В два клика можно, на время соединения с vpn, запретить клиенту интернет, и оставить только соединение с офисом.



  • Я так понимаю, возражений нет?

    Нужно ли добавить картинок?

    Сегодня или завтра разверну в лаборатории тестовую инсталяцию. Будут добавлены скрины. Скорректированы недочеты.



  • Спасибо за инс-цию.

    Замечания :

    1. Нет маршрута в сеть за сервером для клиентов - push "route …" в Advanced configuration сервера или в настройках сервера - IPv4 Local Network/s . Ваша директива route … рисует роут для сервера в сеть клиента. Для того , чтобы машины за сервером попадали в сеть за клиентом исп-ся директива iroute <сеть за клиентом> в Client Specific Overrides

    2. В версии 2.2.х (или даже 2.1.х) необходимо явно нарисовать разрешающее правило в fw на LAN для того, чтобы машины за сервером попадали в сеть за клиентом. И поставить его повыше (или самым первым вообще). Уже многие здесь с этим столкнулись.

    3. Клиента для Win устанавливать от имени Админа, т.е. прав.кн.мыши "Запустить от имени Администратора". Иначе могут роуты не добавляться при поднятии туннеля. Рекомендуется и запускать от имени Админа (проверить этот момент)

    4. В конф. файле Win-клиента в самый верх после dev tun я добавляю :

    keepalive 5 10 # можно и увеличить время по желанию
    ping-timer-rem
    

    Иногда маршруты не добавляются. Помогает добавление директив в конец (под разные вер. Win пробовать одну из них) :

    route-delay 5 # задержка при добавлении роута в сек
    route-method exe  
    ip-win32 netsh
    

    И в самом конце :

    pull # не обязательно
    verb 3
    

    5.

    Server Mode: Remote Acces (SSL/TLS)
    Protocol: UDP
    Device mode: tun
    Interface: WAN
    Local port: 1194

    Я бы не исп. стандартный порт. Нет, конечно врядли кто-то сумеет подключиться без логин-пасс\сертификаты, но все же.
    Или исп. порт выше 10 000 или , если будете подключаться из корп. сети со злыми админами, то исп. порты 80\TCP,
    443\TCP, 53\TCP_UDP , порты почтовых служб - SMPTS, POP3S, IMAPS. Чаще всего описанные стандартные порты открыты во вне даже в сетях со строгими правилами.

    6.

    Создаем клиентское подключение.

    VPN -> OpenVPN  вкладка  Client Specific Override

    http://192.168.1.1/vpn_openvpn_csc.php

    Нажимаем "Плюс", [add csc]

    Common name: my.vpn.remote.client    [внимательно и аккуратно копипастим из нашего третьего сертификата, поле common name.  без пробелов. без лишних знаков.]

    Description: My laptop mobile client [Для удобства заполняем описание, чтоб оптом через год вспомнить к кому это относится]
    Tunnel Network: 192.168.2.4/30  [закрепляем за этим клиентом IP адрес, для удобства]

    Вами описан случай, когда один клиент - один сервер. Если же это подключение исп-ся десятками клиентов, к-ые исп. один и тот же конфиг, то делать так не стОит.