У меня остался один сервис который развернут на CloudLite – это OpenVPN сервис служащий для доступа из вне к домашним ресурсам и сервису персонального хранения наработок, а именно на базе OwnCloud. Ранее он был описан в заметке "Доступ к ЛВС через OpenVPN на Ubuntu 20.04 за Mikrotik". В четверг 07.12.2023 я получил на почту "Уведомление о завершении работы сервиса", до этого я уже с 25.11.2023 по сей день перенес свои блоги, сервис удаленной помощи Aspia и т.д. на ресурсы AdminVPS, т.к. практика взаимодействия с поддержкой и требованиями к VPS системами меня устраивают полностью. Не то что было с CloudLite.

Увы CloudLITE закрывается, переносим сервис на AdminVPS

И вот ниже заметка по тому, как с нуля развернуть сервис OpenVPN на Ubuntu 22.04 Server с характеристиками: CPU = 1, RAM = 2Gb, NVMe 30Gb + статический WAN IP + бесплатный бекап раз в неделю для виртуальных машин у которых размер диска меньше 200Gb. После того я как его развернул, создал конфигурационный файл ovpn проверил что подключаюсь, подключаюсь из вне к домашним ресурсам изменил DNS запись на новый сервер дабы при обращении по DNS имени получать доступ через новое подключение.

План:

  • Обновляем систему до самого актуального состояния в рамках текущего релиза
  • Вношу изменения в SSH сервис (Доступ по порту отличному от стандартного и доступ на основе ключей)
  • Устанавливаем Firewalld
  • Устанавливаем nginx (для Proxy pass к сервису за Mikrotik)
  • Устанавливаем OpenVPN через скрипт (openvpn-ubuntu-install.sh)
  • Копирую ключи на домашний Mikrotik RB2011UiAS-2HnD or CHR
  • Создаю интерфейс OpenVPN Client на Mikrotik RB2011UiAS-2HnD or CHR

Приступаю к реализации…

Шаг №1: Применена заметка: "Шаблон базовой защиты для Mikrotik"

Шаг №2: Обновляю систему до самого актуального состояния в рамках текущего LTS релиза:

ekzorchik@srv-vpn:~$ sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
ekzorchik@srv-vpn:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-vpn:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
ekzorchik@srv-vpn:~$ sudo reboot
ekzorchik@srv-vpn:~$ uname -a && lsb_release -a
Linux srv-vpn 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy
ekzorchik@srv-vpn:~$

Шаг №3: Настраиваем SSH сервис on VPS системе:

ekzorchik@srv-vpn:~$ sudo addgroup --group sshauth
ekzorchik@srv-vpn:~$ sudo useradd -m  -s /bin/bash -u 5000 -U ekzorchik
ekzorchik@srv-vpn:~$ sudo usermod -aG sshauth ekzorchik
ekzorchik@srv-vpn:~$ sudo nano /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
Port 22400
PermitRootLogin no
AllowTcpForwarding yes
PubkeyAuthentication yes
AuthorizedKeysFile      /etc/ssh/authorized_keys
PasswordAuthentication yes
PermitEmptyPasswords no
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp  /usr/lib/openssh/sftp-server
AllowGroups sshauth
ekzorchik@srv-vpn:~$ sudo service ssh restart

После нажимаем Ctrl + O, Enter – Ctrl + X (для выхода из редактора)

На заметку: ключи для SSH создаю опираясь на заметку "Подключение к серверу Ubuntu 20.04 Server через Putty + Public Key"

если буду через ключ, созданный посредством PuttyGen подключаться к Ubuntu системы, то смотреть в заметку: "Ключ PPK и на Windows и на Ubuntu системах"

Шаг №4: Устанавливаем Firewalld: (в системе Firewalld версии 1.1.1)

sudo ufw disable
sudo apt-get install -y firewalld net-tools
sudo systemctl enable firewalld
sudo systemctl start firewalld
sudo firewall-cmd --state
running
ip r | awk '{print $5}' | head -n1
ens18
sudo firewall-cmd --zone public --change-interface=ens18 --permanent
sudo firewall-cmd --reload
ekzorchik@srv-vpn:~$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens18
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:
ekzorchik@srv-vpn:~$ sudo firewall-cmd --zone=public --add-port=22400/tcp --permanent
success
ekzorchik@srv-vpn:~$ sudo firewall-cmd --zone=public --remove-service=ssh --permanent
success
ekzorchik@srv-vpn:~$ sudo firewall-cmd --reload
success
ekzorchik@srv-vpn:~$

