sudo apt update && apt upgrade -y
2.Установка OpenVPN
sudo sudo apt install openvpn
3. Ставим пакет для работы с 'git'
sudo apt install git -y
4. Повышаем права до рута. Клонируем репозиторий 'easy-rsa'.
sudo -s
git clone https://github.com/OpenVPN/easy-rsa.git /etc/openvpn/easy-rsa
5. Настраиваем и активируем удостоверяющий центр
cd /etc/openvpn/easy-rsa/easyrsa3/
Создаем файл с настройками
nano vars.example
вносим в созданный файл данные со своими значениями
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "MO"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "my_example.org"
set_var EASYRSA_REQ_EMAIL "admin@my_example.org"
set_var EASYRSA_REQ_OU "my IT dep"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 3650
set_var EASYRSA_CERT_EXPIRE 3650
Расшифровку параметров можно посмотреть здесь:
cat /etc/openvpn/easy-rsa/easyrsa3/vars.example
./easyrsa init-pki
Генерируем корневой сертификат, для дополнительной защиты указываем пароль:
./easyrsa build-ca
Генерируем ключ Диффи-Хельмана
./easyrsa gen-dh
Генерируем ключ и сертификат сервера (имя сервера в данном примере - 'openvpn_server'):
./easyrsa build-server-full openvpn_server nopass
nopass - елси нам надо чтобы система не спрашивала при запуске OpenVPN сервера пароль, например при перезагрузке.
6. Генерация ключей для клиентов
Генерация ключей без пароля, не безопасный метод.
./easyrsa build-client-full user1 nopass
./easyrsa build-client-full user2 nopass
Генерация ключей защищенных паролем
./easyrsa build-client-full user3
7. Для генерации списка отозванных сертификатов используем команду
./easyrsa gen-crl
Данная список позволяет запрещать доступ уже не актуальным и скомпреметированным ключам.
8. Настройка маршрутизации
nano /etc/sysctl.conf
Раскомментируем строку(удаляем #)
#net.ipv4.ip_forward=1
9. Настраиваем фаерволл iptables.
Ддя начала узнаем имя сетевого интерфейса
ip a
в нашем случае это eth0
Добавляем правила
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
Здесь мы указываем нашу vpn-подсеть и маску: 172.16.10.0/24
Чтобы правила срабытывались и не сбрасывались после перезагрузке, мы запишем их в rc.local
если такого файла нет, то создаем его
cd /etc
touch rc.local
и делаем его исполняемым:
chmod +x rc.local
записываем правила
nano /etc/rc.local
#!/bin/bash
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -o eth0 -j MASQUERADE
exit 0
10. Создаем конфиг сервера
nano /etc/openvpn/server.conf
# Указываем какой порт будет слушать наш сервер, по умолчанию 1194
port 1194
# Указываем протокол tcp или udp
#proto tcp
proto udp
# На какой устройстве будет работать OpenVPN сервер, tun0 - это устройство создается автоматически
dev tun
# Сертификат удостоверяющего центра
ca /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
# Сертификат и ключ нашего сервера, а также пути к ним
cert /etc/openvpn/easy-rsa/easyrsa3/pki/issued/openvpn_server.crt
key /etc/openvpn/easy-rsa/easyrsa3/pki/private/openvpn_server.key
# Ключ Диффи-Хельмана используется для защиты передаваемых ключей по открытому каналу
dh /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem
# Список отозванных сертификатов:
crl-verify /etc/openvpn/easy-rsa/easyrsa3/pki/crl.pem
# Указываем секретный TLS ключ
tls-auth ta.key 0
remote-cert-tls client
# Указыаем тип шифрования AES 256 bit
cipher AES-256-GCM
# Указываем подсеть в которой будут работать клиенты VPN сервера
server 172.16.10.0 255.255.255.0
# Указываем файл куда будут записываться IP адреса выданные клиентам
ifconfig-pool-persist /etc/openvpn/ipp.txt
# Разрешаем подключенным клиентам OpenVPN сервера соединяться друг с другом
client-to-client
# Включаем возможность указания индивидуальных настроек для клиентов OpenVPN сервера
client-config-dir ccd
# Если необходимо разрешить нескольким пользователям подключаться по одному ключу ( необходимо снять комментарий )
#duplicate-cn
# Проверяем состояние клиента, отправляем пакеты каждые 10 сек. если в течении 240 сек. клиент не ответил, то он считаться отключенным
keepalive 10 240
# Используем сжатие трафика (если не нужно то можно закомментировать!)
;comp-lzo
# Максимальное количество подключенных клиентов
max-clients 10
# Записи о состоянии подключенных клиентов и т.п.
status /var/log/openvpn-status.log
log /var/log/openvpn.log
# Уровень логирования 0 в лог попадают только записи о критических ошибках сервера, если нужно подробнее, то выставляем 9
verb 4
# Количество записей после которых будет производиться запись в лог
mute 20
11. Копирование ключей и сертификатов для клиентов
Вам нужно скопировать следующие файлы на клиенте OpenVPN
/etc/openvpn/ta.key
/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
/etc/openvpn/easy-rsa/easyrsa3/pki/private/'client_name'.key
/etc/openvpn/easy-rsa/easyrsa3/pki/issued/'client_name'.crt
и создать рядом конфиг
client
tls-client
dev tun
proto udp
resolv-retry infinite
nobind
cipher AES-256-GCM
verb 3
remote 'server_ip_or_name' 1194
remote-cert-tls server
ca ca.crt
cert 'client_name'.crt
key 'client_name'.key
tls-auth ta.key 1
auth SHA1