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

admin 27.10.2019 6

Приступим к настрой double openvpn. Для этого нам потребуется 2 выделенных или виртуальных сервера, с установленной ОС Debian 10: Сервер А(К этому серверу будут подключаться клиенты) с ip адресом 1.1.1.1 и сервер B (Этот сервер «смотрит» в Интернет) с ip адресом 2.2.2.2.
Перейдем к серверу B и начнем его настройку.
Обновим списки пакетов и установим все обновления:
apt update && apt upgrade
Установим openvpn:
apt install openvpn -y
Добавим группу nogroup и пользователя nobody, от имени этого пользователя будет работать openvpn.
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/, в нее мы поместим серверные сертификаты:
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/

И нам необходимо подготовить клиентские сертификаты для передачи на сервер А.
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

Отправляем подготовленные сертификаты на сервер А:
scp client.tar root@1.1.1.1:/root/
Теперь нам осталось создать файл конфигурации на сервере B:
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
nano /etc/openvpn/keys/up.sh
#!/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
#!/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

Дадим им права на выполнение:
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

Дадим им права на выполнение:
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
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
С содержимым:
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

Подготовим клиентские сертификаты, для каждого клиента создадим отдельную папку, и туда поместим сертификаты:
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 на этом закончена.

Тэги:

Оцените статью

средняя оценка 5 / 5. оценок 1

No votes so far! Be the first to rate this post.

Возможно вам понравится

