LINUX.ORG.RU
решено ФорумAdmin

wireguard делать что-то при появлении peer

 ,


0

1

Хочу на сервере выполнять скрипт при подключении peer к WG, перерыл документацию wg, вроде нет такого параметра.

Но вдруг я плохо смотрю, или поделитесь идеями как можно того-же добиться. До cron к примеру я додумался, может ещё что-то?

Зачем?
Есть у меня N микротиков за серыми IP и VPS. Читая https://programmerall.com/article/58262052453/ и https://github.com/jwhited/wgsd адаптировал эту конструцию для микротиков.

Теперь надо когда на VPS подключается peer(или когда его endpoint меняется) пройтись по всем доступным на момент микротикам и актуализировать их endpoint.

★★
Ответ на: комментарий от Anoxemian

Ну собственно тот-же wgsd клиентская часть по cron и запускается.

Вот только сторона сервера как-то понимает, что клиент появился и создаёт DNS запись, но моих знаний go не хватило чтобы пробежавшись по их коду понять как это происходит.

Если там есть API для такого, то что-то на python я наколхожу…

cron пока единственный вариант из доступных, хотелось бы без него чтобы обновление происходило сразу, а не через когда там cron отработает

Flotsky ★★
() автор топика
Ответ на: комментарий от MagicMirror

Умеет? Не видел, ну если да, то стоит выяснить механизм.

P.S. Так-то wg-quick башпортянка в одну сторону, очень сомнительно.

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от MagicMirror

Если вы про SaveConfig, то это не при подключении пира, а «the configuration is saved from the current state of the interface upon shutdown»

Даже проверил. Подключился с телефона, в # wg show инфо о пире обновилось, а вот wg0.conf не поменялся

Увы

Flotsky ★★
() автор топика
Ответ на: комментарий от vel

Я что-то делаю не так?

  1. Иду на сервер, запускаю # ip monitor
  2. Иду на клиента(телефон), включаю wg тоннель
  3. ???
    наверное что-то должно появиться в выхлопе ip monitor, но ничего.

PS. Он же вроде следит за изменениями в маршрутах/интерфейсах/… но при подключении wg peer ничего из этого не меняется.

Flotsky ★★
() автор топика
Ответ на: комментарий от anc

PostUp не то. Интерфейс уже поднят и используется.

Мне надо поймать момент, когда peer подключается к серверу.

Т.е. когда

peer: ...
  endpoint: IP:PORT
  allowed ips: ...

Переходит в состояние

peer: ...
  endpoint: IP:PORT
  allowed ips: ...
  latest handshake: ...
  transfer: 19.53 KiB received, 56.89 KiB sent

И вот в этот момент мне надо пройти по всем остальным доступным peer и актуализировать их параметры

Flotsky ★★
() автор топика
Ответ на: комментарий от vel

Ну, у меня из вариантов осталось это или cron.

Я бегло пробежался по исходникам wireguard-tools и wireguard, нет там ничего, в направлении моих хотелок. Все сторонние проекты cron используют.

Ну наверное я могу вместо cron повесить netwatch какой(ждать пока внутренний IP пира станет отвечать на ping), но чем это лучше cron?

Про из пушки по воробьям может быть, может по итогу откажусь и сделаю cron, пока интересно, покопаюсь…

Flotsky ★★
() автор топика
Ответ на: комментарий от bcon

Вы предлагаете, чтобы микротик после подключения сам сообщал о себе?

Не вижу у микротика этого функционала. Да и что поменяется? Там же та-же структура. wireguard интерфейс, который просто «активен», и peers.

Разве что тот-же netwatch повесить, но я так и на VPS могу, в чём разница?

Flotsky ★★
() автор топика
Ответ на: комментарий от vel

О логах я кстати не подумал.

Беглый гугл советует развлекаются с

# echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

или

PostUp = iptables -A FORWARD -i wg0 -j LOG --log-prefix "WireGuard: "

На серверной стороне и смотреть что упадёт в dmesg/journalctl

Flotsky ★★
() автор топика

https://www.kernel.org/doc/html/latest/trace/events.html

Ниасилил, возможно оно не умеет что мне надо.

Зато доковырял # echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control

Силами # cat /sys/kernel/debug/dynamic_debug/control | grep wireguard нашёл что за сообщения вообще могут быть и включил точечно только нужный вот так # echo module wireguard line 158 +p > /sys/kernel/debug/dynamic_debug/control

Теперь в journalctl падает «wireguard: wg0: Receiving handshake initiation from peer 30 (IP:PORT)» при подключении клиента.

Как закрепить это при загрузке читать https://docs.kernel.org/admin-guide/dynamic-debug-howto.html#debug-messages-at-module-initialization-time

Далее с навесить на логи какой-то watch я справлюсь.

Flotsky ★★
() автор топика