Я постараюсь максимально кратко описать, как настроить wireguard для работы.

Немного общей информации, чтобы было понимание, как это работает и как настраивается. Если в общих словах это очень похоже на ssh соединение, так как используются пары закрытых и открытых ключей для инициализации соединения. Так что в общих словах. Мы установим клиент-сервер приложения, сгенерируем пары ключей для сервера и для клиентов, напишем простые конфигурации и всё. WireGuard и правда мега простой в настройке VPN.

Сервер

Устанавливаем wireguard для вашей платформы - https://www.wireguard.com/install/

Создаем ключи для сервера и для клиента(ов)

wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
wg genkey | tee wg-client-private.key |  wg pubkey > wg-client-public.key
...
wg genkey | tee wg-clientN-private.key |  wg pubkey > wg-clientN-public.key

Создаем файл конфигурации сервера

/etc/wireguard/wg0.conf

[Interface]
# IP адресс внутренней сети VPN можете указать свой в доступных диапазонах, не забудьте поменять в AllowedIPs тоже!
# 10.0.0.0 – 10.255.255.255
# 172.16.0.0 – 172.31.255.255
# 192.168.0.0 – 192.168.255.255
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <Копируем сюда содержимое wg-server-private.key>
# Добавляем NAT роутинг между нашей VPN сетью и сетью с интернетом
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
# Anton-iOS // Тут можно подписать чей ключ, если нужно будет удалить
PublicKey = <Копируем сюда содержимое wg-client-public.key>
# Адрес который будет у подключеного клиента
AllowedIPs = 10.0.0.2/32

[Peer]
# Заготовка для новых клиентов
PublicKey = <Копируем сюда содержимое wg-new-client(N)-public.key>
# Адрес который будет у подключеного клиента, должен отличаться от предыдущих
AllowedIPs = 10.0.0.3/32

Заменить eth0 на другой если отличается, ifconfig в помощь, у нужного интерфейса совпадает inet с IP сервера

Поднимаем сеть
sudo wg-quick up wg0  (eсли нужно выключить то sudo wg-quick down wg0)

Открываем FireWall (если он у вас есть)
sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Прописываем автозапуск
sudo systemctl enable wg-quick@wg0.service

Клиент

  1. Создаем аналогичную конфигурацию на клиенте

/etc/wireguard/wg0.conf

[Interface]
# На клиенте сервер и клиент меняются местами так сказать
# Тот же самый адрес, который для для данного клиента в конфигурации сервера, но другая маска  
Address = 10.0.0.2/24
PrivateKey = <Копируем сюда содержимое wg-client-private.key>
DNS = 8.8.8.8
# MTU = 1500 # Если нужно спрятать факт туннеля

[Peer]
# А тут описываем сервер 
PublicKey = <Копируем сюда содержимое wg-server-public.key>
AllowedIPs = 10.0.0.0/24
Endpoint = АДРЕС_СЕРВЕРА:51820

Для ПостРОителей сетей. Если нужно указать, что за VPN не одна сеть, а несколько:
AllowedIPs = 10.0.0.0/24, 192.168.0.0/24, 192.168.10.0/24
Если нужно весь трафик пересылать в туннеле то
AllowedIPs = 0.0.0.0/0

Пример для мобильного устройства

# Anton-iOS
[Interface]
Address = 10.0.0.3/24
PrivateKey = <Копируем сюда содержимое wg-mobile-private.key>
DNS = 8.8.8.8,9.9.9.9 # Можно указать ваши любимые DNS
# MTU = 1500 # Если нужно спрятать факт туннеля
        
[Peer]
PublicKey = <Копируем сюда содержимое wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = АДРЕС_СЕРВЕРА:51820

2. Поднимаем соединение
sudo wg-quick up wg0

3*. Как создать QR code
sudo apt install qrencode
qrencode -t ansiutf8 < mobile.conf выведет QR-код в консоль
или
qrencode -o mobile.png < mobile.conf чтобы создать картинку для пересылки.

Вот и всё, кайф wireguard ещё и в приложении на телефоне, которое может смотреть к какой сети вы подключены и автоматически включать VPN если вы не дома. Это то чем обычно я пользуюсь. А так же ест намного меньше батарейки, чем тот же openVPN, который был у меня до.

Бонус для тех, кто хочет спрятаться от средств обнаружения туннеля

В статье есть закомментированный блок MTU, его нужно раскомментировать.
А чтобы спрятаться от "Определение туннеля (двусторонний пинг)" добавьте правило.

iptables -A INPUT --proto icmp -j DROP

Внимание! Сервер перестанет отвечать на команду ping при этом, больше ничего не измениться.

PS. Конечно же, уже появились скрипты, когда его просто можно скопировать и управлять всем из скрипта, как это у меня было с OpenVPN
На ваш выбор 2 скрипта
1. Популярный https://github.com/angristan/wireguard-install
2. От создателя скрипта для OpenVPN https://github.com/Nyr/wireguard-install