6 Комментариев
  • Роман 12 Ноя. 2019

    Подскажите пожалуйста,что вписывать вместо 192.168.1.X, и с ens3 непонятно, также на сервере A внутренний ip диапазон нестандартный 10.4.3.127/24… две впс дебиан 10, установка на пустую.
    Дошел до пинга (ping 192.168.1.1) и понял, что надо что-то другое вписывать вместо 192.168.1.1 в конфигах и настройках firewals, пробую, не получается, пинг не проходит.

    ifconfig сервер B:
    ens3: flags=4163 mtu 1500
    inet 198.X.179.2 netmask 255.255.248.0 broadcast 198.X.183.255
    inet6 fe80::5016:ff:feec:384a prefixlen 64 scopeid 0x20
    ether 52:16:00:ec:38:4a txqueuelen 1000 (Ethernet)
    RX packets 251784 bytes 29211513 (27.8 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 66988 bytes 10230327 (9.7 MiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    lo: flags=73 mtu 65536
    inet 127.0.0.1 netmask 255.0.0.0
    inet6 ::1 prefixlen 128 scopeid 0x10
    loop txqueuelen 1000 (Local Loopback)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 0 bytes 0 (0.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    tun0: flags=4305 mtu 1500
    inet 10.8.0.1 netmask 255.255.255.0 destination 10.8.0.1
    inet6 fe80::998a:4840:df4c:5353 prefixlen 64 scopeid 0x20
    unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 100 (UNSPEC)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 23 bytes 1104 (1.0 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
    ====================================================================
    ifconfig сервер A:
    eth0: flags=4163 mtu 1500
    inet 84.X.90.87 netmask 255.255.252.0 broadcast 84.X.91.255
    inet6 fe80::f82c:ddff:fe14:4f00 prefixlen 64 scopeid 0x20
    ether fa:2c:dd:14:4f:00 txqueuelen 1000 (Ethernet)
    RX packets 990 bytes 112576 (109.9 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 931 bytes 188055 (183.6 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    eth1: flags=4163 mtu 1500
    inet 10.4.3.127 netmask 255.255.252.0 broadcast 10.4.3.255
    inet6 fe80::f82c:ddff:fe14:f0a4 prefixlen 64 scopeid 0x20
    ether fa:2c:dd:14:f0:a4 txqueuelen 1000 (Ethernet)
    RX packets 16 bytes 1712 (1.6 KiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 16 bytes 1732 (1.6 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    eth2: flags=4163 mtu 1500
    inet6 fe80::f83c:ddff:fe24:4f1a prefixlen 64 scopeid 0x20
    inet6 2a04:3572:1000:980:f22c:ddff:fe14:4f1a prefixlen 64 scopeid 0x0
    ether fa:2c:dd:14:4f:1a txqueuelen 1000 (Ethernet)
    RX packets 8510 bytes 83130512 (79.2 MiB)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 2125 bytes 190219 (185.7 KiB)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    lo: flags=73 mtu 65536
    inet 127.0.0.1 netmask 255.0.0.0
    inet6 ::1 prefixlen 128 scopeid 0x10
    loop txqueuelen 1000 (Local Loopback)
    RX packets 0 bytes 0 (0.0 B)
    RX errors 0 dropped 0 overruns 0 frame 0
    TX packets 0 bytes 0 (0.0 B)
    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    Ответить
  • Роман 12 Ноя. 2019

    Спасибо за инструктаж, просидел часов 12, разобрался, в моем случае надо было изменить порт на UDP и прописать вместо ens3 -> etho0

    Ответить
  • Роман 12 Ноя. 2019

    рано обрадовался, перезагрузиля конфиги скачал, и нэт интернета, жалуется на днс(выбирал локальные под номером 1) и еще на что то systemctl все перезапускал, пинга опять нет, что может быть еще?, проверял запуском с терминала:

    Unrecognized option or missing or extra parameter(s) in double.ovpn:13: block-outside-dns (2.4.7)
    Tue Nov 12 17:37:10 2019 WARNING: Ignoring option ‘dh’ in tls-client mode, please only include this in your server configuration
    Tue Nov 12 17:37:10 2019 OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
    Tue Nov 12 17:37:10 2019 library versions: OpenSSL 1.1.1d 10 Sep 2019, LZO 2.10
    Tue Nov 12 17:37:10 2019 Outgoing Control Channel Authentication: Using 512 bit message hash ‘SHA512’ for HMAC authentication
    Tue Nov 12 17:37:10 2019 Incoming Control Channel Authentication: Using 512 bit message hash ‘SHA512’ for HMAC authentication
    Tue Nov 12 17:37:10 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]94.237.77.103:443
    Tue Nov 12 17:37:10 2019 Socket Buffers: R=[212992->212992] S=[212992->212992]
    Tue Nov 12 17:37:10 2019 UDP link local: (not bound)
    Tue Nov 12 17:37:10 2019 UDP link remote: [AF_INET]94.237.77.103:443
    Tue Nov 12 17:37:10 2019 TLS: Initial packet from [AF_INET]94.237.77.103:443, sid=79f46946 9e35d59c
    Tue Nov 12 17:37:10 2019 VERIFY OK: depth=1, CN=server
    Tue Nov 12 17:37:10 2019 VERIFY KU OK
    Tue Nov 12 17:37:10 2019 Validating certificate extended key usage
    Tue Nov 12 17:37:10 2019 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
    Tue Nov 12 17:37:10 2019 VERIFY EKU OK
    Tue Nov 12 17:37:10 2019 VERIFY OK: depth=0, CN=server
    Tue Nov 12 17:37:11 2019 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 2048 bit RSA
    Tue Nov 12 17:37:11 2019 [server] Peer Connection Initiated with [AF_INET]94.237.77.103:443
    Tue Nov 12 17:37:12 2019 SENT CONTROL [server]: ‘PUSH_REQUEST’ (status=1)
    Tue Nov 12 17:37:12 2019 PUSH: Received control message: ‘PUSH_REPLY,redirect-gateway def1 bypass-dhcp,dhcp-option DNS 1.1.1.1,dhcp-option DNS 1.0.0.1,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.255.0,peer-id 0,cipher AES-256-GCM’
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: timers and/or timeouts modified
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: —ifconfig/up options modified
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: route options modified
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: route-related options modified
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: —ip-win32 and/or —dhcp-option options modified
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: peer-id set
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: adjusting link_mtu to 1624
    Tue Nov 12 17:37:12 2019 OPTIONS IMPORT: data channel crypto options modified
    Tue Nov 12 17:37:12 2019 Data Channel: using negotiated cipher ‘AES-256-GCM’
    Tue Nov 12 17:37:12 2019 Outgoing Data Channel: Cipher ‘AES-256-GCM’ initialized with 256 bit key
    Tue Nov 12 17:37:12 2019 Incoming Data Channel: Cipher ‘AES-256-GCM’ initialized with 256 bit key
    Tue Nov 12 17:37:12 2019 ROUTE_GATEWAY 192.168.0.1/255.255.255.0 IFACE=wlan0 HWADDR=cc:af:78:97:f1:87
    Tue Nov 12 17:37:12 2019 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
    Tue Nov 12 17:37:12 2019 Exiting due to fatal error

    Ответить
  • Роман 12 Ноя. 2019

    В общем сейчас опять переустановился, на вирте запустил с виндой, и показывает, что в нате я есть с ip 10.8.0.2, естественно интернета нет, подскажите где ошибка здесь? пинг локальный проходит с обоих сторон.

    Ответить
  • Дмитрий 23 Дек. 2019

    Остановился на Генерируем CA сертификат.
    ./easyrsa init-pki
    При Выполнении команда сообщается об ошибке No such file or directory отсутствие файла в директории.
    Всё выполнял по вышеописанному образцу.

    Ответить
  • den 02 Янв. 2020

    Вот в этой папке /usr/share/easy-rsa
    покажите вывод ls -la

    Ответить

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

Ваш email не будет опубликован.