Установка OpenVPN на FreeBSD 11
Прежде чем приступить к установке, убедитесь, что ваша система находится в актуальном состоянии:
freebsd-update fetch
freebsd-update install
Как и раньше, OpenVPN можно собрать из портов (тут ничего не поменялось, ссылка на старую статью дал в начале) или установить бинарные пакеты с помощью команды "pkg":
pkg update
pkg install openvpn
Также будут доустановлены пакеты "easy-rsa" и "lzo2", которые необходимы для openvpn.
Настройка OpenVPN сервера
Для начала создадим директорию где будут храниться файлы конфигурации и ключи нашего будущего сервера.
mkdir /usr/local/etc/openvpn
Копируем туда пример файла конфигурации сервера server.conf
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
Вот теперь начинается самое интересное. Для генерации ключей переходим в только что созданный каталог:
cd /usr/local/etc/openvpn/easy-rsa
в котором нас ожидает совсем не то что было раньше:
ls
easyrsa.real openssl-1.0.cnf.example vars.example
openssl-1.0.cnf vars 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>"
Генерация ключей
Вот тут принципиальное отличие. Теперь ключи генерируются одним единственным shell-скриптомeasyrsa.real
Посмотреть все возможные команды нового скрипта easy-rsa можно так:
./easyrsa.real help
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 ]
Для более детального ознакомления с отдельными командами и опциями следует ввести:
./easyrsa help COMMAND
./easyrsa help options
Создаем инфраструктуру публичного ключа (Public Key Infrastructure)
./easyrsa.real init-pki
Этой команда выполняется один раз, создавая структуру каталогов для будущих ключей/usr/local/etc/openvpn/easy-rsa/pki
Создание Certificate Authority
./easyrsa.real build-ca nopass
Опция “nopass” указывает что пароль при запуске не требуется, но помните что ключи в таком случае должны быть тщательно защищены.
Создание сертификата сервера (Server Certificate)
./easyrsa.real build-server-full openvpn-server nopass
посмотреть созданный ключ можно командой:
./easyrsa.real show-cert openvpn-server
Создание сертификатов клиентов (Client Certificate)
./easyrsa.real build-client-full client_name nopass
Генерация Diffie Hellman Parameters
./easyrsa.real gen-dh
Прописываем ключи OpenVPN серверу
Создадим специальный каталог, откуда openvp-cервер будет брать нужные ключи для авторизации:
mkdir /usr/local/etc/openvpn/keys
[root]# cp pki/dh.pem \
pki/ca.crt \
pki/issued/openvpn-server.crt \
pki/private/openvpn-server.key \
/usr/local/etc/openvpn/keys
Туда же скопируем файлы ключей наших пользователей из каталогов:
pki/issued/<client_name>.crt
pki/private/<client_name>.key
Собственно, дальнейшая настройка аналогична старому варианту, сам конфигуционный файл openvpn-сервера не претерпел каких-то особых изменений и предыдущая статья о настройке в этом плане актуальна.
Небольшое дополнение. Для автоматического поднятия интерфейса tap0 нужно в конце rc.conf добавить строчку:
ifconfig_tun0="up"
File config:
start OpenVPV:
/usr/local/sbin/openvpn --config /usr/local/etc/openvpn/server.conf
vim /usr/local/etc/openvpn/server.conf
dev tun
daemon
comp-lzo
comp-noadapt
user nobody
group nobody
persist-key
persist-tun
verb 5
proto udp
local ip_server
lport 1194
mode server
tls-server
ping 10
ping-exit 90
tun-mtu 1500
fragment 1400
mssfix
management 127.0.0.1 3000
#duplicate-cn # allow multiple connection of user with some common name
server 192.168.20.0 255.255.255.0
push "redirect-gateway def1"
#push "dhcp-option DNS ip_server"
push "dhcp-option DNS 8.8.8.8"
push "ping 10"
push "ping-exit 90"
tmp-dir /usr/local/etc/openvpn/tmp
writepid /var/run/openvpn.pid
dh /usr/local/etc/openvpn/ssl/dh.pem
ca /usr/local/etc/openvpn/ssl/ca.crt
cert /usr/local/etc/openvpn/ssl/openvpn-server.crt
key /usr/local/etc/openvpn/ssl/openvpn-server.key
#auth-user-pass-verify /home/scripts/openvpn/auth.pl via-env
#client-connect /home/scripts/openvpn/connect.pl
#client-disconnect /home/scripts/openvpn/disconnect.pl
NAT
ipfw add divert natd all from 192.168.0.0/24 to any out via xn0
ipfw add divert natd all from any to ip_server in via xn0
vim /etc/rc.conf
# OpenVPN Setting #
gateway_enable="YES"
openvpn_enable="YES"
openvpn_if="tun"
ipnat_enable="YES"