OpenVPN: быстрая настройка на Ubuntu 18.04

Ну что же, очередной мануал по настройке OpenVPN.
Надоело каждый раз искать и вспоминать, когда нужно быстро настроить OpenVPN сервер, так что описал быструю настройку. Этот пост в большей мере написан для себя. В моём случае используется Ubuntu 16 или 18 и все просто работает.

На сервере

sudo apt update
sudo apt install openvpn openssl easy-rsa
Копируем шаблонную директорию easy-rsa в папку c openvpn (папка доступна только для root):
sudo cp -R /usr/share/easy-rsa /etc/openvpn/
Пишем конфиг сервера:
nano /etc/openvpn/server.conf
# Указываем какой порт будет слушать наш сервер, по умолчанию 1194
port 1091
# Указываем протокол tcp или udp
proto udp
# На какой устройстве будет работать OpenVPN сервер, tun0 создается автоматически
dev tun
# Сертификат удостоверяющего центра
ca /etc/openvpn/easy-rsa/keys/ca.crt
# Сертификат и ключ нашего сервера
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
# Ключ Диффи-Хельмана используется для защиты передаваемых ключей по открытому каналу
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# При подключении мы будем попадать в эту сеть
server 10.1.10.0 255.255.255.0
# Сохраняем IP адреса клиентов в файле
ifconfig-pool-persist /etc/openvpn/ipp.txt
# Не перечитаваем файлы ключей при перезапуске туннеля
persist-key
# Не трогаем устройства tun/tap при перезапуске OpenVPN
persist-tun
# Указываем доп. TLS ключ для аутентификации
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0
# Указываем тип шифрования AES 256 bit
cipher AES-256-CBC
# Алгоритм хеширования
auth SHA512
# Проверяем состояние клиента, отправляем пакеты каждые 10 сек. если в течении 30 сек. 
# клиент не ответил, то он считаться отключенным
keepalive 10 30
# Используем сжатие трафика
comp-lzo
# Записи о состоянии подключенных клиентов
status openvpn-status.log
# Уровень логирования
verb 3
# Разрешаем подключенным клиентам OpenVPN сервера соединяться друг с другом
client-to-client
# Включаем возможность указания индивидуальных настроек для клиентов OpenVPN сервера
client-config-dir ccd
# Логи
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/append_openvpn.log
Настраиваем переменные окружения для работы с сертификатами opnvpn:
cd /etc/openvpn/easy-rsa/
Создаём символьную ссылку, чтобы избежать ошибку при генерации сертификата для сервера:
ln -s openssl-1.0.0.cnf openssl.cnf
Правим необходимые переменные окружения (или можно это сделать в процессе генерация ключей), среди прочего указываем имя ключа:
nano vars 
export KEY_NAME="server"
Инициализируем переменные окружения, для последующего запуска скриптов:
source vars
Создаем ключ Диффи-Хеллмана
./build-dh
Корень центра сертификации:
./build-ca
Генерируем сертификаты и ключи сервера (пароли оставляю пустыми):
./build-key-server server
Генерация HMAC подписи для дополнительной проверки ключом TLS:
openvpn --genkey --secret keys/ta.key
Далее нам нужно создать клиентский сертификат для подключения к нашему серверу из вне:
source vars
./build-key client1
Если вам понадобится отозвать клиентский сертификат:
source vars
./revoke-full client1
Создаем необходимые файлы и папки:
mkdir /etc/openvpn/ccd
touch /var/log/openvpn/openvpn.log
touch /var/log/openvpn/append_openvpn.log
touch /etc/openvpn/openvpn-status.log
Если нужно выдавать openvpn клиенту всегда одинаковый IP адрес, создаем в папке /etc/openvpn/ccd файл с именем клиента и следующим содержанием:
nano /etc/openvpn/ccd/client1
ifconfig-push 10.1.10.5 255.255.255.0
Запустить созданный конфиг:
systemctl start openvpn@server
Если все работает добавить конфиг в автозагрузку:
systemctl enable openvpn@server
Смотрим статус службы и клиентов
cat  /etc/openvpn/openvpn-status.log
Не забываем прокинуть порт 1091 udp на наш сервер на шлюзе и прописать маршруты на других хостах в случае необходимости.

На клиенте

Копируем в папку /etc/openvpn/ на клиенте следующий файлы из папки на сервере /etc/openvpn/easy-rsa/keys/:
client1.crt, client1.key, ca.crt, ta.key
Создаём конфиг клиента:
nano /etc/openvpn/client.conf
client
dev tun
proto udp
remote IP_адрес_сервера 1091
# Используем динамический порт для подключения
nobind
# Не перечитываем ключи при перезагрузке сервиса OpenVPN
persist-key
# Не перечитывает параметры туннеля при перезагрузке сервиса OpenVPN
persist-tun
# Пути к сертификатам
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
# Алгоритмы шифрования и хеширования как на сервере
cipher AES-256-CBC
auth SHA512
# Включаем tls-auth для аутентификации
key-direction 1
tls-auth /etc/openvpn/ta.key 1
# Включаем сжатие трафика
comp-lzo
# Уровень логирования
verb 3
# Логи если нужны
status /etc/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/append_openvpn.log
Пробуем запустить:
systemctl start openvpn@client
B случае, если все работает - а автозагрузку:
systemctl enable openvpn@client
Если требуется скачать openvpn клиента под Windows можно воспользоваться ссылкой.
В случае использования Windows, файл client.conf удобнее переименовать в client.ovpn и исправить в нем пути хранения логов. После этого конфиг с ключами положить в папку C:\Program Files\OpenVPN\config, а в настройках клиента указываем брать конфиги из этой папки.

Комментариев нет:

Отправить комментарий