Проверка какой IP адрес на смартфоне через VPN туннель - Нидерланды

Решил поменять хостера своих VPS с Dataline на AdminVPS, прочитав всю информацию на официальном сайте, решил попробовать приобрести в качестве теста одну из VPS(ок), но развернутую не в России, а в Нидерландах (по аналогии можно поступить и с другими странами), ограничился самым минимальным тарифным планом: Тарифный план Micro за 449 руб/месяц, перешел по ссылке и сделал заказ.

  • CPU = 1 x 3.4 ГГц
  • RAM = 2 Gb
  • HDD = 20 Gb NVMe
  • Траффик: 80 Тб
  • OS = Ubuntu 22.04 выбрал

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

  • IP: IP адрес моей VPS системы
  • Login: root
  • Pass: длиннющий

Провожу предварительную настройку купленной VPS систему под задачу организации VPN для собственных нужд на базе Wireguard, на ней будет развернут WireGuard сервер, а клиенты будут на Android телефонах стоять для хождения по различным сайтам и проверке как мои блоги https://{win,lin,net,home,voip}.ekzorchik.ru отображаются из другой страны. Да просто для самообразования.

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

root@ekzorchik:~# ssh -l root 79.133.180.222
The authenticity of host '79.133.180.222 (79.133.180.222)' can't be established.
RSA key fingerprint is SHA256:yYXdIurBWobD354osY2q60zi43aaWuMetM2Z9GMLsyY.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '79.133.180.222' (RSA) to the list of known hosts.
root@79.133.180.222's password:
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 Thu Jun 15 04:38:09 AM UTC 2023
  System load:  0.3603515625       Processes:             92
  Usage of /:   24.9% of 19.58GB   Users logged in:       0
  Memory usage: 9%                 IPv4 address for eth0: 79.133.180.222
  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
root@srv-site1a:~#

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

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

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

root@srv-site1a:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           198M  892K  197M   1% /run
/dev/vda1        20G  4.7G   14G  26% /
tmpfs           988M     0  988M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           198M  4.0K  198M   1% /run/user/0
root@srv-site1a:~#

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

root@srv-site1a:~# free -m
               total        used        free      shared  buff/cache   available
Mem:            1975         164        1496           2         314        1665
Swap:           1101           0        1101
root@srv-site1a:~#

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

root@srv-site1a:~# cat /etc/network/interfaces
# Generated by SolusVM

 auto lo
  iface lo inet loopback

 auto eth0
  iface eth0 inet static
   address 79.133.180.222
   gateway 79.133.180.1
   netmask 255.255.255.0
   dns-nameservers 8.8.8.8 8.8.4.4
root@srv-site1a:~#

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

ekzorchik@srv-site1a:~$ sudo nano /etc/network/interfaces
# Generated by SolusVM
 auto lo
  iface lo inet loopback
# auto eth0
#  iface eth0 inet dhcp
#   address 79.133.180.222
#   gateway 79.133.180.1
#   netmask 255.255.255.0
#   dns-nameservers 8.8.8.8 8.8.4.4

ekzorchik@srv-site1a:~$ sudo nano /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens3:
#      dhcp4: true
       dhcp4: no
       addresses:
         - 79.133.180.222/24
       routes:
           - to: default
             via: 79.133.180.1
       nameservers:
         addresses:
           - 8.8.8.8
  version: 2
ekzorchik@srv-site1a:~$ 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 -y

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

root@srv-site1a:~# rm -Rf /var/lib/apt/lists
root@srv-site1a:~# sudo nano /etc/update-manager/release-upgrades
[DEFAULT]
Prompt=never
root@srv-site1a:~# sudo apt-get update && sudo apt-get upgrade -y
ekzorchik@srv-site1a:~$ uname -a && lsb_release -a
Linux srv-site1a 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
ekzorchik@srv-site1a:~$

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

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

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

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

root@srv-site1a:~# sudo nano /etc/ssh/authorized_keys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH1hhQut+INfQDfMYbFfGRdr/VpikwFKV8p9r1it1U/TI9K00JbDN7E5V7m17IHT72zTgCcqGaLJrzPHpODbqGk= ecdsa-key-20230615

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

root@srv-site1a:~# sudo useradd -m -p password -s /bin/bash -u 2000  -U ekzorchik
root@srv-site1a:~# sudo groupadd sshauth
root@srv-site1a:~# sudo usermod -aG sshauth ekzorchik
root@srv-site1a:~# sudo usermod -aG sudo ekzorchik
root@srv-site1a:~# sudo nano /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
Port 33222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile /etc/ssh/authorized_keys
IgnoreRhosts yes
PermitEmptyPasswords no
KbdInteractiveAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
PrintLastLog no
AcceptEnv LANG LC_*
Subsystem       sftp    /usr/lib/openssh/sftp-server
DebianBanner no
AllowGroups sshauth
root@srv-site1a:~#
root@srv-site1a:~# sudo service ssh restart
root@srv-site1a:~# sudo ss -ltp
State       Recv-Q       Send-Q             Local Address:Port              Peer Address:Port      Process
LISTEN      0            128                      0.0.0.0:33222                  0.0.0.0:*          users:(("sshd",pid=3030,fd=3))
LISTEN      0            128                         [::]:33222                     [::]:*          users:(("sshd",pid=3030,fd=4))
root@srv-site1a:~#

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

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

(Session)

  • Host Name (or IP address): 79.133.180.222
  • Port: 33222
  • Connection Type: SSH

(Connection) - Data

  • Auto-login username: ekzorchik

(Connection) - SSH - Auth - Credentials

  • Private key file for authentication: W:\tips_key\ekzorchik@srv-site1a_private_key.ppk

