- Исходные данные
# uname -sr FreeBSD 12.1-RELEASE-p1 # pkg info | grep openvpn openvpn-2.4.8_2 Secure IP/Ethernet tunnel daemon
- Установка
# cd /usr/ports/security/openvpn # make install clean
В настройках во время установки необходимо выбрать как минимум:[ ] ASYNC_PUSH Enable async-push support [ ] DOCS Build and/or install documentation [x] EASYRSA Install security/easy-rsa RSA helper package [x] EXAMPLES Build and/or install examples [x] LZ4 LZ4 compression support [x] LZO LZO compression support [ ] PKCS11 Use security/pkcs11-helper (OpenSSL only) [ ] SMALL Build a smaller executable with fewer features [ ] TEST Build and/or run tests [ ] TUNNELBLICK Tunnelblick XOR scramble patch (READ HELP!) [ ] X509ALTUSERNAME Enable --x509-username-field (OpenSSL only) ─────────────────────────── SSL protocol support ───────────────────────── (*) OPENSSL SSL/TLS support via OpenSSL ( ) MBEDTLS SSL/TLS via mbedTLS (lacks TLS v1.3)
После установки, создаем директории и копируем файлы:# mkdir /usr/local/etc/openvpn # mkdir /usr/local/etc/openvpn/ccd # cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/ # cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa
# cd /usr/local/etc/openvpn/easy-rsa
Далее, приступаем к генерации ключей. Заполняем необходимые поля об организации, городе и т.д. в конфигурационном файле Easy-RSA /usr/local/etc/openvpn/easy-rsa/vars. Необходимо раскомментировать и изменить строки:set_var EASYRSA_REQ_COUNTRY "<СТРАНА>" set_var EASYRSA_REQ_PROVINCE "<ОБЛАСТЬ>" set_var EASYRSA_REQ_CITY "<ГОРОД>" set_var EASYRSA_REQ_ORG "<ОРГНИЗАЦИЯ>" set_var EASYRSA_REQ_EMAIL "<EMAIL>" set_var EASYRSA_REQ_OU "<ОТДЕЛ>"
Генерация ключей осуществляется скриптом easyrsa.real# ./easyrsa.real help # ./easyrsa help COMMAND # ./easyrsa help options
Одноразово создаем инфраструктуру публичного ключа (Public Key Infrastructure):# ./easyrsa.real init-pki
В результате чего будет создана структура каталогов для будущих ключей, /usr/local/etc/openvpn/easy-rsa/pki.
Создаем Certificate Authority. Делаем это без пароля при запуске (nopass), так что будьте бдительны в плане защиты ключей:# ./easyrsa.real build-ca nopass
Создаем Server Certificate:# ./easyrsa.real build-server-full openvpn-server nopass
Генерируем Diffie Hellman Parameters# ./easyrsa.real gen-dh
Создаем ключ для tls-аутентификации:# openvpn --genkey --secret pki/private/ta.key
Собираем все нужные серверные ключи в одном месте и с нужными названиями файлов:# cp /usr/local/etc/openvpn/easy-rsa/pki/ca.crt /usr/local/etc/openvpn/ # cp /usr/local/etc/openvpn/easy-rsa/pki/dh.pem /usr/local/etc/openvpn/dh2048.pem # cp /usr/local/etc/openvpn/easy-rsa/pki/issued/openvpn-server.crt /usr/local/etc/openvpn/server.crt # cp /usr/local/etc/openvpn/easy-rsa/pki/private/openvpn-server.key /usr/local/etc/openvpn/server.key # cp /usr/local/etc/openvpn/easy-rsa/pki/private/ta.key /usr/local/etc/openvpn/
Правим /usr/local/etc/openvpn/server.conf:
- можно задать свой порт, отличный от 1194, который используется по умолчаниюport 1195
- TCP!proto tcp #proto udp
- раскомментируем client-config-dir:client-config-dir ccd
- ищем cipher AES-256-CBC и добавляем ниже строку auth SHA512:cipher AES-256-CBC auth SHA512
- ищем и расскомментируем:user nobody group nobody compress lz4-v2 push "compress lz4-v2" comp lzo
Добавляем в /etc/rc.conf:openvpn_enable="YES" openvpn_configfile="/usr/local/etc/openvpn/server.conf" openvpn_dir="/usr/local/etc/openvpn"
Правила для брандмауера:/sbin/ipfw -q add allow all from XXX.XXX.XXX.XXX 1195 to any via re0 /sbin/ipfw -q add allow all from any to XXX.XXX.XXX.XXX 1195 via re0 /sbin/ipfw -q add allow all from any to any via tun0
Первые два правила разрешают пакеты для подключения клиентов через внешний ip сервера к OpenVPN;
Третье правило разрешает пакеты на tun0 интерфейсе OpenVPN сервера;
На этом настройка OpenVPN сервера на минималках закончена. Клиенты смогут соединяться с вашим OpenVPN сервером.
- Запускаем
# /usr/local/etc/rc.d/openvpn start
- Клиенты
Выпуск клиентского сертификата:# cd /usr/local/etc/openvpn/easy-rsa # ./easyrsa.real build-client-full <CLIENT_NAME> nopass
Скрипт для генерации файла, содержащего все необходимые сертификаты, а также настройки клиента:# mkdir -p /usr/local/etc/openvpn/client-configs/files # chmod 700 /usr/local/etc/openvpn/client-configs/files
Создаем файл /usr/local/etc/openvpn/client-configs/base.conf со следующим содержимым:client dev tun proto tcp remote XXX.XXX.XXX.XXX 1195 nobind user nobody group nogroup persist-key persist-tun key-direction 1 cipher AES-256-CBC auth SHA512 comp-lzo verb 1
- Если мы хотим выпускать клиентов в интернет.
Я было начал писать про это, но на сервере надо было поднимать NAT, а в случае ядерного ната это грозит пересборкой ядра с последующей перезагрузкой сервера, что было неприемлимо (я про перезагрузку). Потому я решил обойтись доступом по VPN к серверу, а дальше использовать treeproxy. Ниже вы можете почитать заметки на эту тему, но на практике реализации не было. Допишу, как появится необходимость.
/usr/local/etc/openvpn/server.conf:
- найти, закомментировать или раскомментировать строчки в соответствии с теми, что написаны ниже:dev tap ;dev tun #server 10.8.0.0 255.255.255.0 server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 push "redirect-gateway def1 bypass-dhcp"
- Ошибки
- Cannot allocate TUN/TAP dev dynamically
: Ядро собрано без поддержки tap. Пересоберите ядро или kldload if_tap
Статья опубликована: 2020-02-25 23:02:23
Последние правки: 2020-02-26 18:25:11
В нынешние тяжелые времена, OpenVPN сервер в умелых руках не будет лишним. Как установить, настроить и эксплуатировать OpenVPN сервер на FreeBSD 12 - читайте в этой статье.