У меня остался один сервис который развернут на 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 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] > 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: .\ekzorchik
Password: 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.