Установка OpenVPN и Easy-RSA
#
apt update
apt install openvpn easy-rsa -y
# Проверяем версию
openvpn --version
Подготовка PKI (сертификаты и ключи)
#
mkdir /etc/openvpn/easy-rsa
mkdir /etc/openvpn/ccd
cd /etc/openvpn/easy-rsa
cp -r /usr/share/easy-rsa/* .
# Инициализируем инфраструктуру PKI ключей
mv vars.example vars
./easyrsa init-pki
# Создаем удостоверяющий центр CA
./easyrsa build-ca
# При создании CA задаем имя, например MyVPN-CA
# В итоге получаем 2 файла
# /etc/openvpn/easy-rsa/pki/private/ca.key
# /etc/openvpn/easy-rsa/pki/ca.crt
# Создаём ключ Диффи-Хеллмана
./easyrsa gen-dh
# В итоге получаем файл DH
/etc/openvpn/easy-rsa/pki/dh.pem
# Создаём ключ для шифрования TLS control channel, что повышает безопасность
openvpn --genkey secret /etc/openvpn/server/tc.key
Создание конфигурации сервера
#
# Генерация сертификата сервера сроком на 10 лет
./easyrsa gen-req server nopass
./easyrsa --days=3650 sign-req server server
# В итоге получаем подписанный УЦ сертификат сервера
# /etc/openvpn/easy-rsa/pki/issued/server.crt
# /etc/openvpn/easy-rsa/pki/private/server.key
# Копирование сертификатов и ключей в папку сервера
cp pki/ca.crt /etc/openvpn/server/ca.crt
cp pki/dh.pem /etc/openvpn/server/dh.pem
cp pki/issued/server.crt /etc/openvpn/server/server.crt
cp pki/private/server.key /etc/openvpn/server/server.key
# Создаём конфигурационный файл server.conf
nano /etc/openvpn/server/server.conf
...
# Запуск OpenVPN Server
systemctl enable openvpn@server
systemctl start openvpn@server
systemctl status openvpn@server
Создание конфигурации клиента
#
# Генерация сертификата клиента сроком на 10 лет
./easyrsa gen-req user1 nopass
./easyrsa --days=3650 sign-req client user1
# В результате получаем подписанный УЦ сертификат клиента
/etc/openvpn/easy-rsa/pki/issued/user1.crt
/etc/openvpn/easy-rsa/pki/private/user1.key
# Клиенту для подключения понадобятся
ca.crt
client1.crt
client1.key
tc.key
# Создаём конфигурационный файл user1.ovpn
/etc/openvpn/users-conf/user1.ovpn
...
Настройка SNAT и IP Forwarding
#
# SNAT
apt install iptables-persistent -y
iptables -t nat -A POSTROUTING -s 10.200.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -L -n -v
# Сохраняем правила добавленные в iptables
netfilter-persistent save
# или
iptables-save > /etc/iptables/rules.v4
# IP Forwarding
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Траблшутинг
#
journalctl -u openvpn-server@server
openvpn --config /etc/openvpn/server/server.conf
Официальная документация