Искал – не нашёл. Не нашёл простого скрипта, который бы давал готовые конфиги для Wireguard. Что-то похожее на просторах интернета есть, но всё не то.
И так, у меня задача следующего плана.
Есть одна VDS, которая смотрит в интернеты, а ещё есть куча сервисов, пользователей, виртуальных машин и железа за глубоким NAT’ом, и чтобы всю эту мишуру объединить в одну локалку, надо использовать Wireguard.
Наиболее часто-встречающаяся конфигурация Wireguard, это когда поднимается один сетевой интерфейс wg0 на сервере, задаётся там подсетка 192.168.1.0/24, это норм для домашнего использования, если ты подключаешь мобилу, ноут, домашний пека-роутер.
Но мне почему-то этого показалось мало. Я хочу иметь несколько разных сетевых интерфейсов Wireguard, чтобы у каждой была своя подсетка под конкретные задачи, чтобы пользователи могли видеть (или не видеть) друг друга. Одна для реальных пользователей, другая для виртуальных машин, третья для сетевых сервисов и прочих тестов. В общем, чтобы было где разгуляться.
И вот такого вот конфигуратора, который запилит мне несколько интерфейсов wg, с разными подсетями, я не нашёл. Поэтому сделал такой сам.
>>> https://github.com/spfng/wg-mass
Простой скрипт, на входе принимает два ключевых параметра:
- Список подсетей через пробел: 10.10.0 10.20.0 10.30.0
- Список IP-адресов через пробел: 1 2 3 4 5
На выходе выплёвывает конфиги для всех трёх подсеток, которые будут висеть на разных сетевых интерфейсах (wg1 wg2 wg3) и клиенты у всех трёх будут IP-адреса заканчивающиеся на 1, 2, 3, 4 и 5.
Всё просто.
Вот с какими параметрами можно запустить скрипт:
# env \
WG_DIRECTORY="/etc/wireguard"
WG_NETWORK="10.10.0 10.20.0 10.30.0" \
WG_ADDRESS="$(seq 1 50)" \
WG_SERVER_HOST="$(curl ifconfig.me/ip)" \
./wg-mass.sh
WG_DIRECTORY – рабочая директория, по-умолчанию mktemp -d
, можно вручную задать сразу /etc/wireguard.
WG_NETWORK – список подсетей через пробел для создания конфигураций.
WG_ADDRESS – список IP-адресов через пробел, все эти клиенты будут созданы на всех указанных подсетях.
WG_SERVER_HOST – установить имя хоста сервера, можно сразу IP-адрес сервера или задать что-то своё. По-умолчанию выполняется hostname -f
из расчёта на то, что у вас порядок в системе.
WG_SERVER_PORT – задаёт номер порта, на котором будет работать Wireguard. Когда подсетей, а значит и сетевых интерфейсов создаётся несколько, то выполняется инкремент +1 к номеру порта.
В результате выполнения команды выше, будет создана конфигурация для трёх сетевых интерфейсов:
-
wg1 (10.10.0.1/24) с клиентами, чьи IP-адреса имеют пространство от 2 до 50.
-
wg2 (10.20.0.1/24) с клиентами, чьи IP-адреса имеют пространство от 2 до 50.
-
wg3 (10.30.0.1/24) с клиентами, чьи IP-адреса имеют пространство от 2 до 50.
Итого 150 клиентов на трёх разных подсетях на трёх разных интерфейсах!
Первый IP-адрес всегда становится сервером, но это не обязательно именно 10.0.0.1/24, т.е. если в начале списка IP-адресов указать 254, то сервер будет иметь адрес 10.0.0.254/24, а всё что дальше по списку– это уже будут клиенты.
Ещё один момент, что я хочу создать сперва 3 подсетки по 50 клиентов, а потом хочу создать ещё 3 подсетки на 10 клиентов, т.е. чтобы конфигурация не перезаписывалась, а инкремент продолжался, сделана опция WG_CONFIG_COUNT_FROM. То есть, в данном случае у нас уже сделано 3 подсетки, теперь добавим ещё три.
# env \
WG_DIRECTORY="/etc/wireguard"
WG_NETWORK="10.40.0 10.50.0 10.60.0" \
WG_ADDRESS="1 2 3 4 5 6 7 8 9 10" \
WG_SERVER_HOST="$(curl ifconfig.me/ip)" \
WG_CONFIG_COUNT_FROM="3" \
./wg-mass.sh
И теперь будут добавлены ещё три подсети, но дополнительные, далее по списку:
-
wg4 (10.40.0.1/24) с клиентами, чьи IP-адреса имеют пространство от 2 до 10.
-
wg5 (10.50.0.1/24) с клиентами, чьи IP-адреса имеют пространство от 2 до 10.
-
wg6 (10.60.0.1/24) с клиентами, чьи IP-адреса имеют пространство от 2 до 10.
Может вам это вообще нафиг всё не нужно и вам нужен просто тупо конфиг по-быстрому развернуть для мобилы и ноутбука. Да не вопрос.
# env \
WG_DIRECTORY="/etc/wireguard" \
WG_NETWORK="192.168.1" \
WG_ADDRESS="1 2 3" \
WG_SERVER_HOST="$(curl ifconfig.me/ip)" \
./wg-mass.sh
# systemctl enable --now wg-quick@wg1
# qrencode -t ansiutf8 < /etc/wireguard/client-192-168-1-3.conf
192.168.1.1/24 это будет сервер (/etc/wireguard/wg1.conf)
192.168.1.2/24 это будет ноутбук (/etc/wireguard/client-192-168-1-2.conf)
192.168.1.3/24 это будет мобильник (/etc/wireguard/client-192-168-1-3.conf)
Всего одной командой создали конфигурацию, активировали и командой qrencode
получили QR-код для приложения на смартфоне.
Вот так вот.