И все-таки я решил писать сначала в нашу любимую секту, а затем, по мотивам постов в IDEC, уже написать пост в свой бложик.
Итак, в этом посте я расскажу про Wireguard.
Wireguard -- это FOSS, а так же протокол, который реализует VPN. Реализация полностью ядерная, по-этому у wireguard лучшая производительность по сравнению с OpenVPN.
На самом деле, у меня был рабочий OpenVPN между моими тремя виртуалками и все это работало. Но я пропустил момент когда у меня протухли сертификаты, все отвалилось и находилось в разваленном состоянии несколько месяцев. Потом я обновил свои Дебианы до десятки и решил, что хватит это терпеть -- жизнь без VPN. Снес OpenVPN и засетапил Wireguard.
Для Debian Wireguard пока не завезли в стейбл, по-этому ставить его нужно из unstable.
# echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
# printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' > /etc/apt/preferences.d/limit-unstable
# apt update
# apt install wireguard
WG собран подо все мейнстримные дистрибутивы. Переходим по ссылке
https://www.wireguard.com/install/ и ставим на свою ось.
И так, схема сети у нас следующая:
+---------+ +----------+
| VM1 | | VM2 |
|10.10.2.1|<------>|10.10.2.2 |
+---------+ +----------+
^ ^
| |
| +------------+ |
+--->| VM3 |<----+
| 10.10.2.3 |
+------------+
Сначала на каждом из хостов нужно сгенерировать приватный ключ:
# mkdir -p /etc/wireguard
# chmod 700 /etc/wireguard
# cd /etc/wireguard
# wg genkey > privkey
# chmod 600 privkey
Теперь напишем начальную конфигурацию(одинаково на всех хостах) в /etc/wireguard/wg.conf:
[Interface]
ListenPort = 36483
PrivateKey = <privkey from /etc/wireguard/privkey>
Поднимаем интерфейс и применяем конфиг:
ip link add dev wg0 type wireguard
ip address add dev wg1 10.10.2.1/24
wg setconf wg0 /etc/wireguard/wg.conf
Проверяем, что интерфейс поднялся и порт слушается:
# wg
interface: wg0
public key: dNl19y5MAjfuAVqTwW9zx1u5lbtbxVpJZTbOaB9SgwE=
private key: (hidden)
listening port: 36485
Отлично! Теперь нужно прописать наших пиров.
Получить публичный ключ можно набрав комманду wg и скопипастить из вывода, либо получить публичный ключ из приватного:
wg pubkey < privkey > pubkey
[Interface]
ListenPort = 36483
PrivateKey = <HIDDEN>
[Peer]
PublicKey = hDvzIb2iRdjpfx9nJpTS471AqROYjGzPBAZ09p6L4wg=
AllowedIPs = 10.10.2.2/32
Endpoint = inet.ip4.a.ddr:50820
[Peer]
PublicKey = 8IhODKK4+fU2VHtZzqioswQcpu727Wo18HbNHytzEGY=
AllowedIPs = 10.10.2.3/32
Endpoint = inet.ip4.a.ddr:50919
По аналогии делаем на других двух хостах. В AllowedIPs в секции пира прописываем адрес, который мы навесили на интерфейс wg0.
Поднимаем интерфейс:
ip link set up dev wg0
После этого по комманде wg должна быть примерно следующая картина:
interface: wg0
public key: dNl19y5MAjfuAVqTwW9zx1u5lbtbxVpJZTbOaB9SgwE=
private key: (hidden)
listening port: 36485
peer: 8IhODKK4+fU2VHtZzqioswQcpu727Wo18HbNHytzEGY=
endpoint: inet.ip4.a.ddr:51820
allowed ips: 10.10.2.2/32
latest handshake: 19 seconds ago
transfer: 16.64 GiB received, 15.18 GiB sent
peer: hDvzIb2iRdjpfx9nJpTS471AqROYjGzPBAZ09p6L4wg=
endpoint: inet.ip4.a.ddr:50919
allowed ips: 10.10.2.3/32
latest handshake: 1 minute, 41 seconds ago
transfer: 18.71 GiB received, 16.91 GiB sent
Все это только что мы делали руками, по-этому после рубута тачки ничего не поднимется волшебным образом. Напишем юнит /etc/systemd/system/wg.service
[Unit]
Description=Wireguard VPN
After=network-online.target
[Service]
Type=oneshot
ExecStartPre=-/sbin/ip link add dev wg0 type wireguard
ExecStartPre=-/sbin/ip address add dev wg0 10.10.2.1/24
ExecStartPre=/usr/bin/wg setconf wg0 /etc/wireguard/wg.conf
ExecStart=/sbin/ip link set up dev wg0
[Install]
WantedBy=default.target
Включаем:
systemctl daemon-reload
systemctl enable wg.service
На этом все. Надеюсь пост был кому-то полезен.