Схема по использованию VPN на смартфоне которую я реализую

Ранее на заметках блога https://lin.ekzorchik.ru я показал от и до, как на практике приобретенной VPS системе в Нидерландах поднять VPN-сервер на базе WireGuard, настроить клиентские подключения, а затем перенеся конфиг на смартфон получить возможность включать работу через VPN дабы можно было заходить на различные ресурсы как бы из другой страны тем самым получил доступ к полному контенту которым не обделены люди там, а не как в России: что-то можно, а что-то нет. Информация должна быть доступной, а обработанная информация посредством подписок как у меня уже на платной основе.

Итак, я для нужд VPS системы выбираю тариф "Micro" месторасположение в Беларусии за 399 руб/месяцс характеристиками виртуальной машины:

  • CPU = 1 x 3.6 ГГц
  • RAM = 1 Гб
  • HDD (NVMe) = 20 Гб

Прохожу процедуру оплаты и указания что мне нужно при оформлении:

  • Выберите период оплаты: 399.00 руб. ежемесячно
  • Название сервера: srv-site2a
  • Операционная система: Ubuntu 22
  • Предустановленное ПО: не установлен
  • Еженедельный бэкап: 1 копия (бесплатно)

После оплаты на почту на которую зарегистрирован аккаунт в AdminVPS придет письмо, в котором будут данные на подключение, а именно:

Доступ по SSH:

  • IP адрес: 185.251.38.97
  • Логин: root
  • Пароль: <ROOT_PASSWORD>

Имея данные из письма подключаюсь к купленной VPS системе и произвожу настройку системы Ubuntu 22.04 Server на последующее использование и развертывание VPN на базе WireGuard, а также защиту от несанкционированного подключения:

Шаг №1: Подключаюсь к купленной VPS системы с Ubuntu 22.04 Desktop которая у меня является дома рабочей системой, это дома, а на работе с Windows 10 Pro через клиент Putty:

клиент Putty

вкладка Session

  • Host Name (or IP address): указываю IP адрес из письма
  • Port: 22

вкладка Connection - Data

  • Auto-login username: root
  • Terminal-type string: linux

вкладка Session

  • Saved Sesssions - указываю, к примеру по имени сервера srv-site2a и нажимаю Save, тем самым я сохранил настройки подключения к удаленной системе, как профиль соединение, в последствии указав или выбрав его я нажав на Open произведу подключение без указания всех параметров подключения (удобно).

Но это пока не все параметры, в последующих шагах я настрою что подключаться к VPS системе я буду из-под отдельно созданной учетной записи и с применение SSH-ключей и после дополню профиль подключения в Putty.

Using username "root".

Server refused our key

root@185.251.38.97's password: указываю пароль который прислан в письме после создания и оплаты VPS системы

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-73-generic x86_64)

* Documentation:  https://help.ubuntu.com

* Management:     https://landscape.canonical.com

* Support:        https://ubuntu.com/advantage

System information as of Mon Jul 31 04:46:35 AM UTC 2023

System load:  0.00146484375      Processes:             87

Usage of /:   25.2% of 19.58GB   Users logged in:       0

Memory usage: 19%                IPv4 address for eth0: 185.251.38.97

Swap usage:   0%

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.

See https://ubuntu.com/esm or run: sudo pro status

The list of available updates is more than a week old.

To check for new updates run: sudo apt update

Last login: Mon Jul 31 04:27:56 2023 from 79.171.173.178

root@srv-site2a:~#

Успешно подключился.

На заметку: Я по привычке даже находясь в системе под root учетной записью все равно использую преддверие команд sudo.

Смотрю сколько места доступно мне в реале:

root@srv-site2a:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            97M  900K   97M   1% /run
/dev/vda1        20G  5.0G   14G  27% /
tmpfs           485M     0  485M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            97M  4.0K   97M   1% /run/user/0
root@srv-site2a:~#

Смотрю сколько оперативной памяти доступно мне в реале:

root@srv-site2a:~# free -m
               total        used        free      shared  buff/cache   available
Mem:             969         160         321           2         486         672
Swap:           1101           0        1101
root@srv-site2a:~#

Смотрю, как прописаны настройке WAN-ip в системе:

root@srv-site2a:~# cat /etc/network/interfaces
# Generated by SolusVM
 auto lo
  iface lo inet loopback
 auto eth0
  iface eth0 inet static
   address 185.251.38.97
   gateway 185.251.38.1
   netmask 255.255.255.0
   dns-nameservers 8.8.8.8 8.8.4.4
