И все-таки я решил писать сначала в нашу любимую секту, а затем, по мотивам постов в 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
На этом все. Надеюсь пост был кому-то полезен.
+++ At work. idec.el/0.1