WireGuard: различия между версиями
Дым (обсуждение | вклад) (→Сервер) |
Дым (обсуждение | вклад) |
||
Строка 217: | Строка 217: | ||
Отслеживать текучку по {{cmd|$ journalctl -kf | grep wg}}. | Отслеживать текучку по {{cmd|$ journalctl -kf | grep wg}}. | ||
{{Памятка|'''Ниже — не моё.'''}} | |||
'''Ниже — не моё.''' | |||
=Запуск через wg-quick= | =Запуск через wg-quick= |
Версия от 05:15, 28 ноября 2023
Запуск через systemd-networkd
Запускать ваергарда в связке с systemd-networkd под Альтом проще, чем в убунтоподобных дистрибутивах с их нетпланом.
Сервер
Дальнейшее можно делать на любом лине (будь то железный комп, виртуалка или контейнер) вне зависимости от роли — сервер это, рабочая лошадка или гей-приставка.
Чтобы всё это управлялось не доп.утилитами, а непосредственно сервисом systemd-networkd
, данный сервис следует установить и запустить (см. статью), а пакеты etcnet
(касается только альта) — отодвинуть (см. ту же статью) либо снести:
# apt-get remove -y `rpm -qa --qf "%{NAME}\n" etcnet*`
Для начала сгенерим в файл пару ключей: приватный (для себя) и публичный (для тех, с кем предстоит туннелироваться). Себе для этого создал простецкий скрипт:
развернутьwgenkeys |
---|
Строчку PublicKey = <хэш нашего публичного ключа>
из файла /tmp/wgkeys рассылаем нашим партнёрам по суровому бизнесу, а строчку PrivateKey = <хэш нашего приватного ключа>
задействуем в первом из двух следующих конфигов:
развернуть/etc/systemd/network/wg.netdev |
---|
развернуть/etc/systemd/network/wg.network |
---|
Клиенты
Чтоб не мучиться с созданием конфига каждому сотруднику, нуждающемуся в доступе к локалке извне, накостылил скрипт:
развернуть/usr/local/bin/wgadd |
---|
Помимо занесения вновь сгенерированного клиента в конфиг ваергарда, он также добавляется в локальный ДНС-кэш (dnsmasq
), с которого основные внутренние ДНСы запрашивают зону .wg
— таким образом, адреса клиентов туннеля становятся видны клиентам локалки по имени.
Готовый конфиг отправляется в соответствующую тему админского телеграм-чата.
Список последних подключённых
Тоже скрипт:
развернуть/usr/local/bin/wgwho |
---|
развернутьПример вывода |
---|
Мониторинг
Для журналирования активности ядрёного модуля достаточно на [хосте / всех контейнеризаторах кластера] либо в виртуалке с ваергардом создать юнит:
развернуть/lib/systemd/system/wg-log.service |
---|
И запустить его навсегда командой # systemctl enable --now wg-log
Отслеживать текучку по $ journalctl -kf .
Запуск через wg-quick
Если еще нет пары частный-публичный ключ, ее нужно создать:
$ wg genkey > privatekey $ wg pubkey < privatekey > publickey
Теперь файл privatekey в текущей папке содержит частный ключ, а файл publickey — публичный.
Установить wg-quick
# apt-get install wireguard-tools-wg-quick
Создать в каталоге /etc/wireguard (если отсутствует, создать и его) конфигурационный файл (имя файла = имя поднятого интерфейса, в данном случае — wg0):
развернуть/etc/wireguard/wg0.conf |
---|
В конфиге сервера все клиенты должны быть указаны аналогичным образом — в качестве пиров. Да, серверу тоже нужны публичные ключи клиентов.
Запуск, останов и мониторинг соединения возможны только от рута:
# systemctl start|stop|restart wg-quick@wg0 # wg show
Запуск через NetworkManager из KDE
Принцип создания соединения аналогичен варианту для консоли: требуются те же данные, что и для конфиг-файла, но вводить их нужно в нескольких окнах.
Запускаем приложение "Параметры системы KDE5":
- Alt+F2,
- во всплывшем окне начинаем набирать systemsettings5,
- Enter на появившемся пункте.
Выбираем в окне вкладку "Соединения" (группа "Сеть и связь"), "+" для создания нового.
Во всплывшем окне:
- прокручиваем до группы "VPN-соединения",
- выбираем "WireGuard",
- нажимаем "Создать".
В окне "Новое соединение" вводим имя соединения (например, wg0, соответственно названию интерфейса). Окно открывается на вкладке "Интерфейс WireGuard", на ней в поле "личный ключ" вводим PrivateKey клиента и выбираем "Сохранить пароль только для этого пользователя (зашифрованный)".
Остальные поля можно оставить пустыми.
Далее — кнопка "Участники обмена…", во вновь появившемся окне ввести данные для пира (сервера):
- в поле "Открытый ключ" — PublicKey сервера,
- в поле "Разрешенные адреса IP" — AllowedIPs,
- в поля "Адрес подключения" и "Порт подключения" — реальный (видимый из Интернета) IP-адрес сервера с номером порта;
- поле "Интервал отправки пакетов keepalive" соответствует опции PersistentKeepalive конфига, но не сохраняется — что и не нужно: интервал задаёт сервер.
Остальные поля не нужны. Просто жмем OK.
Вкладка "IPv4":
- метод "Вручную",
- кнопка "+ Добавить",
- вводим IP-адрес клиента и маску подсети (255.255.255.255 для одиночного адреса или 0.0.0.0 для шлюза),
- галка "Для этого соединения требуется IPv4".
Вкладка "IPv6":
- метод "Отключено" (если, конечно, не используете этот протокол).
Вкладка "Основные параметры":
- снять галку "Все пользователи могут подключаться к данной сети" (так как мы всё равно выбрали хранить пароль только для этого пользователя),
- остальное оставить как есть.
Жмем "Сохранить". Теперь соединение можно подключать и отключать из иконки сетевых соединений в системном лотке.
Чтобы увидеть результат настроек в едином конфиг-файле, можно использовать команду (замените wg0 на имя вашего соединения):
# wg showconf wg0
Соединение должно быть активно.