Сегодня я составлю себе подробный гайд, как подключить свой смартфон Honor 9X
к сети VPN
на базе Wireguard
туннеля, т.е. смогу выходить в интернет под WAN-IP
своей арендованной VDS
системы которой посредством записи A назначено доменное имя mail.ekzorchik.com.
Уже опираясь на эту заметку и ранее опубликованные можно будет где-нибудь зарубежом купить VDS
систему и выходить в интернет как-бы от туда.
Итак, что понадобится для реализации задуманного
- Купленный виртуальная машина по
ссылке
за каких-то 190р в месяц с характеристиками (2vCPU, RAM=1Gb, HDD=30Gb) и ось на ней Ubuntu 20.04 Server - Установлена серверная часть Wireguard см заметку
"Поднимем WireGuard VPN туннель на Ubuntu 20.04"
- Смартфон Honor 9X
Шаг №1:
Устанавливаем на смартфон приложение через Google Play
именуемое как: Wireguard
(у меня версия: 1.0.20220516
) от WireGuard Development Team:
Шаг №2:
Устанавливаю на VDS
систему пакет qrencode
, посредством него из сформированного конфигурационного файла для клиента создадим QR
-код картинки считав которую приложением Wireguard
на смартфоне импортируем настройки подключения к VPN
туннелю:
sudo apt-get install -y qrencode
Шаг №3:
Подключаюсь на VDS
систему по SSH:
ekzorchik@ekzhome:~$ ssh -l root mail.ekzorchik.com -p 20321
Шаг №4:
Узнаю публичный ключ серверной части Wireguard
на системе Ubuntu 20.04 Server:
root@ekzorchik:~# cat /etc/wireguard/pubkey poBHB2BuLmHI617tWKS0Wur3MTMpxBYbO3dE3Jn6-V0= root@ekzorchik:~#
Шаг №5:
Создаю публичный ключ для своего смартфона Honor 9X:
root@ekzorchik:~# wg genkey | sudo tee /etc/wireguard/honor9xprivatekey zOsrRtuJq+ZN4v1VbLM2KZ1jc5ZG+lW4t1JfC4zxxk0= root@ekzorchik:~# sudo bash -c "wg pubkey < /etc/wireguard/honor9xprivatekey > /etc/wireguard/honor9xpubkey" root@ekzorchik:~# sudo bash -c "cat /etc/wireguard/honor9xpubkey" FaCKKRrC1rxzfw6zVfEKXCvFXoFWpx9oZ3TOv3xt4h4= root@ekzorchik:~#
Шаг №6:
Прописываю на сервере еще одного клиента, а именно клиента на базе смартфона Honor 9X:
root@ekzorchik:~# sudo nano /etc/wireguard/wg0.conf [Interface] #указываю имя приватного ключа сервера, sudo bash -c "cat /etc/wireguard/privatekey" PrivateKey = KDWC-brrCgI21oV6Z0qLuN8OusDHd2VGMSSbJ154Zkg= #Внутренний адрес сервера Address = 10.0.0.1/24 #Порт на котором мой сервер будет принимать подключения ListenPort = 31200 #в качестве брандмауэера я буду использовать надстройку над правилами iptables => firewalld #ip r | awk ‘{print $5}’ | head -n1 #eth0 PostUp = firewall-cmd --zone=external --add-masquerade; firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -I wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE; firewall-cmd --add-port=31200/udp PostDown = firewall-cmd --zone=external --remove-masquerade; firewall-cmd --direct --remove-rule ipv4 filter FORWARD 0 -I wg0 -o eth0 -j ACCEPT; firewall-cmd --direct --remove-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE; firewall-cmd --remove-port=31200/udp #Секция настройки клиента #Client [Peer] # Подставьте сюда публичный ключ клиента #sudo bash -c "cat /etc/wireguard/publickey" PublicKey = 1IL/tdn/l72JELiLLD8syIP71WQ7L6er9gI/hAxcjlk= # внутренний ip адрес клиента (client1) # и здесь же указывается подсеть за клиентом чтобы можно было настроить и заработал проброс порта AllowedIPs = 10.0.0.2/32, 172.33.2.0/24 [Peer] PublicKey = Nm1cJ6cPSbVIlDZtny0wXKd9A6yoKzdAuFC0T+LQGE8= AllowedIPs = 10.0.0.3/32, 172.33.2.0/24 [Peer] #root@ekzorchik:~# cat /etc/wireguard/honor9xpubkey PublicKey = FaCKKRrC1rxzfw6zVfEKXCvFXoFWpx9oZ3TOv3xt4h4= #сеть 172.33.2.0/24 не прописываю, т.к. за смартфоном нет такой сети. AllowedIPs = 10.0.0.4/32 root@ekzorchik:~#
Шаг №7:
Перезапускаю интерфейс Wireguard
для принятия настроек добавления нового Peer:
root@ekzorchik:~# sudo wg-quick down wg0 && sudo wg-quick up wg0
Шаг №8:
Создаю конфигурацию для смартфона Honor 9X:
root@ekzorchik:~# nano honor9x.conf [Interface] #PrivateKey = CLIENT_PRIVATE_KEY # root@ekzorchik:~# cat /etc/wireguard/honor9xprivatekey zOsrRtuJq+ZN4v1VbLM2KZ1jc5ZG+lW4t1JfC4zxxk0= # Адрес и маска #[Peer] должны быть одинаковыми и на клиенте, и на сервере # не обязательно Address = 10.0.0.4/32 DNS = 8.8.8.8 [Peer] #PublicKey = SERVER_PUBLIC_KEY #cat /etc/wireguard/pubkey PublicKey = poBHB2BuLmHI617tWKS0Wur3MTMpxBYbO3dE3Jn6-V0= #Endpoint = SERVER_IP_ADDRESS:PORT Endpoint = mail.ekzorchik.com:31200 AllowedIPs = 0.0.0.0/0 #Key connection alive ## PersistentKeepalive = 15
Шаг №9:
Теперь можно создать QR
код на основе нашего конфига:
root@ekzorchik:~# qrencode -t png -o honor9x.png -r honor9x.conf root@ekzorchik:~# file honor9x.png honor9x.png: PNG image data, 243 x 243, 1-bit colormap, non-interlaced root@ekzorchik:~#
Шаг №10:
Копирую любым способом сформированное изображение на компьютер
Подключаюсь к Ubuntu 20.04
через клиент WinSCP
скачиваю картинку
открываю картинку
смартфоном считываю qr код
Именую импортируемое соединение, как vpnguard подключаюсь
На заметку: После следует удалить самым тщательным образом qr
-код картинку или переместить в соответствующую папку если такая предусмотрена Вами.
Шаг №11:
Проверяю на сервере что соединение установлено, смотрим часть посвященную IP: 10.0.0.4
где указывается даже WAN-IP
смартфона который на момент выхода в интернет через SIM
-карту или Wi-Fi
присвоился провайдером:
root@ekzorchik:~# wg show wg0 interface: wg0 public key: poBHB2BuLmHI617tWKS0Wur3MTMpxBYbO3dE3Jn6-V0= private key: (hidden) listening port: 31200 peer: FaCKKRrC1rxzfw6zkfEKXCvFXoFWpx9oZ3TOv3xt4h4= endpoint: 133.59.172.123:38231 allowed ips: 10.0.0.4/32 latest handshake: 4 days, 4 hours, 57 minutes, 54 seconds ago transfer: 11.53 MiB received, 97.56 MiB sent peer: Nm1cJ6cPSbVIlDZtny1wXKd9A6yoKzdAuFC0T+LQGE8= endpoint: 176.192.156.221:39984 allowed ips: 10.0.0.3/32, 172.33.2.0/24 latest handshake: 4 days, 23 hours, 2 minutes, 41 seconds ago transfer: 1.53 MiB received, 4.41 MiB sent peer: 1IL/tdn/l72JELiLLD3syIP71WQ7L6er9gI/hAxcjlk= allowed ips: 10.0.0.2/32 root@ekzorchik:~# root@ekzorchik:~# ping 10.0.0.4 PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data. 64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=62.2 ms ^C --- 10.0.0.4 ping statistics --- 2 packets transmitted, 1 received, 50% packet loss, time 1001ms rtt min/avg/max/mdev = 62.235/62.235/62.235/0.000 ms root@ekzorchik:~#
Шаг №12:
Проверяю на смартфоне какой Wan-IP
у меня на Honor 9X
Запускаю браузер и открываю URL https://myip.ru
и вижу WAN-IP
моего сервера с Ubuntu 20.04 Server
Ваш IP-адрес: 2.57.186.62
Имя вашего хоста: mail.ekzorchik.com
Шаг №13:
Советую на сервере где серверная часть wireguard
в каталоге /etc/wireguard
создать каталог clients
и уже в нем создавать клиентские конфигурационные файлы для смартфонов, планшетов:
root@ekzorchik:~# sudo mkdir /etc/wireguard/clients
чтобы потом если конфигурационных файлов много посредством скрипта сформировать QR
-коды на распространение подключения:
root@ekzorchik:~# sudo mkdir /etc/wireguard/scripts root@ekzorchik:~# sudo nano /etc/wireguard/scripts/qr.sh #!/bin/bash for w in /etc/wireguard/clients/*.conf do echo "Creating ${w}.png QR code file …" qrencode -t png -o "${w}.png" -r "${w}" done root@ekzorchik:~# sudo chmod +x /etc/wireguard/scripts/qr.sh root@ekzorchik:~# sudo /etc/wireguard/scripts/qr.sh Creating /etc/wireguard/clients/honor9x.conf.png QR code file ... root@ekzorchik:~# ls /etc/wireguard/clients/honor9x.conf.png /etc/wireguard/clients/honor9x.conf.png root@ekzorchik:~#
Круто. Т.е у меня получилось приобщить свой смартфон к VPN
на базе Wireguard
с целью объединения систем в одну сеть и получив доступ к ресурсам за сетью и единой точки выхода в интернет, будь-то смартфон или система Ubuntu.
На заметку: Важный нюанс по данной заметке, у меня в заметках используется утилита 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
-сервер) начинает работать, а туннель как устанавливался так и устанавливается.
Заметка работоспособна, на этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.