Если мне не изменяет память, начиная с 10-й ветки FreeBSD немного изменилась логика в настройке OpenVpn.
На старой работе был сервер под FreeBSD 8.1 вроде, для этих целей, сейчас же понадобилось поднять на FreeBSD 11.1.
И так, имеем FreeBSD 11.1
FreeBSD ***.kiev.ua 11.1-STABLE FreeBSD 11.1-STABLE #0 r328830: Sat Feb 3 19:26:16 EET 2018 root@***.kiev.ua:/usr/obj/usr/src/sys/AMG amd64
OpenVpn собираю с такими опциями
make showconfig
===> The following configuration options are available for openvpn-2.4.4:
DOCS=on: Build and/or install documentation
EASYRSA=on: Install security/easy-rsa RSA helper package
EXAMPLES=on: Build and/or install examples
LZ4=on: LZ4 compression support
PKCS11=on: Use security/pkcs11-helper
SMALL=off: Build a smaller executable with fewer features
TEST=on: Build and/or run tests
TUNNELBLICK=off: Tunnelblick XOR scramble patch (READ HELP!)
X509ALTUSERNAME=on: Enable --x509-username-field (OpenSSL only)
====> SSL protocol support: you have to select exactly one of them
OPENSSL=on: SSL/TLS support via OpenSSL
MBEDTLS=off: SSL/TLS via mbedTLS
===> Use 'make config' to modify these settings
После сборки OpenVpn переходим к настройкам.
mkdir /usr/local/etc/openvpn
Далее копируем дефолтный конфиг сервера.
cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/server.conf
И каталог с Easy-RSA
cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
Переходим в каталог
/usr/local/etc/openvpn/easy-rsa
и смотрим что у нас там есть.
ls -ll total 72 -r-xr-xr-x 1 root wheel 34910 Feb 10 16:30 easyrsa.real -rw-r--r-- 1 root wheel 4560 Feb 10 16:30 openssl-1.0.cnf -rw-r--r-- 1 root wheel 4560 Feb 10 16:30 openssl-1.0.cnf.example -rw-r--r-- 1 root wheel 8126 Feb 10 16:30 vars -rw-r--r-- 1 root wheel 8126 Feb 10 16:30 vars.example drwxr-xr-x 2 root wheel 512 Feb 10 16:30 x509-types
Правим файл Easy-RSA под себя, и приступаем с самому процессу генерации ключей.
set_var EASYRSA_REQ_COUNTRY "<COUNTRY>" set_var EASYRSA_REQ_PROVINCE "<PROVINCE>" set_var EASYRSA_REQ_CITY "<CITY>" set_var EASYRSA_REQ_ORG "<ORGANIZATION>" set_var EASYRSA_REQ_EMAIL "<EMAIL>" set_var EASYRSA_REQ_OU "<ORGANIZATIONAL UNIT>"
Теперь генерация ключей проходит только при помощи файла easyrsa.real, ознакомиться с его опциями можно при помощи команды ./easyrsa.real help
./easyrsa.real help
Note: using Easy-RSA configuration from: ./vars
Easy-RSA 3 usage and overview
USAGE: easyrsa [options] COMMAND [command-options]
A list of commands is shown below. To get detailed usage and help for a
command, run:
./easyrsa help COMMAND
For a listing of options that can be supplied before the command, use:
./easyrsa help options
Here is the list of commands available with a short syntax reminder. Use the
'help' command above to get full usage details.
init-pki
build-ca [ cmd-opts ]
gen-dh
gen-req <filename_base> [ cmd-opts ]
sign-req <type> <filename_base>
build-client-full <filename_base> [ cmd-opts ]
build-server-full <filename_base> [ cmd-opts ]
revoke <filename_base>
gen-crl
update-db
show-req <filename_base> [ cmd-opts ]
show-cert <filename_base> [ cmd-opts ]
import-req <request_file_path> <short_basename>
export-p7 <filename_base> [ cmd-opts ]
export-p12 <filename_base> [ cmd-opts ]
set-rsa-pass <filename_base> [ cmd-opts ]
set-ec-pass <filename_base> [ cmd-opts ]
DIRECTORY STATUS (commands would take effect on these locations)
EASYRSA: /usr/local/etc/openvpn/easy-rsa
PKI: /usr/local/etc/openvpn/easy-rsa/pki
Создаем инфраструктуру публичного ключа (Public Key Infrastructure), это команда делается один раз!
./easyrsa.real init-pki
Смотрим что у нас получилось
./easyrsa.real init-pki Note: using Easy-RSA configuration from: ./vars init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /usr/local/etc/openvpn/easy-rsa/pki
Далее создаем сертификаты.
./easyrsa.real build-ca nopass
Обращаю внимание на то, что сертификат создается без пароля (nopass), можно создать и с паролем, для более надежной защиты, но иногда требуется чтобы OpenVpn стартовал автоматом с системой, поэтому мне необходимо без пароля.
Создаем сертификат для сервера
./easyrsa.real build-server-full openvpn-server nopass
После генерируем сертификаты для клиентов.
./easyrsa.real build-client-full client_name nopass
После клиентов генерируем ключ Diffie Hellman
./easyrsa.real gen-dh
Далее копируем ключи и настраиваем сам конфиг OpenVpn сервера.
mkdir /usr/local/etc/openvpn/keys
Приводим конфиг сервера к такому виду.
#порт на котором работает сервер port 9595 # протокол - советую udp proto udp # - используемый тип устройства и номер dev tun0 #указываем файл CA ca /usr/local/etc/openvpn/keys/ca.crt #указываем файл с сертификатом сервера cert /usr/local/etc/openvpn/keys/openvpn-server.crt #указываем файл с ключем сервера key /usr/local/etc/openvpn/keys/openvpn-server.key #указываем файл Диффи Хельман dh /usr/local/etc/openvpn/keys/dh.pem #задаем IP-адрес сервера и маску подсети # (виртуальной сети) - можно произвольную, (я выбрал такую) server 172.16.0.0 255.255.255.0 #задаем МАРШРУТ который передаём клиентту # и маску подсети для того чтобы он "видел" # сеть за опенвпн сервером (сеть 192.168.0.0/24) #push "route 192.168.0.0 255.255.255.0" # указываем где хранятся файлы с # настройками IP-адресов клиентов #client-config-dir ccd # добавляем маршрут сервер-клиент route 172.16.0.0 255.255.255.252 # этой строкой описываем маршруты к сетям к которым ходить # через тунель!!!!!(в данном случае к сети в филиале) #route 192.168.1.0 255.255.255.0 # включаем TLS аутификацию #tls-server # указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента #tls-auth keys/ta.key 0 # таймаут до реконекта tls-timeout 120 auth MD5 # # включаем шифрацию пакетов cipher BF-CBC keepalive 10 120 # сжатие трафика comp-lzo # максимум клиентов max-clients 100 user nobody group nobody # Не перечитывать ключи после получения # SIGUSR1 или ping-restart persist-key # Не закрывать и переоткрывать TUN\TAP # устройство, после получения # SIGUSR1 или ping-restart persist-tun # логирование (не забудьте создать эту дирректорию /var/log/openvpn/) status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log # Уровень информации для отладки verb 4
Создаем папку для логов
mkdir /var/log/openvpn
Добавляем в rc.conf
openvpn_enable="YES" openvpn_if="tun" openvpn_configfile="/usr/local/etc/openvpn/server.conf" openvpn_dir="/usr/local/etc/openvpn"
Взлетаем.
/usr/local/etc/rc.d/openvpn start Starting openvpn.
Проверяем.
ps fax|grep open 86829 - S<s 0:00.01 /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --daemon openvpn --config /usr/local/etc/openvpn/server.conf --writepid /var/ 86835 9 S+ 0:00.00 grep open
Как видим, сервер запустился, значит мы все сделали правильно.