Files
openvpn_infrastructure/README.md

102 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Схема следующа. OpenVPN-сервер находится в РФ, к нему подключаютсся клиенты, а также шлюз, через который идёт весь трафик. Обязательно использование режима DCO (Data channel offloading) для OpenVPN-интерфейсов клиента и шлюза, т.к. при включении этого режима производительность увеличивается драматически. Поэтому использование готовых скриптов типа github/angristan нам не подходит, будем поднимать всё ручками. Для начала нам нужно два сервера - в РФ и в забугорище. Оба подготавливаем идентично:
```
apt update && apt dist-upgrade -y
```
Если произошёл апгрейд ядра, нужно обязательно перезагрузиться, т.к. в дальнейшем мы будем устанавливать расширения ядра.
```
reboot
```
Когда перезагрузились, устанавливаем необходимые пакеты:
```
apt install -y openvpn openvpn-dco-dkms easy-rsa
```
Далее включаем модуль openvpn-dco:
```
modprobe ovpn-dco-v2
```
Проверяем, включилось ли:
```
lsmod | grep ovpn
```
Если вывод пуст, разбираемся.
Если вывод что-то типа
> ovpn_dco_v2 86016 0
> ip6_udp_tunnel 16384 1 ovpn_dco_v2
> udp_tunnel 32768 1 ovpn_dco_v2
То всё хорошо, можно примменять на постоянку:
```
echo "ovpn-dco-v2" | sudo tee -a /etc/modules
```
```
update-initramfs -u -k all
```
Можно ещё раз перезагрузиться и проверить наличие dco-модуля после перезагрузки `lsmod | grep ovpn`
Теперь приступим к настройке OpenVPN-сервера.
Инициализируем инфраструктуру открытых ключей и выпускаем сертификат сервера (без паролей для автозапуска):
```
make-cadir ~/openvpn-ca && cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
# Генерация и подписание ключей сервера
./easyrsa gen-req server nopass
./easyrsa sign-req server server
# Генерация секретного ключа защиты от сканирования (TLS-Crypt)
openvpn --genkey secret tls-crypt.key
```
Копируем ключи в рабочую директорию OpenVPN-сервера:
```
cp pki/ca.crt pki/dh.pem pki/issued/server.crt pki/private/server.key tls-crypt.key /etc/openvpn/server/
```
Создаём конфиг сервера:
```
nano /etc/openvpn/server/server.conf
```
Вставляем следующее содержимое:
```
dev tun
proto udp
port 1194
server 10.210.0.0 255.255.255.0
topology subnet
# Сертификаты и секреты
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
tls-crypt /etc/openvpn/server/tls-crypt.key
# Максимальная скорость (Только AES-128-GCM, без сжатия)
data-ciphers AES-128-GCM
data-ciphers-fallback AES-128-GCM
# Логирование (минимум операций, разгрузка CPU)
verb 1
mute 20
# Тайм-ауты и папка индивидуальных настроек
keepalive 10 120
persist-key
persist-tun
client-config-dir /etc/openvpn/server/ccd
# Маршрут по умолчанию для клиентов
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
```
Далее необходимо создать на сервере конфиг, в котором описаны директивы, затрагивающие конкретный клиент. Имя такого файла должно соответствовать сертификату клиента (без расширения) и находиться в client-config-dir (у нас /etc/openvpn/server/ccd). Это аналог Client Specific Overrides в pFsense. В нашем случае таким клиентом будет шлюз в забугорище. Присвоим ему адрес в конце нашего диапазона и обязательно отменим перенаправление трафика в туннелль:
```
sudo mkdir -p /etc/openvpn/server/ccd
echo "ifconfig-push 10.210.0.254 255.255.255.0" | sudo tee /etc/openvpn/server/ccd/special-gateway
echo 'push-remove "redirect-gateway def1 bypass-dhcp"' | sudo tee -a /etc/openvpn/server/ccd/special-gateway
```
```
ip -details link show dev tun0
```