WireGuard: различия между версиями
Дым (обсуждение | вклад) |
Дым (обсуждение | вклад) |
||
Строка 216: | Строка 216: | ||
{{Памятка|Ниже — не моё.}} | {{Памятка|Ниже — не моё.}} | ||
=Запуск через wg-quick= | =Запуск через wg-quick= | ||
Если еще нет пары частный-публичный ключ ''(см. | Если еще нет пары частный-публичный ключ ''(см. скрипт '''wgenkeys''' выше)'', ее нужно создать: | ||
<pre> | <pre> | ||
$ wg genkey > privatekey | $ wg genkey > privatekey |
Версия от 04:49, 3 декабря 2024
Запуск через 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
Если еще нет пары частный-публичный ключ (см. скрипт wgenkeys выше), ее нужно создать:
$ 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
Соединение должно быть активно.