Изменяем текущий Wireguard туннель где вместо системы Ubuntu 18.04 Server в локальной сети буду использовать Ubuntu 22.04 Server. Для чего? цель переразвернуть домашний почтовый сервер (домен @ekzorchik.com) на самой последней доступной версии (на момент написания заметки — это 1.6.2) комбайна iRedMail + может всплывут дополнительные нюансы настройки. У меня это второй туннель до домашней сети:

  • OpenVPN — это для доступа из вне к домашним ресурсам: OwnCloud, Domoticz, Proxmox, Видеонаблюдение
  • Wireguard — пока тестирую, но будет исключительно для почтового сервера с запретом доступа в домашние VLANы.

Я замороченный на разграничение доступа, потому для рабочих станций, для «Умного дома» на базе Domoticz, для Mikrotik'ов, для Wi-fi и гостевого Wi-fi, для теста, для серверных систем, а тут еще и для почтового окружения.

Настраиваем связку Ubuntu 20.04 wireguard (как сервер) c Ubuntu 22.04 wireguard (как клиент)

Новая схема (Wireguard-Туннеля) для домашней сети

Шаг №1: Серверная часть Wireguard располагается на Ubuntu 20.04 Server

Шаг №2: На сервере под управлением Debian 10 + Proxmox 6.4-13 создаю виртуальную машину с осью Ubuntu 22.04 Server:

Шаг №3: Подключаюсь по SSH к системе Ubuntu 22.04 Server (Hostname: srv-us2204a):

IP: 172.33.2.15

ekzorchik@srv-nas:~$ ssh -l ekzorchik 172.33.2.15

Шаг №4: Обновляю информацию об установленных пакетах и обновляю в рамках текущего дистрибутива:

ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=lts
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ sudo sed -i '/Prompt/s/lts/never/' /etc/update-manager/release-upgrades
ekzorchik@srv-us2204a:~$ cat /etc/update-manager/release-upgrades | grep Prompt
Prompt=never
ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt dist-upgrade -y
ekzorchik@srv-us2204a:~$ sudo reboot
ekzorchik@srv-nas:~$ ssh -l ekzorchik 172.33.2.15
ekzorchik@srv-us2204a:~$ uname -a && lsb_release -a
Linux srv-us2204a 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy
ekzorchik@srv-us2204a:~$

Шаг №5: Устанавливаю пакет wireguard и пакет для управления dns:

ekzorchik@srv-us2204a:~$ apt-cache show wireguard | grep Version

Version: 1.0.20210914-1ubuntu2

ekzorchik@srv-us2204a:~$

Шаг №6: Создадим пару закрытого и открытого ключа для системы ekzorchik@srv-us2204a которая выступает, как клиент Wireguard:

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

ekzorchik@srv-us2204a:~$ wg genkey | sudo tee /etc/wireguard/privatekey
wI4rO15qf2Z4YJo3RPkfcAphFAu2x4T0qfcDNkkoSVI=
ekzorchik@srv-us2204a:~$ sudo bash -c "wg pubkey < /etc/wireguard/privatekey > /etc/wireguard/pubkey"
ekzorchik@srv-us2204a:~$ sudo bash -c "cat /etc/wireguard/pubkey"
Nm2kJ6cUSbV11DZtn8awXKd9A6yoKzdAuFC0T+LQGE8=

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

ekzorchik@srv-us2204a:~$ sudo nano /etc/wireguard/wg0.conf
[Interface]
#PrivateKey = CLIENT_PRIVATE_KEY
# cat /etc/wireguard/privatekey
PrivateKey = wI4rO15qf2Z4YJo3RPkfcAphFAu2x4T0qfcDNkkoSVI=
# Адрес и маска [Peer] должны быть одинаковыми и на клиенте и на сервере
Address = 10.0.0.3/32
DNS = 8.8.8.8
[Peer]
#PublicKey = SERVER_PUBLIC_KEY
#cat /etc/wireguard/pubkey
PublicKey = poBHB3BuLmHI6Q7tWKS0Wur3MTMoxBYbO2dE3Jn6+V0=
#Endpoint = SERVER_IP_ADDRESS:PORT
Endpoint = mail.ekzorchik.com:31194
AllowedIPs = 0.0.0.0/0
#Key connection alive ##
PersistentKeepalive = 15

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

ekzorchik@srv-us2204a:~$ sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}

Шаг №9: Прописываю/добавляю еще одну секцию peer клиента подключения на сервере wireguard:

root@ekzorchik:~# sudo nano /etc/wireguard/wg0.conf
[Peer]
PublicKey = Nm2kJ6cUSbV11DZtn8awXKd9A6yoKzdAuFC0T+LQGE8=
AllowedIPs = 10.0.0.3/32, 172.33.2.0/24
root@ekzorchik:~# sudo wg-quick down wg0 && sudo wg-quick up wg0

Шаг №10: Инициирую подключение клиента к серверу:

ekzorchik@srv-us2204a:~$ sudo wg-quick down wg0 && sudo wg-quick up wg0
ekzorchik@srv-us2204a:~$ sudo wg show wg0

Успешно инициированное подключение к серверу Wireguard

Шаг №11: Перезагружаю клиента srv-us2204a

sudo reboot

Шаг №12: Настраиваю запуск клиента на поднятие интерфейса wg0 дабы подключаться к VPN серверу на системе Ubuntu 22.04 Server:

sudo systemctl enable wg-quick@wg0.service
sudo systemctl start wg-quick@wg0.service && sudo systemctl status wg-quick@wg0.service

Настраиваю запуск клиента на поднятие интерфейса wg0 дабы подключаться к VPN серверу

и доступ у клиентской системы в интернет осуществляется также через систему, на которой установлен wireguard сервер

Шаг №13: Проверяю с сервера где развернут Wireguard сервер что вижу клиента, т.е. адрес, присвоенный в VPNсети и адрес самого клиента, т.е. 172.33.2.15

root@ekzorchik:~# ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=8.71 ms
^C
--- 10.0.0.3 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 8.714/8.714/8.714/0.000 ms
root@ekzorchik:~# ping 172.33.2.15
PING 172.33.2.15 (172.33.2.15) 56(84) bytes of data.
64 bytes from 172.33.2.15: icmp_seq=1 ttl=64 time=5.55 ms
64 bytes from 172.33.2.15: icmp_seq=2 ttl=64 time=4.21 ms
^C
--- 172.33.2.15 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 4.210/4.882/5.554/0.672 ms
root@ekzorchik:~#

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

Заметки продолжаются.

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

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.