bsd$ whereis -s openvpn
openvpn: /usr/ports/security/openvpn
bsd$ sudo make -C /usr/ports/security/openvpn config
Если в конфигурации отмечены пункты EASYRSA и OPENSSL, то ничего менять не нужно и можно поставить пакет. Это все же гораздо быстрее
bsd$ sudo pkg install -y openvpn
bsd$ rehash
Сертификаты можно сделать вручную (см. Создание сертификатов для OpenVPN), но быстрее будет воспользоваться набором скриптов в /usr/local/share/easy-rsa
bsd$ cd /usr/local/share/easy-rsa/
bsd$ sudo mkdir ./keys
bsd$ sudo openssl dhparam -out ./keys/dh2048.pem 2048
Чтобы не печатать одно и тоже, в файле /usr/local/share/easy-rsa/vars нужно изменить переменные
bsd$ vi ./vars
export KEY_COUNTRY="country"
export KEY_PROVINCE="province"
export KEY_CITY="city"
export KEY_ORG="org"
export KEY_EMAIL="root@nowhere.com"
export KEY_OU="ou"
Как обычно, здесь произошла заминка с использованием команды eval в интерпретаторе csh (инициализация переменных командой source ./vars не работает)
bsd$ su
# sh
# . ./vars
# ./clean-all
# ./build-dh
# ./build-ca
# ./build-key-server server
# ./build-key client1
В директорию /usr/local/etc/openvpn/ потребуется скопировать только следующие файлы ca.crt, dh2048.pem, server.crt, server.key
Кроме того, нужно создать еще один ключ
bsd$ sudo openvpn --genkey --secret /usr/local/etc/openvpn/ta.key
bsd$ sudo chmod 0400 /usr/local/etc/openvpn/*
Клиенту потребуются файлы ca.crt, client1.crt, client1.key и ta.key
Можно скопировать файл шаблона конфигурации и изменить необходимые значения (следует обратить внимание, что в конфигурации сервера tls-auth ta.key 0, а у клиента tls-auth ta.key 1)
bsd$ sudo cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/
bsd$ sudo grep -ve '^[[:space:]]*\(#\|$\|;\)' /usr/local/etc/openvpn/server.conf
port 1294
proto tcp
....
server 10.0.84.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
tls-auth ta.key 0 # This file is secret
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 2
Для каждого клиента необходимо сгенерировать свой сертификат с уникальным common_name.
Чтобы использовать для подключения один и тот же сертификат различными клиентами нужно в /usr/local/etc/openvpn/server.conf указать параметр duplicate-cn и перезапустить сервер
Кроме того, можно переключить сервер OpenVPN из режима роутера в режим моста, задав параметр client-to-client,чтобы разрешить подключения между клиентами
bsd$ sudo cat /usr/local/openvpn/server.conf
....
duplicate-cn
....
client-to-client
bsd$ sudo /usr/local/etc/rc.d/openvpn restart
Создать файлы для протоколов и определить ротацию через /etc/newsyslog.conf
bsd$ sudo mkdir /var/log/openvpn
bsd$ sudo touch /var/log/openvpn/openvpn-status.log
bsd$ sudo touch /var/log/openvpn/ipp.txt
bsd$ sudo touch /var/log/openvpn/openvpn.log
bsd$ sudo chmod 0600 /var/log/openvpn/*
Необходимо добавить правила для фаервола (в данном случае для протокола TCP, для UDP будет несколько иначе)
bsd$ sudo ipfw -a list
.... allow tcp from any to me dst-port 2194 setup
.... allow ip from 10.0.84.0/24 to 10.0.84.0/24
....
.... allow tcp from any to any established
https://forums.freebsd.org/threads/easy-rsa-scripts-from-openvpn.32925/
bsd$ less /usr/local/etc/openvpn/server.conf
bsd$ /usr/local/share/easy-rsa/pkitool
FreeBSD 10.2-RELEASE: Wed Dec 2 19:41:15 YEKT 2015