@OSBoy

Как настроить Wireguard на OpenWRT, чтобы соединение автоматически восстанавливалось после разрыва соединения?

Есть два роутера под управлением OpenWRT, между ними настроен VPN туннель Wireguard. Изначально оединение устанавливается без проблем.
Суть проблемы в том, что после каждого отключения роутера на "клиентской" стороне, соединение не восстанавливается до тех пор, пока не перезапустишь вручную Wireguard интерфейс на "серверной" стороне.
Что нужно поменять/добавить в конфигах, или какой можно добавить костыль, чтобы соединение восстанавливалось автоматически?
Конфиг на стороне сервера:
config interface 'WG'
<------>option proto 'wireguard'
<------>option private_key 'XXXXXX'
<------>option listen_port '51820'
<------>list addresses '10.0.9.1/24'
<------>option delegate '0'

config wireguard_WG 'client1'
<------>option public_key 'XXXXXX'
<------>option preshared_key 'XXXXXX'
<------>list allowed_ips '10.0.9.2/32'
<------>option description 'client1'


Конфиг на стороне клиента:
config interface 'WG'
<------>option proto 'wireguard'
<------>option private_key 'XXXXXX'
<------>list addresses '10.0.9.2/24'
<------>option delegate '0'

config wireguard_WG 'my_server'
<------>option public_key 'XXXXXX'
<------>option preshared_key 'XXXXXX'
<------>option endpoint_host '192.168.XX.XX'
<------>option endpoint_port '51820'
<------>option route_allowed_ips '1'
<------>option persistent_keepalive '25'
<------>list allowed_ips '0.0.0.0/0'
<------>option description 'My-WG-sever'
  • Вопрос задан
  • 282 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Pumbax
#! /usr/bin/env sh

host="у меня тут адрес сервера"
wait=10
max_tries=3

up_cmd="ifup wg0"
down_cmd="ifdown wg0"

# --------------------

log="logger -t wg-if-up"
host_status="down"
try=1
err=""

[ -n "$host" ] || err="No host specified"
[ -n "$up_cmd" ] || err="No up command specified"
[ -n "$down_cmd" ] || err="No down command specified"
[ -z "$err" ] || { $log "$err"; exit 1; }

while :; do
  case $host_status in
    up)
      while ping -c 1 -W 1 $host > /dev/null; do
        try=1
        sleep $wait
      done

      $log "No connection to $host detected (try $try)"

      if [ $try -lt $max_tries ]; then
        try=$(( try + 1 ))
        continue
      fi

      host_status="down"
      $down_cmd
      ;;

    down)
      until ping -c 1 -W 1 $host > /dev/null; do
        sleep $wait
      done

      try=1
      host_status="up"
      $up_cmd
      ;;
  esac

  $log "Host $host $host_status"
  sleep $wait


этот скрипт добавлен в автозагрузку сюда
ifup (wg0) имя интерфейса wireguard

Автор скрипта shvchk
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы