#  Про Wireguard
Difrex (dynamic,1) → All  –  08:04:31 2020-02-04

И все-таки я решил писать сначала в нашу любимую секту, а затем, по мотивам постов в 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