Со времён прошлого мануала прошло много времени, релизнулся новый 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