Шаг №5: Скачиваю скрипт через который буду поднимать OpenVPN сервер на системе Ubuntu 22.04 Server:

закинул себе скрипт на ekzorchik.ru

ekzorchik@ekzorchik:~$ wget --no-check-certificate https://ekzorchik.ru/out/openvpn-ubuntu-install.sh

ekzorchik@srv-vpn:~$ chmod +x openvpn-ubuntu-install.sh

Шаг №6: Изменяю в установочном скрипте сеть OpenVPN с дефолтной 10.8.0.0/24 на 10.9.0.0/24:

ekzorchik@srv-vpn:~$ nano openvpn-ubuntu-install.sh
Search (to replace) [10.8.0.0]: 10.8.0.0

Replace with: 10.9.0.0

Replace this instance? A (All)

Replaced 21 occurrences

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора)

Шаг №7: Разворачиваю через скрипт сервис OpenVPN:

На заметку: Т.к. у меня текущий VPN на базе OpenVPN будет работать с домашним Mikrotik, а у него клиент умеет работать только по tcp.

ekzorchik@srv-vpn:~$ sudo ./openvpn-ubuntu-install.sh
Welcome to this OpenVPN road warrior installer!

Which protocol should OpenVPN use?
   1) UDP (recommended)
   2) TCP
Protocol [1]: 2
What port should OpenVPN listen to?
Port [1194]: 1194
Select a DNS server for the clients:
   1) Current system resolvers
   2) Google
   3) 1.1.1.1
   4) OpenDNS
   5) Quad9
   6) AdGuard
DNS server [1]: 2
Enter a name for the first client:
Name [client]: mikrotik

OpenVPN installation is ready to begin.
Press any key to continue... и нажимаю клавишу ENTER после чего начинается установка и формирование клиентского конфигурационного файла на подключение
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/server/easy-rsa/pki/reqs/mikrotik.req
* key: /etc/openvpn/server/easy-rsa/pki/private/mikrotik.key

Using configuration from /etc/openvpn/server/easy-rsa/pki/openssl-easyrsa.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'mikrotik'
Certificate is to be certified until Nov 24 06:59:38 2033 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated

Notice
------
Certificate created at:
* /etc/openvpn/server/easy-rsa/pki/issued/mikrotik.crt

Notice
------
Inline file created:
* /etc/openvpn/server/easy-rsa/pki/inline/mikrotik.inline

No Easy-RSA 'vars' configuration file exists!

Using SSL:
* openssl OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
Using configuration from /etc/openvpn/server/easy-rsa/pki/openssl-easyrsa.cnf

Notice
------
An updated CRL has been created:
* /etc/openvpn/server/easy-rsa/pki/crl.pem

2023-11-27 09:59:38 WARNING: Using --genkey --secret filename is DEPRECATED.  Use --genkey secret filename instead.
success
success
success
success
success
success
Created symlink /etc/systemd/system/multi-user.target.wants/openvpn-server@server.service → /lib/systemd/system/openvpn-server@.service.

Finished!

The client configuration is available in: /root/mikrotik.ovpn
New clients can be added by running this script again.
ekzorchik@srv-vpn:~$
ekzorchik@srv-vpn:~$ sudo systemctl status openvpn
● openvpn.service - OpenVPN service
     Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2023-11-27 09:59:33 MSK; 31min ago
   Main PID: 2473 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Nov 27 09:59:33 srv-vpn systemd[1]: Starting OpenVPN service...
Nov 27 09:59:33 srv-vpn systemd[1]: Finished OpenVPN service.
ekzorchik@srv-vpn:~$ sudo ss -lutp | grep openvpn
tcp   LISTEN 0      32           172.33.33.130:openvpn      0.0.0.0:*    users:(("openvpn",pid=2770,fd=6))    
ekzorchik@srv-vpn:~$

Шаг №8: Отправляю систему Ubuntu 22.04 Server в перезагрузку:

ekzorchik@srv-vpn:~$ sudo reboot

Шаг №9: В Firewalld добавляю порт 1194/tcp, но порт уже добавлен, значит добавлен скриптом, не мною:

ekzorchik@srv-nas:~$ ssh -l ekzorchik 172.33.33.130 -p 22400
ekzorchik@srv-vpn:~$ sudo firewall-cmd --zone=public --add-port=1194/tcp --permanent
Warning: ALREADY_ENABLED: 1194:tcp
success
ekzorchik@srv-vpn:~$

