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

И вот ниже заметка по тому, как с нуля развернуть сервис 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 PRIVATE KEY & END PRIVATE KEY включая эти теги
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.130Port: 1194Model: ipProtocol: tcpUser: mikrotikProfile: defaultCertificate: mikrotik.crt_0TLS Version: anyAuth: sha1Cipher: aes 128 cbcUse Peer DNS: yesAdd Default Route: Галочку не ставлюDon't Add Pushed Routes (route-nopull): галочку не ставлю
и нажимаю Apply, OK
Шаг №15: на Микротике нужно создать правило masquerade
winbox - IP:8291 - user&pass - IP - Firewall — вкладка NAT - Add -
вкладка General
Chain: srcnatOut. 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] > interface/ovpn-client/monitor openvpn
status: connected
uptime: 2m7s
encoding: AES-128-CBC/SHA1
mtu: 1500
[mikrotik@MikroTik] >

Т.е. соединение установлено.
Шаг №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

Login: .\ekzorchikPassword: 712mbddr@
авторизовался

Шаг №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.