root@srv-site2a:~#

Шаг №2: Переделываю, как будут прописаны сетевые настройки, не через /etc/network/interface, а через netplan (это необязательно, но так делаю Я дабы все мои подконтрольные и обслуживаемые системы были в едином стиле):

root@srv-site2a:~# sudo nano /etc/network/interfaces
# Generated by SolusVM

 auto lo
  iface lo inet loopback

# auto eth0
#  iface eth0 inet static
#   address 185.251.38.97
#   gateway 185.251.38.1
#   netmask 255.255.255.0
#   dns-nameservers 8.8.8.8 8.8.4.4 
root@srv-site2a:~# sudo nano /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens3:
#      dhcp4: true
       dhcp4: no
       addresses:
         - 185.251.38.97/24
       routes:
           - to: default
             via: 185.251.38.1
       nameservers:
         addresses:
           - 8.8.8.8
  version: 2
root@srv-site2a:~# sudo netplan apply

Шаг №3: Запрещаю кому-либо изменять файл /etc/resolv.conf:

sudo systemctl disable systemd-resolved
Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service.
sudo systemctl stop systemd-resolved
sudo rm /etc/resolv.conf
sudo bash -c "echo 'nameserver 8.8.8.8'" | sudo tee -a /etc/resolv.conf
sudo chattr +i /etc/resolv.conf
sudo lsattr /etc/resolv.conf
----i---------e--- /etc/resolv.conf

Шаг №4: Устанавливаю под себя утилиты, которые мне нужны для отладки работоспособности и последующей работы:

На заметку: Вы же устанавливаете, что удобно Вам.

sudo apt-get install traceroute net-tools mc htop -y

Шаг №5: Провожу базовую настройку системы для последующего использования:

root@srv-site2a:~# sudo rm -Rf /var/lib/apt/lists 
root@srv-site2a:~# sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
root@srv-site2a:~# sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y
root@srv-site2a:~# uname -a && lsb_release -a
Linux srv-site2a 5.15.0-73-generic #80-Ubuntu SMP Mon May 15 15:18:26 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.2 LTS
Release:        22.04
Codename:       jammy
root@srv-site2a:~#

Шаг №6: На системе Windows 10 Pro (Обычно на работе с этой системы работаю) создаю публичный и приватные SSH ключи для подключения к данной VPS. Как приобщиться к такому использования, прошу сюда "Подключение к серверу Ubuntu Bionic Server через Putty + Public Key"

on Windows 10 Pro запускаю утилиту PuTTY Key Generator

  • Type of key to generate: выбираю ECDSA
  • Curve to use for generating this key: выбираю nistp256 (по умолчанию)

и нажимаю Generate, после двигаю мышью быстро или наоборот медленно дабы получить сгенерированный ключ

см. скрин ниже что у Вас должно получиться

Создаю публичный и приватный ключ через PuTTY Key Generator

нажимаем Save public key и сохраняем публичный ключ в каталог где у Вас все ключи, к примеру у меня это W:\narabotki\tips_key\ekzorchik@srv-site2a_public_key

нажимаем Save private key (предварительно указываю пароль на защиту ключа):

  • Key passphrase: <SECRET_PASSWORD>
  • Confirm passphrase: <SECRET_PASSWORD>

и сохраняем публичный ключ в каталог где у Вас все ключи, к примеру у меня это W:\narabotki\tips_key\ekzorchik@srv-site2a_private_key.ppk

после чего приложение PuTTY Key Generator можно закрыть

На заметку: Я всегда к своим системам делаю что доступ только по ключам SSH и приватный ключ защищаю парольной фразой, чтобы в случае чего стащив данный ключ он оказался бесполезным при применении.

Шаг №7: Прописываю публичный ключ в файл /etc/ssh/authorized_keys:

root@srv-site2a:~# sudo nano /etc/ssh/authorized_keys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJTgOQQb1WpbOIErS+JUwd0cQMEQjtHQyP+kFvO0TEBo4pOUDHyCtK3D84+RApT/QcWs4C1iQgrj7feQyXLWcHM= ecdsa-key-20230731 

Шаг №8: Так как я преимущественно буду подключаться к данной системе в целях администрирования по SSH, то провожу на основе своего опыта изменения в плане безопасного подключения:

На заметку: UID равный 2000 нельзя указывать если на этой системе будет развернут почтовый сервер на базе iRedMail.

root@srv-site2a:~# sudo useradd -m -p <USER_PASSWORD> -s /bin/bash -u 5000  -U ekzorchik
root@srv-site2a:~# sudo groupadd sshauth
root@srv-site2a:~# sudo usermod -aG sshauth ekzorchik
root@srv-site2a:~# sudo usermod -aG sudo ekzorchik
root@srv-site2a:~# sudo visudo -f /etc/sudoers.d/ekzorchik 
ekzorchik ALL=(ALL) NOPASSWD:ALL
root@srv-site2a:~# sudo nano /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
Port 33603
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
PrintLastLog no
TCPKeepAlive yes
Banner none
AcceptEnv LANG LC_*
Subsystem       sftp    /usr/lib/openssh/sftp-server
AllowGroups sshauth
root@srv-site2a:~# sudo service ssh restart

root@srv-site2a:~# sudo ss -ltp
State       Recv-Q      Send-Q             Local Address:Port              Peer Address:Port      Process
LISTEN      0           128                      0.0.0.0:33603                  0.0.0.0:*          users:(("sshd",pid=48946,fd=3))
LISTEN      0           128                         [::]:33603                     [::]:*          users:(("sshd",pid=48946,fd=4))
root@srv-site2a:~# sudo netstat -tulpn | grep sshd
tcp        0      0 0.0.0.0:33603           0.0.0.0:*               LISTEN      48946/sshd: /usr/sb
tcp6       0      0 :::33603                :::*                    LISTEN      48946/sshd: /usr/sb
root@srv-site2a:~# 

Пока от сервера не отключаюсь.

Шаг №9: На рабочей системе на работе запускаю клиент Putty (использую версию 0.78) и открываю профиль который сделан ранее на подключение к VPS системе купленной в беларуссии:

  • Saved Sessions: набираю srv-site2a и нажимаю Load, далее вношу изменения в профиль:

вкладка Session:

  • Port: 43704

вкладка Connection - Data

  • Auto-login username: изменяю root на ekzorchik

вкладка Connection - SSH - Auth

  • Private key file for authentication: через Browse указываю путь где сохранен приватный ключ, у меня это W:\narabotki\tips_key\ekzorchik@srv-site2a_private_key.ppk

вкладка Session, нажимаю Save для сохранения внесенных изменений в профиль на подключение к VPS системе в Беларуссии.

Нажимаю Open, в первый раз нужно нажать Accept, после нужно будет ввести парольную фразу на разблокировку приватного ключа:

Using username "ekzorchik".
Authenticating with public key "ecdsa-key-20230731"
Passphrase for key "ecdsa-key-20230731":
ekzorchik@srv-site2a:~$

Если все сделано правильно вы подключитесь, как подключился Я.

ekzorchik@srv-site2a:~$ sudo su -
root@srv-site2a:~#

Отлично подключение под ново созданным пользователем работает, как и повышение прав до уровня суперпользователя.

Шаг №10: Устанавливаю в систему надстройку над правилами iptables - firewalld:

ekzorchik@srv-site2a:~$ apt-cache show firewalld | grep Version
Version: 1.1.1-1ubuntu1
ekzorchik@srv-site2a:~$ sudo apt-get install -y firewalld
ekzorchik@srv-site2a:~$ sudo ufw disable
Firewall stopped and disabled on system startup
ekzorchik@srv-site2a:~$ sudo systemctl enable firewalld
ekzorchik@srv-site2a:~$ sudo systemctl start firewalld
ekzorchik@srv-site2a:~$ sudo firewall-cmd --state
running
ekzorchik@srv-site2a:~$ ip r | awk '{print $5}' | head -n1
eth0
ekzorchik@srv-site2a:~$ sudo firewall-cmd --zone public --change-interface=eth0 --permanent
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --add-port=33603/tcp --permanent
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --remove-service=ssh --permanent
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --reload
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client
  ports: 33603/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
ekzorchik@srv-site2a:~$

Шаг №11: Устанавливаю в систему Wireguard:

ekzorchik@srv-site2a:~$ apt-cache show wireguard | grep Version
Version: 1.0.20210914-1ubuntu2
ekzorchik@srv-site2a:~$
ekzorchik@srv-site2a:~$ sudo apt-get install -y wireguard-dkms wireguard-tools resolvconf
ekzorchik@srv-site2a:~$ sudo reboot
ekzorchik@srv-site2a:~$ lsmod | grep wireguard
вывод пуст, а почему?
ekzorchik@srv-site2a:~$ sudo modprobe wireguard
ekzorchik@srv-site2a:~$ lsmod | grep wireguard
wireguard              94208  0
curve25519_x86_64      36864  1 wireguard
libchacha20poly1305    16384  1 wireguard
libcurve25519_generic    49152  2 curve25519_x86_64,wireguard
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             20480  1 wireguard
ekzorchik@srv-site2a:~$

Значит, нужно указать системе что нужно подгружать модуль wireguard при загрузке:

ekzorchik@srv-site2a:~$ sudo nano /etc/modules-load.d/wirequard.conf
wireguard
ekzorchik@srv-site2a:~$ sudo reboot
ekzorchik@srv-site2a:~$ lsmod | grep wireguard
wireguard              94208  0
curve25519_x86_64      36864  1 wireguard
libchacha20poly1305    16384  1 wireguard
libcurve25519_generic    49152  2 curve25519_x86_64,wireguard
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             20480  1 wireguard
ekzorchik@srv-site2a:~$

Вот теперь модуль автоматически подгружается вместе с системой после перезагрузки системы.

Шаг №12: Переделываю зоны работы Firewalld, чтобы была внешняя зона (external) и зона VPN туннеля (internal):

ekzorchik@srv-site2a:~$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
ekzorchik@srv-site2a:~$
ekzorchik@srv-site2a:~$ sudo firewall-cmd --zone=external --add-port=33603/tcp --permanent

sudo firewall-cmd --zone=internal --add-interface=wg0 --permanent
sudo firewall-cmd --zone=public --remove-interface=eth0 --permanent
sudo firewall-cmd --zone=external --remove-service=ssh --permanent
sudo firewall-cmd --zone=external --add-interface=eth0 --permanent

ekzorchik@srv-site2a:~$ sudo firewall-cmd --reload

Информация по настройкам зоны internal:

ekzorchik@srv-site2a:~$ sudo firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: wg0
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
ekzorchik@srv-site2a:~$

Информация по настройкам зоны external:

ekzorchik@srv-site2a:~$ sudo firewall-cmd --zone=external --list-all
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services:
  ports: 33603/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
ekzorchik@srv-site2a:~$

Шаг №13: Создадим пару закрытого и открытого ключа на системе VPS которая выступает, как сервер Wireguard:

ekzorchik@srv-site2a:~$ sudo wg genkey | sudo tee /etc/wireguard/privatekey
<PRIVATE_KEY_SERVER>
ekzorchik@srv-site2a:~$ sudo bash -c "wg pubkey < /etc/wireguard/privatekey > /etc/wireguard/pubkey"
ekzorchik@srv-site2a:~$ sudo bash -c "cat /etc/wireguard/pubkey"
<PUBLIC_KEY_SERVER>
ekzorchik@srv-site2a:~$

Шаг №14: Файл privatekey не должен быть доступен для чтения для обычных пользователей на системе VPS:

ekzorchik@srv-site2a:~$ sudo chmod 600 /etc/wireguard/privatekey

Шаг №15: Создаю публичный ключ для своего смартфона Honor 9X на котором буду тестировать VPN до Беларуссии:

ekzorchik@srv-site2a:~$ wg genkey | sudo tee /etc/wireguard/honor9xvpsprivatekey
<PRIVATE_KEY_CLIENT> 
ekzorchik@srv-site2a:~$ sudo bash -c "wg pubkey < /etc/wireguard/honor9xvpsprivatekey > /etc/wireguard/honor9xvpspubkey"
ekzorchik@srv-site2a:~$ sudo bash -c "cat /etc/wireguard/honor9xvpspubkey"
<PUBLIC_KEY_CLIENT>
ekzorchik@srv-site2a:~$

Шаг №16: Настраиваем туннельное устройство, которое будет маршрутизировать трафик VPN на клиенте:

ekzorchik@srv-site2a:~$ sudo nano /etc/wireguard/wg0.conf
[Interface]
#указываю имя приватного ключа сервера, sudo bash -c "cat /etc/wireguard/privatekey"
PrivateKey = <PRIVATE_KEY_SERVER>
#Внутренний адрес сервера
Address = 20.20.20.1/24
#MTU = 1420
#Порт на котором мой сервер будет принимать подключения
ListenPort = 22340
#Table =
#в качестве брандмауэера я буду использовать надстройку над правилами iptables => firewalld
#ip r | awk ‘{print $5}’ | head -n1 #eth0


PreUp = sysctl -w net.ipv4.ip_forward=1
PreUp = sysctl -w net.ipv4.conf.all.src_valid_mark=1
PostUp = firewall-cmd --zone=external --add-masquerade
PostUp = firewall-cmd --zone=external --add-port=22340/udp
PreDown = sysctl -w net.ipv4.ip_forward=0
PreDown = sysctl -w net.ipv4.conf.all.src_valid_mark=0
PostDown = firewall-cmd --zone=external --remove-masquerade
PostDown = firewall-cmd --zone=external --remove-port=22340/udp

#Секция настройки клиента
#Client
[Peer]
#root@ekzorchik:~# cat /etc/wireguard/honor9xvpspubkey
PublicKey = <PUBLIC_KEY_CLIENT>
AllowedIPs = 20.20.20.2/32

Изменяем права доступа к конфигурационному файлу wg0.conf:

ekzorchik@srv-site2a:~$ sudo chmod 600 /etc/wireguard/wg0.conf

Шаг №17: Разрешаем транзитный трафик между зонами firewalld:

На заметку: Важный нюанс по данной заметке, у меня в заметках используется утилита firewalld версии 0.8.2OS: Ubuntu 20.04 где Wireguard работает в качестве сервера — все работает, как и написано в заметках моего блога), а начиная с версии 1.0

root@ekzorchik:~# dpkg -l | grep firewalld | head -n 1
ii firewalld 0.8.2-1 all dynamically managed firewall with support for network zones
root@ekzorchik:~#

по умолчанию блокируется транзитный трафик между зонами хоть и включена настройка net.ipv4.ip_forward=1, это дело не меняет. А в Ubuntu 22.04 уже устанавливается версия firewalld = 1.1.1-1ubuntu1 и все применяя к ней исходя из моих заметок получается, что не работает, т.е. если Вы на Ubuntu 22.04 Server поднимаете Wireguard-сервер, в этом случае нужно разрешить прохождение трафика с помощью policy object, к примеру, создав правило: client-to-inet

ekzorchik@srv-site2a:~$ firewall-cmd --permanent --new-policy client-to-inet
Authorization failed.
    Make sure polkit agent is running or run the application as superuser.
ekzorchik@srv-site2a:~$ sudo firewall-cmd --permanent --new-policy client-to-inet
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --permanent --policy client-to-inet --set-target ACCEPT
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --permanent --policy client-to-inet --add-ingress-zone internal
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --permanent --policy client-to-inet --add-egress-zone external
success
ekzorchik@srv-site2a:~$ sudo firewall-cmd --reload
success
ekzorchik@srv-site2a:~$

после интернет при подключении через Wireguard с клиентской системы к Ubuntu 22.04 Server (Wireguard-сервер) начинает работать, а туннель как устанавливался, так и устанавливается.

Шаг №18: Активирую работу сервиса после перезагрузки сервера, чтобы он включался автоматически:

ekzorchik@srv-site2a:~$ sudo systemctl enable wg-quick@wg0.service
Created symlink /etc/systemd/system/multi-user.target.wants/wg-quick@wg0.service → /lib/systemd/system/wg-quick@.service.
ekzorchik@srv-site2a:~$ sudo systemctl start wg-quick@wg0.service
ekzorchik@srv-site2a:~$ ip r
default via 185.251.38.1 dev eth0 proto static
20.20.20.0/24 dev wg0 proto kernel scope link src 20.20.20.1
185.251.38.0/24 dev eth0 proto kernel scope link src 185.251.38.97
ekzorchik@srv-site2a:~$

Шаг №19: Создаю конфигурацию для смартфона Honor 9X на котором буду тестировал функционал работы VPN туннеля из Беларуссии:

ekzorchik@srv-site2a:~$ nano honor9xvps.conf
[Interface]
#PrivateKey = CLIENT_PRIVATE_KEY
# root@ekzorchik:~# cat /etc/wireguard/honor9xvpsprivatekey
PrivateKey = <PRIVATE_KEY_CLIENT>
# Адрес и маска
#[Peer] должны быть одинаковыми и на клиенте, и на сервере
# не обязательно
Address = 20.20.20.2/24
DNS = 8.8.8.8