Шаг №10: Подключаюсь по SSH к VPS системе Ubuntu 22.04 Server:

root@ekzorchik:~# ssh -l ekzorchik 172.33.33.130 -p 22400

Шаг №11: Произвожу настройку конфигурационного файла server.conf на VPS системе Ubuntu 22.04 Server:

ekzorchik@srv-vpn:~$ sudo mkdir /etc/openvpn/backup
ekzorchik@srv-vpn:~$ sudo mv /etc/openvpn/server/server.conf /etc/openvpn/backup/server.conf.backup
ekzorchik@srv-vpn:~$ sudo nano /etc/openvpn/server/server.conf
port 1194
proto tcp
dev tun0
#duplicate-cn
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
#for openvpn network
server 10.9.0.0 255.255.255.0
#Access from 10.9.0.0 k Resource from 10.90.90.0
push "route 10.90.90.0 255.255.255.0"

push "redirect-gateway def1"

#Gateway k network client
route 10.90.90.0 255.255.255.0 10.9.0.1

#Назначаем IP адрес клиентам явно
ifconfig-pool-persist /etc/openvpn/ipp.txt
#укажем путь к настройке сетей клиентов
client-config-dir /etc/openvpn/ccd
client-to-client

#push "dhcp-option DNS 8.8.8.8"
#push "dhcp-option DNS 8.8.4.4"

keepalive 10 120
cipher AES-128-CBC
auth SHA1
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
verb 4
#explicit-exit-notify 1
#tls-auth ta.key 0 # This file is secret
#crl-verify /etc/openvpn/crl.pem

tcp-queue-limit 64

После нажимаем Ctrl + O, Enter - Ctrl + X (для выхода из редактора)

ekzorchik@srv-vpn:~$ sudo touch /var/log/openvpn/openvpn-status.log

ekzorchik@srv-vpn:~$ sudo touch /var/log/openvpn/openvpn.log

ekzorchik@srv-vpn:~$ sudo mkdir /etc/openvpn/ccd

ekzorchik@srv-vpn:~$ sudo nano /etc/openvpn/ccd/mikrotik

iroute 10.90.90.0 255.255.255.0

ekzorchik@srv-vpn:~$ sudo systemctl restart openvpn && sudo systemctl status openvpn | head -n5

● openvpn.service - OpenVPN service

     Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)

     Active: active (exited) since Mon 2023-11-27 10:51:22 MSK; 12ms ago

    Process: 3043 ExecStart=/bin/true (code=exited, status=0/SUCCESS)

   Main PID: 3043 (code=exited, status=0/SUCCESS)

ekzorchik@srv-vpn:~$

Шаг №12: Файлы для клиента Mikrotik

ekzorchik@srv-vpn:~$ sudo ./openvpn-ubuntu-install.sh
OpenVPN is already installed.

Select an option:
   1) Add a new client
   2) Revoke an existing client
   3) Remove OpenVPN
   4) Exit
Option: 2

Select the client to revoke:
     1) mikrotik
Client:
lient: ^C (через сочетание Ctrl + C прерываем выполнение скрипта)
ekzorchik@srv-vpn:~$
ekzorchik@srv-vpn:~$ sudo ls /etc/openvpn/server/easy-rsa/pki/issued/
mikrotik.crt  server.crt
ekzorchik@srv-vpn:~$
ekzorchik@srv-vpn:~$ sudo bash -c "cat /etc/openvpn/server/easy-rsa/pki/inline/mikrotik.inline"
<cert>
</cert>
<key>
</key>
<ca>
</ca>

Выношу crt & key сертификаты клиента как отдельные файлы:

ekzorchik@srv-vpn:~$ sudo cp /etc/openvpn/server/easy-rsa/pki/issued/mikrotik.crt ~/mikrotik.crt

На заметку:

  • В файле mikrotik.crt должно содержимое в тегах BEGIN CERTIFICATE & END CERTIFICATE включая эти теги.
  • В файле mikrotik.key должно содержимое в тегах BEGIN CERTIFICATE & END CERTIFICATE включая эти теги
