Настройка Double VPN на Debian 10

TwinFoxer

Member
Пользователь
Регистрация
27 Фев 2025
Сообщения
19
Реакции
6

Настройка Double VPN на Debian 10​


Приступим к настрой double openvpn. Для этого нам потребуется 2 выделенных или виртуальных сервера, с установленной ОС Debian 10: Сервер А(К этому серверу будут подключаться клиенты)
с ip адресом 1.1.1.1 и сервер B (Этот сервер «смотрит» в Интернет) с ip адресом 2.2.2.2.

Перейдем к серверу B и начнем его настройку.

Обновим списки пакетов и установим все обновления:
Bash:
apt update && apt upgrade

Установим openvpn:
Bash:
apt install openvpn -y

Добавим группу nogroup и пользователя nobody, от имени этого пользователя будет работать openvpn.
Bash:
addgroup nogroup
adduser nobody
usermod -aG nogroup nobody

Теперь нам необходимо сгенерировать сертификаты для сервера и клиентов, для этого проверим где находятся утилита для генерации сертификатов:
Код:
whereis easy-rsa
easy-rsa: /usr/share/easy-rsa

Перейдем в каталог и приступим к генерации сертификатов для openvpn:
Код:
cd /usr/share/easy-rsa

Генерируем CA сертификат.
Код:
./easyrsa init-pki
./easyrsa build-ca nopass

Генерируем сертификат сервера:
Код:
./easyrsa build-server-full server nopass

Генерируем сертификат клиента:
Код:
./easyrsa build-client-full client nopass

Генерируем ключ Диффи-Хеллмана:
Код:
./easyrsa gen-dh

Генерируем ключ для tls авторизации:
Код:
openvpn --genkey --secret pki/tls.key

Сертификаты для openvpn готовы. Теперь нам необходимо создать папку /etc/openvpn/keys/, в нее мы поместим серверные сертификаты:
Bash:
mkdir /etc/openvpn/keys
cp -R pki/ca.crt /etc/openvpn/keys/
cp -R pki/dh.pem /etc/openvpn/keys/
cp -R pki/tls.key /etc/openvpn/keys/
cp -R pki/private/server.key /etc/openvpn/keys/
cp -R pki/issued/server.crt /etc/openvpn/keys/

И нам необходимо подготовить клиентские сертификаты для передачи на сервер А.
Bash:
mkdir client-keys
cp -R pki/ca.crt client-keys/
cp -R pki/dh.pem client-keys/
cp -R pki/tls.key client-keys/
cp -R pki/private/client.key client-keys/
cp -R pki/issued/client.crt client-keys/
tar -cvf client.tar client-keys

Отправляем подготовленные сертификаты на сервер А:
Bash:
scp client.tar root@1.1.1.1:/root/

Теперь нам осталось создать файл конфигурации на сервере B:
Bash:
nano /etc/openvpn/server.conf

С содержимым:
Код:
port 443
dev tun0
proto tcp-server
ifconfig 192.168.1.1 192.168.1.2
tls-server
daemon
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh.pem
tls-auth /etc/openvpn/keys/tls.key 0
cipher AES-256-CBC
max-clients 1
persist-key
persist-tun
script-security 3
keepalive 10 120
log /dev/null
comp-lzo
sndbuf 0
rcvbuf 0
up /etc/openvpn/keys/up.sh
down /etc/openvpn/keys/down.sh
user nobody
group nogroup

Создадим up\down скрипты для настройки маршрутизации трафика. Необходимо отредактировать параметры -o ens3 и —to-source 2.2.2.2
Bash:
nano /etc/openvpn/keys/up.sh

Bash:
#!/bin/sh
ip route add 10.8.0.0/24 via 192.168.1.2 dev tun0
iptables -t nat -A POSTROUTING --src 10.8.0.0/24 -o ens3 -j SNAT --to-source 2.2.2.2
echo 1 > /proc/sys/net/ipv4/ip_forward

Код:
nano /etc/openvpn/keys/down.sh

Bash:
#!/bin/sh
ip route del 10.8.0.0/24 via 192.168.1.2 dev tun0
iptables -D POSTROUTING -t nat --src 10.8.0.0/24 -o ens3 -j SNAT --to-source 2.2.2.2

Дадим им права на выполнение:
Bash:
chmod +x /etc/openvpn/keys/up.sh
chmod +x /etc/openvpn/keys/down.sh

Добавим openvpn в автозагрузку:
Код:
systemctl enable openvpn@server

Запустим openvpn:
Код:
systemctl start openvpn@server

На этом настройка сервера B завершена, переходим к настройке сервера А.




Обновим списки пакетов и установим все обновления:
Код:
apt update && apt upgrade

Установим openvpn:
Код:
apt install openvpn -y

Добавим группу nogroup и пользователя nobody, от имени этого пользователя будет работать openvpn.
Код:
addgroup nogroup
adduser nobody
usermod -aG nogroup nobody

