Про Wireguard

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

[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
Ответы на это сообщение: around (2020-02-26 04:17:50)
Difrex (2020-02-04 08:04:31) [Ответить]
Предыдущее сообщение Следующее сообщение