ekzorchik@srv-vpn:~$ sudo chown ekzorchik:ekzorchik mikrotik.crt
ekzorchik@srv-vpn:~$ scp -P 22400 mikrotik.{crt,key} mikrotik@172.33.33.112:/
mikrotik@172.33.33.112's password:
mikrotik.crt: Permission denied
lost connection
ekzorchik@srv-vpn:~$ ls
dproject  mikrotik.crt  mikrotik.key  openvpn-ubuntu-install.sh
ekzorchik@srv-vpn:~$ ls -l
total 40
drwxrwxr-x 3 ekzorchik ekzorchik  4096 Apr 20  2023 dproject
-rw------- 1 root      root       4495 Nov 27 11:10 mikrotik.crt
-rw-r--r-- 1 root      root       1704 Nov 27 11:11 mikrotik.key
-rwxrwxr-x 1 ekzorchik ekzorchik 23714 Nov 27 09:51 openvpn-ubuntu-install.sh
ekzorchik@srv-vpn:~$ sudo chown -R ekzorchik:ekzorchik /home/ekzorchik/

Копирую файлы mikrotik.crt & mikrotik.key На Mikrotik самым безопасным способом, который у Вас есть

ekzorchik@srv-vpn:~$ scp mikrotik.{crt,key} mikrotik@172.33.33.112:/
mikrotik@172.33.33.112's password:
mikrotik.crt                                                                100% 4495     6.9MB/s   00:00
mikrotik.key                                                                100% 1704     4.4MB/s   00:00
ekzorchik@srv-vpn:~$

Шаг №13: Подключаюсь к Mikrotik (MikroTik RouterOS 7.11.2) по SSH (из доверенной системы) и выполняю команды импортирования клиентских ключей:

ekzorchik@srv-vpn:~$ ssh -l mikrotik 172.33.33.112
[mikrotik@MikroTik] > certificate/import file-name=mikrotik.crt
passphrase: и нажимаю клавишу ENTER
     certificates-imported: 1
     private-keys-imported: 0
            files-imported: 1
       decryption-failures: 0
  keys-with-no-certificate: 0

[mikrotik@MikroTik] > certificate/import file-name=mikrotik.key
passphrase: и нажимаю клавишу ENTER
     certificates-imported: 0
     private-keys-imported: 1
            files-imported: 1
       decryption-failures: 0
  keys-with-no-certificate: 0

[mikrotik@MikroTik] >
[mikrotik@MikroTik] > quit
interrupted
Connection to 172.33.33.112 closed.
ekzorchik@srv-vpn:~$

Шаг №14: Настраиваю подключение Mikrotik к OpenVPN сервису системы Ubuntu 22.04 Server:

winbox - IP:8291 - user&pass - Interface - Add - OpenVPN Client

вкладка General

  • Name: openvpn

вкладка Dial Out

  • Connect To: 172.33.33.130
  • Port: 1194
  • Model: ip
  • Protocol: tcp
  • User: mikrotik
  • Profile: default
  • Certificate: mikrotik.crt_0
  • TLS Version: any
  • Auth: sha1
  • Cipher: aes 128 cbc
  • Use Peer DNS: yes
  • Add Default Route: Галочку не ставлю
  • Don't Add Pushed Routes (route-nopull): галочку не ставлю

и нажимаю Apply, OK

Шаг №15: на Микротике нужно создать правило masquerade

winbox - IP:8291 - user&pass - IP - Firewall – вкладка NAT - Add -

вкладка General

  • Chain: srcnat
  • Out. Interface: openvpn

вкладка Action

  • Action: masquerade

и нажимаю Apply, OK.

[mikrotik@MikroTik] > ip firewall/nat/add chain=srcnat out-interface=openvpn action=masquerade

Шаг №16: Проверяю, а поднялось ли соединение:

[mikrotik@MikroTik] > ip address/print
Flags: D - DYNAMIC
Columns: ADDRESS, NETWORK, INTERFACE
#   ADDRESS           NETWORK      INTERFACE
0   10.90.90.2/24     10.90.90.0   bridge1
1   20.20.20.5/24     20.20.20.0   vpsvpnclient
2 D 172.33.33.112/24  172.33.33.0  ether1
3 D 10.9.0.6/32       10.9.0.5     openvpn
[mikrotik@MikroTik] >

Проверяю на Mikrotik, а поднялось ли соединение

[mikrotik@MikroTik] > interface/ovpn-client/monitor openvpn
    status: connected
    uptime: 2m7s
  encoding: AES-128-CBC/SHA1
       mtu: 1500

[mikrotik@MikroTik] >

OpenVPN Client на Mikrotik успешно подключился к Ubuntu 22.04 Server (OpenVPN Server)

Т.е. соединение установлено.

Шаг №17: Проверяю, что с Mikrotik(а) вижу OpenVPN-сервер:

[admin@MikroTik] > ping 10.9.0.1
  SEQ HOST                                     SIZE TTL TIME       STATUS        
    0 10.9.0.1                                   56  64 617us     
    1 10.9.0.1                                   56  64 570us     
    2 10.9.0.1                                   56  64 591us     
    sent=3 received=3 packet-loss=0% min-rtt=570us avg-rtt=592us max-rtt=617us 

[admin@MikroTik] >

Шаг №18: Проверяю, как идет подключение из сети 10.90.90.0/24 до узла к примеру, ya.ru

пакеты ходят

Шаг №19: Проверяю, что с srv-vpn вижу адреса 10.90.90.0/24

ekzorchik@srv-vpn:~$ ping 10.90.90.10
PING 10.90.90.10 (10.90.90.10) 56(84) bytes of data.
64 bytes from 10.90.90.10: icmp_seq=1 ttl=127 time=0.697 ms
64 bytes from 10.90.90.10: icmp_seq=2 ttl=127 time=0.675 ms
^C
--- 10.90.90.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1025ms
rtt min/avg/max/mdev = 0.675/0.686/0.697/0.011 ms
ekzorchik@srv-vpn:~$

Шаг №20: Создаю на srv-vpn правило проброс порта дабы через Openvpn туннель подключаться к примеру, к Windows системе:

ekzorchik@srv-vpn:~$ sudo firewall-cmd --zone=public --add-masquerade --permanent
success
ekzorchik@srv-vpn:~$
ekzorchik@srv-vpn:~$ sudo firewall-cmd --add-forward-port=port=3389:proto=tcp:toport=3389:toaddr=10.90.90.10 --permanent
success
ekzorchik@srv-vpn:~$ sudo firewall-cmd --reload
success
ekzorchik@srv-vpn:~$

Итого текущие правила:

ekzorchik@srv-vpn:~$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens18
  sources:
  services: dhcpv6-client
  ports: 22400/tcp 1194/tcp
  protocols:
  forward: yes
  masquerade: yes
  forward-ports:
        port=3389:proto=tcp:toport=3389:toaddr=10.90.90.10
  source-ports:
  icmp-blocks:
  rich rules:
ekzorchik@srv-vpn:~$

Шаг №21: Включаем Forwarding трафика на VPS системе:

ekzorchik@vpn:~$ sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
ekzorchik@vpn:~$ sudo sysctl -p
net.ipv4.ip_forward = 1

Шаг №22: Проверяю, что при обращении на WAN-IP OpenVPN сервера по RDP получаю доступ к проброшенной Windows системе:

mstsc /v:172.33.33.130:3389

Проверяю, что при обращении на WAN-IP OpenVPN сервера по RDP получаю доступ к проброшенной Windows системе:

  • Login: .\ekzorchik
  • Password: 712mbddr@

авторизовался

Подключение через OpenVPN к Windows 10 Pro осуществлено

Шаг №23: У меня был выявлен такой нюанс, да OpenVPN сеть работает, если делать проброс порта, тоже работает. Но мне еще нужно чтобы, подключившись по SSH к OpenVPN–серверу я могу из консоли взаимодействовать с сетью за Mikrotik, т.е. мог использовать OpenVPN как перевалочный пункт: ping устройства, подключаться по SSH. Чтобы это стало возможным, нужно удалить direct.xml файл:

ekzorchik@vpn:~$ sudo rm /etc/firewalld/direct.xml
ekzorchik@vpn:~$ sudo firewall-cmd --reload
success
ekzorchik@vpn:~$ ping 172.35.35.4
PING 172.35.35.4 (172.35.35.4) 56(84) bytes of data.
64 bytes from 172.35.35.4: icmp_seq=1 ttl=63 time=16.5 ms
^C
--- 172.35.35.4 ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1002ms
rtt min/avg/max/mdev = 16.482/16.482/16.482/0.000 ms
ekzorchik@vpn:~$

На заметку: Последний шаг был вспомнен благодаря заметке: "Доступ к ЛВС через OpenVPN на Ubuntu 20.04 за Mikrotik"

Итого: я успешно настроил OpenVPN сервер на Ubuntu 22.04 Server, т.е. я могу успешно перенести VPS систему с CloudLite на VPS систему в AdminVPS. Перенес все в пятницу 08.12.2023, вот что, значит оттестировав в тестовых условиях на боевом уже все идет как само собой разумеющееся, но с учетом не теста, а боевого использования.

Пока на это заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.