после возвращаюсь

(Session)

  • Saved Sessions: указываю имя под которым сохраню настройки подключения, к примеру srv-site1a

и нажимаю "Save", затем подключаюсь, нажимаю "Open"

подключение проходит успешно

Using username "ekzorchik".
Authenticating with public key "ecdsa-key-20230615"
Passphrase for key "ecdsa-key-20230615":
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 Thu Jun 15 05:26:07 AM UTC 2023
  System load:  0.0                Processes:             92
  Usage of /:   25.1% of 19.58GB   Users logged in:       1
  Memory usage: 11%                IPv4 address for eth0: 79.133.180.222
  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 programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
ekzorchik@srv-site1a:~$

Подключение под пользователем прошло успешно, можно сессию от имени root уже завершить.

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

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

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

ekzorchik@srv-site1a:~$ apt-cache show wireguard | grep Version
Version: 1.0.20210914-1ubuntu2
ekzorchik@srv-site1a:~$
ekzorchik@srv-site1a:~$ sudo apt-get install -y wireguard-dkms wireguard-tools resolvconf
ekzorchik@srv-site1a:~$ sudo reboot
ekzorchik@srv-site1a:~$ 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-site1a:~$

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

ekzorchik@srv-site1a:~$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
ekzorchik@srv-site1a:~$
ekzorchik@srv-site1a:~$ sudo firewall-cmd --zone=external --add-port=33222/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-site1a:~$ sudo firewall-cmd --reload

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

ekzorchik@srv-site1a:~$ 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-site1a:~$

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

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

На заметку: 22341 — это будет порт работы Wireguard

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

ekzorchik@srv-site1a:~$ sudo wg genkey | sudo tee /etc/wireguard/privatekey
+KYc7Jx2bOcRkTtAL/ZA2NgBHJwmejvySERZFNJHb0z=
ekzorchik@srv-site1a:~$ sudo bash -c "wg pubkey < /etc/wireguard/privatekey > /etc/wireguard/pubkey"
ekzorchik@srv-site1a:~$ sudo bash -c "cat /etc/wireguard/pubkey"
oBgRkPwW1nqTDL3MMwu4ceJznj/AQqKyZL4Rua+GqCI=
ekzorchik@srv-site1a:~$

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

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

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

ekzorchik@srv-site1a:~$ wg genkey | sudo tee /etc/wireguard/honor9xvpsprivatekey
0L0HHC3hCl2PyqOaXt8VvpF/AVowxvSpCnFTSjF7uHg=
ekzorchik@srv-site1a:~$ sudo bash -c "wg pubkey < /etc/wireguard/honor9xvpsprivatekey > /etc/wireguard/honor9xvpspubkey"
ekzorchik@srv-site1a:~$ sudo bash -c "cat /etc/wireguard/honor9xvpspubkey"
ZnV8NikZMAlIXRH5N6gStngMgfot4Y2uKuW+Ubd35FY=
ekzorchik@srv-site1a:~$

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

ekzorchik@srv-site1a:~$ sudo nano /etc/wireguard/wg0.conf
[Interface]
#указываю имя приватного ключа сервера, sudo bash -c "cat /etc/wireguard/privatekey"
PrivateKey = +KYc7Jx2bOcRkTtAL/ZA2NgBHJwmejvySERZFNJHb0z=
#Внутренний адрес сервера
Address = 10.10.10.1/24
#MTU = 1420
#Порт на котором мой сервер будет принимать подключения
ListenPort = 22341
#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=22341/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=22341/udp

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

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

На заметку: Важный нюанс по данной заметке, у меня в заметках используется утилита firewalld версии 0.8.2 (в OS: 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

firewall-cmd --permanent --new-policy client-to-inet

firewall-cmd --permanent --policy client-to-inet --set-target ACCEPT

firewall-cmd --permanent --policy client-to-inet --add-ingress-zone internal

firewall-cmd --permanent --policy client-to-inet --add-egress-zone external

firewall-cmd --reload

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

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

ekzorchik@srv-site1a:~$ 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-site1a:~$ sudo systemctl start wg-quick@wg0.service
ekzorchik@srv-site1a:~$ ip r
default via 79.133.180.1 dev eth0 proto static
10.10.10.0/24 dev wg0 proto kernel scope link src 10.10.10.1
79.133.180.0/24 dev eth0 proto kernel scope link src 79.133.180.222
ekzorchik@srv-site1a:~$

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

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

[Peer]
#PublicKey = SERVER_PUBLIC_KEY
#cat /etc/wireguard/pubkey
PublicKey = oBgRkPwW1nqTDL3MMwu4ceJznj/AQqKyZL4Rua+GqCI=
#Endpoint = SERVER_IP_ADDRESS:PORT
Endpoint = 79.133.180.222:22341
AllowedIPs = 0.0.0.0/0
#Key connection alive ##
PersistentKeepalive = 15

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

ekzorchik@srv-site1a:~$ sudo apt-get install -y qrencode
ekzorchik@srv-site1a:~$ qrencode -t png -o honor9xvps.png -r honor9xvps.conf

Шаг №21: Передаем любым способом полученную картинку в виде qr-КОДА НА ТЕЛЕФОН или скачиваем ее подключившись к серверу через WinSCP и скопировав ее на рабочий стол, открываю ее

QR-код для клиента Honor 9X

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

Устанавливаю на смартфон приложение WireGuard

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

Импортированная конфигурация для клиента Honor 9X через QR-код

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

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

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

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

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

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-site1a:~$

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

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

Проверка какой IP адрес на смартфоне через VPN туннель - Нидерланды

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

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

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