Изменяем текущий 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
(как клиент)
Шаг №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
Шаг №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
и доступ у клиентской системы в интернет осуществляется также через систему, на которой установлен 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.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.