Вопрос или проблема
У меня есть около 20 конфигурационных файлов для WireGuard. Я бы хотел выбирать случайный файл конфигурации каждый раз, когда перезагружаю компьютер. (Перезапуск службы)
Было бы также неплохо, если бы при потере соединения служба перезапускалась и выбирала новую конфигурацию случайным образом.
Таким образом, то, что я ищу:
Служба, которая выбирает случайную конфигурацию, но имя интерфейса всегда остается одинаковым, независимо от того, какая конфигурация используется.
Возможно, есть и другие способы, но самый простой, чтобы достичь того, что вам нужно, — это просто импортировать все файлы
for f in *.conf; do nmcli connection import type wireguard file "$f"; done
А затем ваше решение сводится к скрипту, который получает все имена соединений и выполняет nmcli connection up <conn_name>
для случайного. Что-то вроде этого:
#!/bin/bash
output=$(nmcli connection show | grep wireguard)
nmcli connection up $(echo "$output" | shuf -n 1 | awk '{print $1}')
Теперь вы просто оборачиваете это в systemd service
, что-то вроде
[Install]
WantedBy=default.target
[Service]
Type=oneshot
ExecStart=/path/to/script
Было бы также неплохо, если бы при потере соединения служба перезапускалась и выбирала новую конфигурацию случайным образом.
Есть два способа, как это можно реализовать. Один — с помощью хуков NetworkManager. Например, у меня есть такой скрипт для подключения к офисной сети:
λ cat /etc/NetworkManager/dispatcher.d/10-baum-root-remount.sh
#!/bin/bash
if [[ "$CONNECTION_ID" =~ Baum ]]; then
if [ $NM_DISPATCHER_ACTION = up ]; then
mount -o remount,compress=zstd:10 /
elif [ $NM_DISPATCHER_ACTION = down ]; then
mount -o remount,compress=zstd:5 /
fi
fi
Другой — вы можете сделать ваш скрипт службой с Type=simple
, которая будет постоянно пинговать сеть и перезапускать ее, если соединение исчезло.
Ответ или решение
Для решения задачи выбора случайного конфигурационного файла WireGuard при каждой перезагрузке компьютера и при потере соединения, можно использовать комбинацию скриптов и системных служб. Позвольте выразить решение этой задачи поэтапно, с учетом всех необходимых нюансов и технических аспектов.
Шаг 1: Импорт конфигурационных файлов
Для начала необходимо импортировать все WireGuard конфигурационные файлы с помощью команды nmcli
, чтобы они были доступны для подключения. Это можно сделать с помощью следующего скрипта:
#!/bin/bash
# Импорт всех конфигурационных файлов WireGuard
for f in /etc/wireguard/*.conf; do
nmcli connection import type wireguard file "$f"
done
Не забудьте указать правильный путь до ваших конфигурационных файлов.
Шаг 2: Выбор случайного подключения
Следующий шаг — это создание скрипта, который будет выбирать случайное WireGuard подключение и активировать его:
#!/bin/bash
# Извлечение списка подключений WireGuard
output=$(nmcli connection show | grep wireguard)
# Выбор случайного подключения и его активация
nmcli connection up $(echo "$output" | shuf -n 1 | awk '{print $1}')
Шаг 3: Настройка Systemd службы
Создайте Systemd-скрипт для автоматического выполнения предыдущего скрипта при загрузке системы и перезапуске в случае потери соединения.
Файл /etc/systemd/system/wireguard-random.service
должен содержать следующее:
[Unit]
Description=Случайное подключение WireGuard при старте
[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
Не забудьте заменить /path/to/your/script.sh
на фактический путь к вашему скрипту.
Шаг 4: Обработка сбоя соединения
Чтобы повторно подключиться при потере соединения, можно использовать NetworkManager hooks или запустить службу ping-проверки:
Вариант 1: NetworkManager hooks
Создайте скрипт в /etc/NetworkManager/dispatcher.d/
, который будет срабатывать при изменении состояния сети. Например:
#!/bin/bash
if [ "$NM_DISPATCHER_ACTION" == "down" ]; then
systemctl restart wireguard-random.service
fi
Вариант 2: Пинг-проверка
Создайте службу типа simple
, которая будет непрерывно проверять соединение и перезапускать его при обнаружении сбоя:
#!/bin/bash
while true; do
ping -c 1 8.8.8.8 > /dev/null
if [ $? -ne 0 ]; then
systemctl restart wireguard-random.service
fi
sleep 60
done
Оптимизация для SEO и профессиональное оформление помогут вам наладить стабильный и безопасный процесс подключения WireGuard, обеспечивая надежность и устойчивость к сбоям соединений.