В каталоге /root у нас лежит архив с клиентскими сертификатами, распакуем его в /etc/openvpn
Код:
tar -xvf /root/client.tar -C /etc/openvpn/

И создаем файл конфигурации, чтобы соединить 2 сервера между собой.
Код:
nano /etc/openvpn/client.conf

С содержимым:
Код:
dev tun1
remote 2.2.2.2
port 443
proto tcp-client
ifconfig 192.168.1.2 192.168.1.1
tls-client
daemon
script-security 2
remote-cert-tls server
ca /etc/openvpn/client-keys/ca.crt
cert /etc/openvpn/client-keys/client.crt
key /etc/openvpn/client-keys/client.key
dh /etc/openvpn/client-keys/dh.pem
tls-auth /etc/openvpn/client-keys/tls.key 1
cipher AES-256-CBC
persist-key
persist-tun
log /dev/null
verb 0
up /etc/openvpn/client-keys/up.sh
down /etc/openvpn/client-keys/down.sh
comp-lzo
tun-mtu 1500
user nobody
group nogroup

Создадим up\down скрипты для настройки маршрутизации трафика.
Код:
nano /etc/openvpn/client-keys/up.sh

Код:
#!/bin/sh
ip route add default via 192.168.1.1 dev tun1 table 10
ip rule add from 10.8.0.0/24 lookup 10 pref 10
echo 1 > /proc/sys/net/ipv4/ip_forward

Код:
nano /etc/openvpn/client-keys/down.sh

Код:
#!/bin/sh
ip route del default via 192.168.1.1 dev tun1 table 10
ip rule del from 10.8.0.0/24 lookup 10 pref 10

Дадим им права на выполнение:
Bash:
chmod +x /etc/openvpn/client-keys/up.sh
chmod +x /etc/openvpn/client-keys/down.sh

Добавим в автозагрузку и запустим openvpn
Код:
systemctl enable openvpn@client
systemctl start openvpn@client

Необходимо проверить как у нас поднялся тонель, попингуем внутренний адрес 192.168.1.1
Bash:
ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.741 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.842 ms
64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=1.32 ms

Если ping проходит то все отлично, продолжаем. Если нет — необходимо найти причину почему не установилась связь между двумя серверами.

Генерируем сертификаты для сервера и клиентов, для этого проверим где находятся утилита для генерации сертификатов:
Код:
whereis easy-rsa
easy-rsa: /usr/share/easy-rsa

Перейдем в каталог и приступим к генерации сертификатов для openvpn:
Код:
cd /usr/share/easy-rsa

Генерируем CA сертификат.
Код:
./easyrsa init-pki
./easyrsa build-ca nopass

Генерируем сертификат сервера:
Код:
./easyrsa build-server-full server nopass

Генерируем сертификаты клиентов меняя common name (client01):
Код:
./easyrsa build-client-full client01 nopass

Генерируем ключ Диффи-Хеллмана:
Код:
./easyrsa gen-dh

Генерируем ключ для tls авторизации:
Код:
openvpn --genkey --secret pki/tls.key

Сертификаты для openvpn готовы. Теперь нам необходимо создать папку /etc/openvpn/keys/, в нее мы поместим серверные сертификаты:
Код:
mkdir /etc/openvpn/keys
cp -R pki/ca.crt /etc/openvpn/keys/
cp -R pki/dh.pem /etc/openvpn/keys/
cp -R pki/tls.key /etc/openvpn/keys/
cp -R pki/private/server.key /etc/openvpn/keys/
cp -R pki/issued/server.crt /etc/openvpn/keys/

Создадим файл для хранения присвоенных внутренних адресов клиентам:
Код:
touch /etc/openvpn/keys/ipp.txt

Созадем конфигурационный файл для openvpn:
Код:
nano /etc/openvpn/server.conf

С содержимым:
Bash:
port 443
proto tcp
dev tun
sndbuf 0
rcvbuf 0
ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh.pem
auth SHA512
tls-auth keys/tls.key 0
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist keys/ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
verb 0

Добавляем сервис openvpn в автозагрузку:
Код:
systemctl enable openvpn@server

И запускаем его:
Код:
systemctl start openvpn@server

Подготовим клиентские сертификаты, для каждого клиента создадим отдельную папку, и туда поместим сертификаты:
Bash:
mkdir /root/client01
cp -R pki/ca.crt /root/client01/
cp -R pki/dh.pem /root/client01/
cp -R pki/tls.key /root/client01/
cp -R pki/private/client01.key /root/client01/
cp -R pki/issued/client01.crt /root/client01/

Скачиваем клиентские сертификаты из папки /root/ и создаем файл конфигурации для клиента со следующим содержимым(Не забудьте исправить параметр remote и указать Ваш ip адрес):
Код:
client
dev tun
proto tcp
remote 1.1.1.1 443
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
ca ca.crt
cert client01.crt
key client01.key
tls-auth tls.key 1
dh dh.pem

Поздравляю. Настройка double openvpn на этом закончена.​

 
Сверху