[Peer]
#PublicKey = SERVER_PUBLIC_KEY
#cat /etc/wireguard/pubkey
PublicKey = <PUBLIC_KEY_SERVER>
#Endpoint = SERVER_IP_ADDRESS:PORT
Endpoint = 185.251.38.97:22340
AllowedIPs = 0.0.0.0/0
#Key connection alive ##
PersistentKeepalive = 15

Шаг №20: Теперь можно создать QR код на основе нашего конфига:

ekzorchik@srv-site2a:~$ apt-cache show qrencode | grep Version
Version: 4.1.1-1
ekzorchik@srv-site2a:~$
ekzorchik@srv-site2a:~$ sudo apt-get install -y qrencode
ekzorchik@srv-site2a:~$ qrencode -t png -o honor9xvps.png -r honor9xvps.conf

Шаг №21: Передаем любым способом полученную картинку в виде qrКОДА НА ТЕЛЕФОН или скачиваем ее подключившись к серверу через WinSCP (не забываем указать путь до SSH ключа) и скопировав ее на рабочий стол, открываю ее. На Windows 10 Pro открыл через "Средство просмотра фотографий Windows", а вот когда открывал через ACDSee Pro 8 смартфоном я не мог считать QR-код.

На заметку: Чтобы в Windows 10 появилось привычное "Средство просмотра фотографий Windows" нужно обратиться к заметке "Просмотр фотографий Windows в Windows 10"

Считываю смартфоном полученный QR-код с настройками подключения

Шаг №22: На смартфон Honor 9X устанавливаю приложение из Play Market или если Вы себе скачиваете apk файл приложения

Устанавливаю через Google Play приложение Wireguard

Шаг №23: Запускаем на смартфоне установленное приложение Wireguard, нажимаем "+" Плюсиквыбираем "Сканировать QR-код" и сканируем открытую картинку выше и если все сделано правильно создается конфигурация, для которой Вы сами даете именование, к примеру добавленные конфигурации выглядят так:

Импортированные настройки подключения к VPS системе в Беларуссии

нажимаю на переключатель напротив именования vpsbelarus, сессия включается, в правом верхнем углу экрана смартфона появляется иконка "Ключик"

VPN подключение установлено - видно иконку "Ключик"

свидетельствующая что VPN туннель установлен

см. на сервере так ли это:

ekzorchik@srv-site2a:~$ sudo wg show
interface: wg0
  public key: <PUBLIC_KEY_SERVER>
  private key: (hidden)
  listening port: 22340

peer: <PUBLIC_KEY_CLIENT>
  endpoint: 176.59.57.149:54624
  allowed ips: 20.20.20.2/32
  latest handshake: 7 minutes ago
  transfer: 928.95 KiB received, 4.89 MiB sent
ekzorchik@srv-site2a:~$

ekzorchik@srv-site2a:~$ sudo wg show
interface: wg0
  public key: oBgRkPwW2nqTDL3MMww7ceJznj/AQqKyZL4Rua+GqCI=
  private key: (hidden)
  listening port: 22340

peer: ZnV8NikZMAlIXRH5N6gStngMgfot4Y2uKuW+Ubd35FY=
  endpoint: 176.59.174.8:46408
  allowed ips: 10.10.10.2/32
  latest handshake: 1 minute, 42 seconds ago
  transfer: 703.79 KiB received, 488.34 KiB sent
ekzorchik@srv-site2a:~$

из вывода выше видно, что клиент получил назначенный ему IP адрес в сети VPN, т.е. 10.20.20.2

Шаг №24: Проверяем на смартфоне, какой WAN-IP сейчас, открываем браузер и переходим на URLадрес 2ip.ru & myip.ru

При установленном соединении через VPN - WAN-IP это IP VPS системы в Беларуссии

Отлично, теперь проверяю, что могу заходить на различные ресурсы и меня не блокирует.

Подведем итог, я самостоятельно для себя разобрал как поднимается VPN-туннель до своего сервера, купленного в другой стране (ранее был VPS в Нидерландах, сейчас VPS в Беларуссии), со всеми нюансами, которые у меня возникли, многое нового узнал и теперь в рамках тестирования буду анализировать работу своих сервисов дабы лучше понимать и применять полученный опыт в работе.

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