Установка и настройка OpenVPN сервера на Fedora (на момент написания стати 35 релиз) — дистрибутив, который отлично подходит для запуска персонального VPN сервера. Он достаточно стабилен для такой задачи, а всё необходимое для настройки VPN доступно в основных репозиториях системы.
OpenVPN сервер.
1. Первичная подготовка.
Устанавливаем необходимые пакеты и готовим окружение.
# dnf install openvpn easy-rsa firewalld zip # mkdir -p /etc/openvpn/easy-rsa/keys # cp -arvp /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/ # cp /etc/openvpn/easy-rsa/openssl-easyrsa.cnf /etc/openvpn/easy-rsa/openssl.cnf
2. Создаём сертификаты.
Открываем файл /etc/openvpn/easy-rsa/vars и при необходимости указываем в нём нужные данные:
export KEY_COUNTRY="RU" export KEY_PROVINCE="RU" export KEY_CITY="Vologda" export KEY_ORG="VologdaVPN" export KEY_EMAIL="info@vologdavpn.com" export KEY_OU="VologdaVPN"
Генерируем сертификат и ключ для сервера. Стоит отметить, что при выполнении команд здесь используется параметр nopass. При необходимости использования дополнительных паролей, генерировать сертификаты нужно без nopass.
# cd /etc/openvpn/easy-rsa # ./easyrsa init-pki # ./easyrsa build-ca # ./easyrsa gen-dh # ./easyrsa build-server-full server nopass # ./easyrsa gen-crl # openvpn --genkey --secret /etc/openvpn/easy-rsa/pki/ta.key # cp -rp /etc/openvpn/easy-rsa/pki/{ca.crt,dh.pem,crl.pem,ta.key,issued,private} /etc/openvpn/server/
3. Пишем конфиг OpenVPN сервера.
Открываем файл /etc/openvpn/server/server.conf и прописываем следующее…
# cat /etc/openvpn/server.conf local 1.2.3.4 port 3333 proto udp dev tun ca ca.crt cert issued/server.crt key private/server.key dh dh.pem crl-verify crl.pem tls-auth ta.key 0 server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" keepalive 10 120 user nobody group nobody persist-key persist-tun mssfix fragment 1300 sndbuf 524288 rcvbuf 524288 push "sndbuf 524288" push "rcvbuf 524288" log openvpn.log verb 5
1.2.3.4 здесь — это IP сервера, 3333 — порт, на котором будет работать сервер. При необходимости, ведение лога можно перенаправить в /dev/null. В данной конфигурации так же используется увеличенный буфер. Подробнее об этом нужно прочитать в отдельной заметке.
Конфиг сохраняем, сервис openvpn перезапускаем и добавляем его в автозапуск.
# systemctl -f enable openvpn-server@server.service # systemctl restart openvpn-server@server.service
4. Настраиваем firewalld и разрешаем форвардинг.
Запускаем firewalld, если он ещё не был запущен ранее.
# systemctl -f enable firewalld # systemctl restart firewalld
Активируем masquerade:
# firewall-cmd --permanent --add-masquerade # INTFS=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}') # firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $INTFS -j MASQUERADE # firewall-cmd --reload
Включаем форвардинг:
# cat /etc/sysctl.conf net.ipv4.ip_forward = 1 # sysctl -p
Открываем порт для соединения (в нашем случае это 3333). Для работы VPN по UDP, открыть нужно UDP порт:
# firewall-cmd --permanent --zone=public --add-port=3333/udp
Для работы по TCP, соответственно:
# firewall-cmd --permanent --zone=public --add-port=3333/tcp
Не забываем перезапустить firewalld:
# firewall-cmd --reload
5. Не забываем о SELinux:
Порт 3333 нужно заменить на тот, что будет использоваться в конфиге сервера. В примере ниже разрешение даётся для udp на 3333 порте.
# semanage port -a -t openvpn_port_t -p udp 3333
6. Создаём сертификаты для клиента.
В примере, для клиента используется имя client, пароль для его сертификата так же не указывается. Для создания сертификата с паролем, вторая команда должна быть выполнена без nopass.
# cd /etc/openvpn/easy-rsa # ./easyrsa build-client-full client nopass # mkdir /root/clientserts # cp /etc/openvpn/easy-rsa/pki/{ca.crt,issued/client.crt,private/client.key,ta.key} /root/clientserts/ # cd /root/ # zip -r -9 clientserts.zip clientserts/
7. Отзываем сертификат для клиента.
При необходимости отозвать сертификат и не дать возможности клиенту подключиться к серверу, необходимо сделать следующее (в примере описан отзыв для клиента client):
Отзываем сертификат:
# cd /etc/openvpn/easy-rsa/ # ./easyrsa revoke client
Генерируем список отозванных сертификатов (CRL). И копируем его в директорию vpn сервера:
# ./easyrsa gen-crl # mv /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/server/
CRL в конфиге сервера подключается с помощью строки:
crl-verify crl.pem
Файл нужно переносить в директорию vpn сервера каждый раз, как новый сертификат будет отозван. После этого, сервер необходимо перезаустить:
# systemctl restart openvpn-server@server.service
OpenVPN клиенты.
Настраиваем подключение в Linux, с помощью NetworkManager следующим образом…
Настраиваем подключение в Windows следующим образом…
После того, как OpenVPN настроен, а подключение к нему установлено, имеет смысл сразу же проверить, всё ли работает корректно. Например можно зайти на 2ip.ru и посмотреть, какой IP и какая информация о подключении отображается там. Если всё сделано верно, 2ip покажет вместо нашего реального IP, адрес настроенного только что сервера. С этого момента, можно приступать к работе в сети.
2 thoughts on “OpenVPN Fedora Server”