И еще про wireguard
Jan. 16th, 2022 08:33 pmПрикинул тут, что для того, чтобы удобно пользоваться wireguard мне нужен скрипт, который умеет следующее
- Добаить узел. Указывается hostname, скрипт назначает неиспользуемые ipv4 и ipv6 адреса, прописывает A и AAAA записи в соответствующую зону DNS на том же сервере, генерирует ключи и выдает готовый конфиг клиента, либо в виде текста, либо в виде qr-кода. Можно кроме hostname указать открытый ключ. Тогда вернут конфиг без приватного ключа. Типа сам сгенерил, сам и прописывай.
- Удалить узел. Указывается hostname, удаляется соответствующий раздел Peer из конфига, удаляются записи из DNS.
- Обновить ключ узла (на случай утраты/компрометации приватного ключа) - либо генерирует новую ключевую пару и выдает новый конфиг, идентичный предыдущему, за исключением PrivateKey, либо просто прописывает указанный открытый ключ
Upd По результатам чтения рекомендованного в комментах скрипта easy-wg-quick пришел к выводу что нужна еще команда инициализации сети, получающая на вход только те параметры, которые должны быть заданы админом, и создающая конфиг для сервера(хаба) и ключи для него же.
Все параметры, требуемые этому скрипту, но не специфицированные для самого wireguard, можно хранить в серверном конфиге в виде комментариев. Хотя надо посмотреть как отнесется wg к лишним секциям в конфиге. Может проигнорирует.
Таких параметров надо
- Способ обновления DNS - редактируем зону bind, конфиг dnsmasq dnsmasq, используем nsupdate для работы с зоной.
- Имя зоны. Нужно для nsupdate и dnsmasq. Впрочем bind не поплохеет от полных имен с точкой на конце.
- Путь к файлу зоны/конфигу dnsmasq
- Имя файла ключа для nsupdate (если используется он)
- Диапазон IP, в котором выделяются адреса для peer-ов.
- Диапазон IPv6, в котором выделяются адреса для peer-ов.
- Набор routes которые прописываются в PostUp команду клиентского конфига. С ментрикой явно большей, чем у дефлотногй dhcp.
no subject
Date: 2022-01-16 06:32 pm (UTC)no subject
Date: 2022-01-16 07:38 pm (UTC)Спасибо, интересная штука, почитаю, изучу что люди испольуют. Хотя я тут сразу вижу, что нет поддержки регистрации назначенных адресов в DNS. Ну и система конфигурации с отдельным файлом на каждый параметер мне тоже кажется несколько неудачной. Я бы, если бы я такоае писал на шелле, сделал конфигурационныый файл тоже на шелле, который читается командой точка. И все эти параметры определял как шелловские переменные.
Но на мой взгляд, более 500 строк это размер скрипта, требующий использования более другого языка, чем shell - python или Perl. Опять же эти языки куда лучше приспособлены для генерации текстовых файлов, чем shell.
no subject
Date: 2022-01-17 05:08 am (UTC)Так-то для конфигов yaml рулит и педалит, да. См. тот же netplan.
no subject
Date: 2022-01-17 05:21 am (UTC)У нас - тоже. И по той же причине. Но для данной задачи эта причина не может считаться важной. Ведь этот скрипт будет выполняться только на центральном узле сети, работающей по схеме "звезда".
Интерпретаторы питона и перла в базовый комплект любого дистрибутива входят. Иногда, правда, с порезанной стандартной библиоеткаой. Но, скаежм, дебиановский пакет python3-minimal содержит и argparse, и datetime, и ipaddress. Вот нафига мне от всего этого удобства отказываться?
no subject
Date: 2022-01-17 08:00 am (UTC)и я бы предпочёл что-то более "декларативное", типа того же netplan'а.
а qrencode - он и в консоли рулит.
no subject
Date: 2022-01-17 08:29 am (UTC)А мне как раз кажется "деклароативность" нетплана совершенно избыточной.
Действия "добавить узел в сеть", "удалить узел из сети", "поменять ключ узла по компрометации" - совершенно императивные по своей природе. И иметь какие-то конфиги, кроме собствено /etc/wireguard/wg0.conf мне кажется совершенно лишним.
Я вообще не понимаю идеи загнать всю сетевую конфигурацию в единую систему (хотя подходов к этому снаряду в последние годы было уже много - wicd, network-manager, systemd-networkd, вот еще дистрибутивно-специфичные netplan и etcnet). Разные сети имеют разный административный паттерн - какие-то должны включаться и выключаться обычным, непривилегированным юзером, как большинство VPN, какие-то допускают наличия рута но меняются хоть по двадцать раз на дню (виртуальные сети для контейнеров и виртуальных машин).
no subject
Date: 2022-01-17 09:12 am (UTC)Для ситуаций, когда конфиг более-менее статичен, он очень даже удобен. Я не поленился впилил туда поддержку WG и L2TP для networkd backend именно чтобы не разводить кучи файликов, и не иметь себе голову с networkd.
Разные задачи ...