Настройка OpenVPN Server на Debian 10 / Debian 11

Со времён прошлого мануала прошло много времени, релизнулся новый OpenVPN, и новый Debian, и всё стало немного иначе.

Здесь я расскажу как настроить OpenVPN сервер на Debian 10 или Debian 11, подключить клиент, и пустить через сервер весь клиентский траффик.

Все действия будем производить от рута, для чего пишем в терминал:

sudo su

Теперь, с помощью менеджера пакетов устанавливаем openvpn

apt-get install openvpn easy-rsa iptables

Создание сертификатов

Переходим к настройке. Конфиги лежат в /etc/openvpn, поэтому идём туда

cd /etc/openvpn/server

Сперва, сгенерируем ключи с помощью easy-rsa. Для этого создадим директорию сразу со ссылками на необходимые скрипты:

make-cadir rsa
cd rsa

Далее — редактируем конфигурационный файл vars

nano vars

В файле редактируем эти строки:

set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "CA"
set_var EASYRSA_REQ_CITY "SanFrancisco"
set_var EASYRSA_REQ_ORG "Fort-Funston"
set_var EASYRSA_REQ_EMAIL "me@myhost.mydomain"
set_var EASYRSA_REQ_OU "OU"

set_var EASYRSA_ALGO "ec"

set_var EASYRSA_REQ_CN "domain.com"

set_var EASYRSA_DIGEST "sha512"

Сохраняем файл с помщью Ctrl+x, y, enter.

Дальше — создаём инфраструктуру открытого ключа:

./easyrsa init-pki

Теперь создаем ключ для сервера:

./easyrsa gen-req server nopass

Генерируем корневой сертификат, указывая, что мы не хотим каждый раз вводить пароль при взаимодействии с CA:

./easyrsa build-ca nopass

Затем, подписываем сертификат сервера:

./easyrsa sign-req server server

Следующий шаг — создать ключ Диффи-Хеллмана:

./easyrsa gen-dh

Теперь создаем ключ для аутентификации tls:

openvpn --genkey secret ta.key

Аналогичным способом генерируем ключ для клиента:

./easyrsa gen-req client1 nopass

И подписываем сертификат:

./easyrsa sign-req client client1

Дальше — копируем свежесгенерированные серверные ключи в директорию с конфигурацией OpenVPN:

cp pki/ca.crt pki/private/server.key pki/issued/server.crt pki/dh.pem ta.key /etc/openvpn/server/

И для безопасности выставляем права 600 на эти файлы:

chmod 0600 /etc/openvpn/server/ca.crt /etc/openvpn/server/server.crt /etc/openvpn/server/server.key /etc/openvpn/server/dh.pem /etc/openvpn/server/ta.key

А клиентские файлы (client.crt, client.key, ca.crt, ta.key) — скопируйте себе на компьютер. Они лежат в /etc/openvpn/server/rsa/pki/ в директориях issued и private.

Настройка сервера

Копируем и разархивируем стандартную конфигурацию OpenVPN в /etc/openvpn/:

cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server/

Далее — правим стандартный конфиг, чтобы внести свои настройки:

nano /etc/openvpn/server/server.conf

Нас интересуют параметры

port 225

Либо любой другой порт. Также укажем путь к серверным ключам и сертификатам (они должны быть в /etc/openvpn/server/, иначе нужно указывать полный путь):

ca ca.crt
cert server.crt
key server.key
dh dh.pem

Также нужно найти и раскомментировать строки:

topology subnet

и

push «redirect-gateway def1 bypass-dhcp»

Указываем DNS-серверы для клиентов:

push «dhcp-option DNS 213.183.57.55»
push «dhcp-option DNS 87.98.175.85»

Для настройки tls — находим и раскомментируем (но если в качестве клиент будет роутер mikrotik — закомментируте эту строку!):

tls-auth ta.key 0

В конфиге указан шифр cipher AES-256-CBC. Они избыточен, для снижения нагрузки на оборудование (особенно актуально если слабый сервер, или клиент — домашний роутер) — редактируем:

cipher AES-256-CBC

И сразу под этим снизу добавляем строку

auth SHA512

Также, OpenVPN по умолчанию работает от root. Чтобы повысить безопасность — не стоит использовать его от рута, поэтому раскомментируем строки:

user nobody
group nogroup

И добавим логирование происходящего:

log /var/log/openvpn/openvpn.log

Готово! Можно сохранять конфиг. А также включать и запускать службу OpenVPN:

systemctl enable openvpn-server@server
systemctl start openvpn-server@server

@server — это название файла server.conf. Соответственно, если бы вы назвали сервер vasya.conf, то запускать нужно было бы openvpn-server@vasya

Настройка маршрутизации

Для того, чтобы клиент мог выходить в сеть через OpenVPN сервер — недостаточно просто настроить OpenVPN сервер. Нужно также разрешить Debian’у форвардить траффик, и добавить пару правил в фаерволл, для маршрутизации между сетями VPN и реальной.

Добавляем строку в /etc/sysctl.conf, разрешающую форвардить траффик:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

И загружаем новый конфиг с этим правилом:

sysctl -p

Теперь добавляем правила в фаерволл:

iptables -A FORWARD -i eth0 -o tun0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Здесь, возможно, придётся что-то поменять. Чтобы очистить фаерволл полностью — можно воспользоваться iptables -F и добавить правила заново.
tun0 — сетевой интерфейс сервера OpenVPN (можно посмотреть имя с помощью ip a)
eth0 — реальный сетевой интерфейс, через который Debian ходит в интернет  (можно посмотреть имя с помощью ip a)
10.8.0.0/24 — подсеть, используемая для OpenVPN, указывается в /etc/openvpn/server/server.conf

Внимание! При перезагрузке ОС — правила фаерволла не сохраняются. Поэтому, после настройки фаерволла необходимо сохранить правила в файл:

iptables-save > /etc/iptables.rules

Сохранили, теперь их нужно загружать при загрузке операционной системы. Для этого — дописываем необходимые стройки в конец файла с конфигом сети:

echo -e "\npost-up /sbin/iptables-restore < /etc/iptables.rules" >> /etc/network/interfaces

UPD:

Для увеличения срока жизни сертификатов нужно указать в vars:

set_var EASYRSA_CERT_EXPIRE 3650

И подписывать сертификаты с указанием vars:

./easyrsa —vars=./vars sign-req client test3

Об авторе Thomas

Как вы лодку назовете, так на ней и напишите
Запись опубликована в рубрике Новости. Добавьте в закладки постоянную ссылку.

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

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