WireGuard: различия между версиями
Дым (обсуждение | вклад) |
Дым (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
'''Запускать ваергарда в связке с systemd-networkd под Альтом проще, чем во многих других дистрибутивах.''' | '''Запускать ваергарда в связке с systemd-networkd под Альтом проще, чем во многих других дистрибутивах.''' | ||
= | =(Условный) сервер= | ||
Всего пара файлов: | Всего пара файлов: | ||
#<code>/etc/systemd/network/wg.netdev</code> | #<code>/etc/systemd/network/wg.netdev</code> | ||
Строка 32: | Строка 32: | ||
Destination = 192.168.1.0/24 | Destination = 192.168.1.0/24 | ||
Gateway = 192.168.123.102 | Gateway = 192.168.123.102 | ||
</source> | |||
=Клиенты= | |||
Чтоб не мучиться с созданием конфига каждому сотруднику, нуждающемуся в доступе к локалке извне, накропал скрипт: | |||
<source lang="bash"> | |||
#!/bin/bash | |||
[ "$#" -gt 1 ] || { | |||
echo "Type 1) new key name without spaces and oversymbols and 2) device (mobile, windows or linux)!" | |||
exit | |||
} | |||
Who=$1 | |||
What=$2 | |||
Conf=$Who-$What | |||
Net=192.168.123 | |||
Priv=`wg genkey` | |||
Publ=`echo "$Priv" | wg pubkey` | |||
IP=$[`cat ./# `-1] | |||
echo $IP >"./#" | |||
# ./# — это файл с обратным отсчётом IP-адреса в последнем октете | |||
Content="[Peer] | |||
PublicKey = EfhB+eUjbQToU4Uqk8HoTckRJvAQavrSXqSYuKKivBY= | |||
Endpoint = 188.168.20.182:47429 | |||
PersistentKeepalive = 25 | |||
AllowedIPs = 10.0.1.0/24 | |||
[Interface] | |||
PrivateKey = $Priv | |||
Address = $Net.$IP/24 | |||
DNS = 10.0.1.4, 10.0.1.6, workgroup.mirtechniki.ru" | |||
case "$What" in | |||
mobile) # создание кукарекода из сгенерённого конфига для отправки его мобильному клиенту | |||
echo "$Content" | qrencode -t ansiutf8 >$Conf.qr | |||
cat $Conf.qr | |||
;; | |||
*) echo "$Content" >$Conf.ini | |||
esac | |||
NewDev=" | |||
[WireGuardPeer] | |||
# $Who, $What | |||
AllowedIPs = $Net.$IP/32 | |||
PublicKey = $Publ | |||
" | |||
#printf "\n# $Who, $What\n[WireGuardPeer]\nAllowedIPs\t= $Net.$IP/32\nPublicKey\t= $Publ\n" >>../wg.netdev && { | |||
echo "$NewDev" >>../wg.netdev && { | |||
echo "$Net.$IP $Who.wg" >>/etc/hosts | |||
systemctl daemon-reload | |||
systemctl reload dnsmasq | |||
systemctl restart systemd-networkd | |||
} | |||
</source> | </source> | ||
=Мониторинг= | =Мониторинг= |
Версия от 06:33, 17 марта 2022
Запускать ваергарда в связке с systemd-networkd под Альтом проще, чем во многих других дистрибутивах.
(Условный) сервер
Всего пара файлов:
/etc/systemd/network/wg.netdev
[NetDev] Name = wg Kind = wireguard # Сервер [WireGuard] ListenPort = 51820 PrivateKey = <хэш той же длины, что и у публичного ключа> # Клиент, которых может быть ощутимо больше одного [WireGuardPeer] PublicKey = FFly+CQaj1E2uVvGe4KIAOKn9238rxS/IOVQ2+JYDzs= AllowedIPs = 192.168.123.78/32,192.168.2.0/24 # Первый адрес — сам клиент, второй — его внутренняя сеть.
/etc/systemd/network/wg.network
[Match] Name = wg # Сеть как для взаимодействия с клиентами, так и им между собой [Network] Address = 192.168.123.182/24 # Пример маршрутизации к одному из таких клиентов [Route] Destination = 192.168.1.0/24 Gateway = 192.168.123.102
Клиенты
Чтоб не мучиться с созданием конфига каждому сотруднику, нуждающемуся в доступе к локалке извне, накропал скрипт:
#!/bin/bash
[ "$#" -gt 1 ] || {
echo "Type 1) new key name without spaces and oversymbols and 2) device (mobile, windows or linux)!"
exit
}
Who=$1
What=$2
Conf=$Who-$What
Net=192.168.123
Priv=`wg genkey`
Publ=`echo "$Priv" | wg pubkey`
IP=$[`cat ./# `-1]
echo $IP >"./#"
# ./# — это файл с обратным отсчётом IP-адреса в последнем октете
Content="[Peer]
PublicKey = EfhB+eUjbQToU4Uqk8HoTckRJvAQavrSXqSYuKKivBY=
Endpoint = 188.168.20.182:47429
PersistentKeepalive = 25
AllowedIPs = 10.0.1.0/24
[Interface]
PrivateKey = $Priv
Address = $Net.$IP/24
DNS = 10.0.1.4, 10.0.1.6, workgroup.mirtechniki.ru"
case "$What" in
mobile) # создание кукарекода из сгенерённого конфига для отправки его мобильному клиенту
echo "$Content" | qrencode -t ansiutf8 >$Conf.qr
cat $Conf.qr
;;
*) echo "$Content" >$Conf.ini
esac
NewDev="
[WireGuardPeer]
# $Who, $What
AllowedIPs = $Net.$IP/32
PublicKey = $Publ
"
#printf "\n# $Who, $What\n[WireGuardPeer]\nAllowedIPs\t= $Net.$IP/32\nPublicKey\t= $Publ\n" >>../wg.netdev && {
echo "$NewDev" >>../wg.netdev && {
echo "$Net.$IP $Who.wg" >>/etc/hosts
systemctl daemon-reload
systemctl reload dnsmasq
systemctl restart systemd-networkd
}
Мониторинг
Для журналирования активности ядрёного модуля достаточно создать [на «железе» / в виртуалке] либо [на хост-системе / всех узлах кластера контейнеризации] с ваергардом юнит /lib/systemd/system/wg-log.service
:
[Unit]
Description = WireGuard events logging
ConditionPathExists = /sys/kernel/debug/dynamic_debug/control
ConditionPathIsDirectory = /sys/module/wireguard
After = network.target systemd-modules-load.service
[Service]
Type = oneshot
RemainAfterExit = yes
ExecStart = echo module wireguard +p >/sys/kernel/debug/dynamic_debug/control
[Install]
WantedBy = multi-user.target
И запустить его навсегда командой # systemctl enable --now wg-log
Отслеживать текучку по journalctl -kf
.