OpenVPN Fedora Server

Установка и настройка 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

  1. Уведомление: Openvpn - Записки админа

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *