Home

Manual Manual WireGuard

PauFCB

Usuario
Amigo OpenSPA
26 Ago 2018
50
5
0
35
El Nas esta en la misma red local que el deco?, De ser asi desde el Nas puedes acceder al deco y viceversa?
Si todo es si, el cliente wireguard que creas en el Nas tiene permisos de acceso al Servido y Red o solo Servidor.

Salu2
La última parte tengo que verificarlo porque no se como encontrar esa parte en el NAS pero la cuestión es que usando 4G para hacer la prueba desde la app Vu+, poniendo la IP del deco me carga los canales pero no los reproduce. (Poniendo la IP local no la dyndns)
 

Stivii

Una preguntita mas.?
Fan de OpenSPA
Amigo OpenSPA
9 Ene 2021
133
8
0
41
Estoy intentando crear nuevos clientes en wireguard después de haberlos eliminado,una vez que me piden escanear por QR le doy que si pero me salta un mensaje:"QR inválido:El código escaneado no es una configuración válida de Wireguard,también lo intentando por la app añadir un túnel usando un archivo descargado y me salta un mensaje:"No se puede importar túnel:No se puede analizar Dirección IP XXX.XXX.X.XXX.CACHE en peer de Allo....
 

wberry

Presentado
Forero
21 Ago 2022
5
0
0
59
hola llevo dias probando openpa 8 y wireguard he insertado la ficha del cliente de un servidor externo pero no conecta es posible que falte alguna configuracion otros clientes con diferentes dispositivos se conectan al servidor externo
 

JR

OpenSPA Team
Miembro del equipo
Admin OpenSPA
10 Ago 2007
23.263
15.935
0
En pleno Delta
hola llevo dias probando openpa 8 y wireguard he insertado la ficha del cliente de un servidor externo pero no conecta es posible que falte alguna configuracion otros clientes con diferentes dispositivos se conectan al servidor externo
Que deco tienes?
 

wberry

Presentado
Forero
21 Ago 2022
5
0
0
59
quiero hacer una aclaracion que desde la terminal mando el comando "ifconfig" esta presente el tun wg0 el escudo es verde pero el decodificador no navega
 

Rebatman

Usuario Destacado
Fan de OpenSPA
Amigo OpenSPA
29 Ene 2012
236
21
0
Buenos días,

A mí me pasaba lo mismo, pero si en el cliente en autorización cambias servidor por s4rvidor y red (por ejemplo) verás que funciona. No se a que se debe pero pasa.

You tengo uclan ustym 4k pro twin s2x

Salu2,
 
  • Me gusta
Reactions: Riojano

wberry

Presentado
Forero
21 Ago 2022
5
0
0
59
hola, tal vez no fui claro, uso wireguard como cliente no como servidor cuando entro al certificado creado por un servidor externo y conecto el shield el boton se pone verde y rojo y via telnet el tun esta presente pero en el servidor y desconectado con estas condiciones el decodificador no tiene nivagacion, espero se pueda encontrar una solucion
 

Nozul

Usuario
Amigo OpenSPA
Forero
11 Feb 2022
33
18
0
Buenas tardes, me he encontrado con un problema que tiene Wireguard en general, no solo este plugin, el problema consiste en que si el servidor de wireguard tiene ip dinámica y por lo tanto tiene que usar DDNS, en el momento que el servidor cambia de ip el cliente no se actualiza y se produce una desconexión de la red VPN.

Tras investigar un poco encontré un script oficial de wireguard que soluciona este problema, se llama reresolve-dns.sh:
Código:
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2015-2020 Jason A. Donenfeld <[email protected]>. All Rights Reserved.

set -e
shopt -s nocasematch
shopt -s extglob
export LC_ALL=C

CONFIG_FILE="$1"
[[ $CONFIG_FILE =~ ^[a-zA-Z0-9_=+.-]{1,15}$ ]] && CONFIG_FILE="/etc/wireguard/$CONFIG_FILE.conf"
[[ $CONFIG_FILE =~ /?([a-zA-Z0-9_=+.-]{1,15})\.conf$ ]]
INTERFACE="${BASH_REMATCH[1]}"

process_peer() {
 [[ $PEER_SECTION -ne 1 || -z $PUBLIC_KEY || -z $ENDPOINT ]] && return 0
 [[ $(wg show "$INTERFACE" latest-handshakes) =~ ${PUBLIC_KEY//+/\\+}\([0-9]+) ]] || return 0
 (( ($EPOCHSECONDS - ${BASH_REMATCH[1]}) > 135 )) || return 0
 wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT"
 reset_peer_section
}

reset_peer_section() {
 PEER_SECTION=0
 PUBLIC_KEY=""
 ENDPOINT=""
}

reset_peer_section
while read -r line || [[ -n $line ]]; do
 stripped="${line%%\#*}"
 key="${stripped%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}"
 value="${stripped#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}"
 [[ $key == "["* ]] && { process_peer; reset_peer_section; }
 [[ $key == "[Peer]" ]] && PEER_SECTION=1
 if [[ $PEER_SECTION -eq 1 ]]; then
  case "$key" in
  PublicKey) PUBLIC_KEY="$value"; continue ;;
  Endpoint) ENDPOINT="$value"; continue ;;
  esac
 fi
done < "$CONFIG_FILE"
process_peer

Guardé el script en la ruta: /usr/script/
Para ejecutarlo, es suficiente con poner en la terminal:
Código:
./usr/script/reresolve-dns.sh /etc/wireguard/Wg0.conf

Y de nuevo recuperé la conexión de VPN.
Imagino que ejecutando desde cron cada X minutos el comando ya tendría solucionado el problema.

Pero me dió por ir un poco más allá y pensé que la conexión VPN también podría fallar por la conexión entre el deco y el router o incluso por pérdida de conexión de internet.
¿Como podría saber el motivo del la caída de la red VPN de forma rápida y automática?

Y se me ocurrió la idea de crear un script que se encargara de ello.
El script que voy a compartir es la unión de varios script buscados por la red adaptados a este problema que comento.
Decir que no tengo ni idea de hacer scripts, así que pido disculpas si los entendidos ven muchas burradas y les animo a que compartan que mejoras o modificaciones se les ocurren.

check_vpn_wireguard.sh:
Código:
#!/bin/sh
# Script para monitorear y recuperar conexión de red VPN WireGuard (v0.2)

# Configuración
LOG="/var/log/oscam.log"
LINEAS=4
IP_DECO="127.0.0.1"
IP_HOST="/var/local/ip_host.txt"
IP_HOST_NEW="/var/local/ip_host_new.txt"
USERWEB="root"
PASSWEB="xxxxxxx"
WEBPORT=80
ERROR="Connection timed out"
IP_ROUTER="192.168.X.1"
IP_SERVER="10.100.X.1"
IP_INTERNET="8.8.8.8"
HOST_VPN="myhost.dyndns.org"
INET_VPN="Wg0.conf"
IFACE_WG="Wg0"

# Función para manejar mensajes
send_message() {
  mensaje=$1
  timeout=$2
  wget -O /dev/null "http://$USERWEB:$PASSWEB@$IP_DECO:$WEBPORT/web/message?text=$mensaje&type=2&timeout=$timeout" -q
}

# Función para verificar conexión
check_connection() {
  ping -c 1 $1 >/dev/null 2>/dev/null
  return $?
}

# Función para restablecer la conexión VPN
reset_vpn() {
  # Detener la conexión VPN
  wg-quick down $IFACE_WG >/dev/null 2>/dev/null
  sleep 5

  # Iniciar la conexión VPN
  wg-quick up $IFACE_WG >/dev/null 2>/dev/null
  sleep 20
}

# Esperar a posible reinicio de la red y obtener IP del servidor
sleep 300
nslookup $HOST_VPN | grep "Address" | awk '{print $2}' | sed -n 2p &> $IP_HOST

# Comprobar oscam iniciado y monitorizar log
while true; do
  if [ -f "$LOG" ]; then
    count=$(tail -n $LINEAS "$LOG" | grep "$ERROR" | wc -l)
    if [ "$count" -gt "0" ]; then
      send_message "Iniciando proceso de recuperación automático" 10
      sleep 10

      # Verificar conexión con el router
      send_message "Probando conexión con router..." 10
      sleep 10
      check_connection "$IP_ROUTER"
      respuesta1=$?

      if [ $respuesta1 -eq 0 ]; then

      # Verificar conexión con internet
        send_message "¡Conexión con router OK!%0A%0AComprobando conexión con internet..." 10
        sleep 10
        check_connection "$IP_INTERNET"
        respuesta2=$?

        if [ $respuesta2 -eq 0 ]; then

          # Verificar conexión con servidor VPN
          send_message "¡Conexión con router OK!%0A¡Conexión con internet OK!%0A%0AComprobando conexión con servidor..." 10
          sleep 10
          check_connection "$IP_SERVER"
          respuesta3=$?

          if [ $respuesta3 -eq 0 ]; then
            send_message "¡Conexión con router OK!%0A¡Conexión con internet OK!%0A¡Conexión con servidor OK!%0A%0ALa conexión es estable" 10
            sleep 10
            send_message "Si no tiene imagen:%0APruebe a cambiar de canal%0AVerifique conexión antena" 10
            sleep 10

          else
            send_message "No hay conexión con el servidor VPN. Intentando restablecer..." 20

            # Restablecer la conexión VPN
            nslookup $HOST_VPN | grep "Address" | awk '{print $2}' | sed -n 2p &> $IP_HOST_NEW >/dev/null 2>/dev/null
            sleep 10
            cmp $IP_HOST $IP_HOST_NEW
            respuesta4=$?

            # IP pública actualizada en Host
            if [ $respuesta4 -eq 0 ]; then
              rm $IP_HOST_NEW
              reset_vpn
              send_message "Reiniciada interfaz VPN. Verificando la conexión nuevamente..." 10
              sleep 10
              check_connection "$IP_SERVER"
              respuesta5=$?
              if [ $respuesta5 -eq 0 ]; then
                send_message "¡Conexión con router OK!%0A¡Conexión con internet OK!%0A¡Conexión con servidor OK!%0A%0ALa conexión es estable" 10
                sleep 10
                send_message "Si no tiene imagen:%0APruebe a cambiar de canal%0AVerifique conexión antena" 10
                sleep 10
              else
                send_message "No se pudo restablecer la conexión con el servidor. Reiniciando equipo..." 10
                sleep 10
                reboot
              fi
    
            # IP pública desactualizada en Host
            else
              sh /usr/script/reresolve-dns.sh /etc/wireguard/$INET_VPN
              sleep 5
              mv $IP_HOST_NEW $IP_HOST
              sleep 5
              send_message "Actualizada IP en el Host. Verificando la conexión nuevamente..." 10
              sleep 20
              check_connection "$IP_SERVER"
              respuesta6=$?
              if [ $respuesta6 -eq 0 ]; then
                send_message "¡Conexión con router OK!%0A¡Conexión con internet OK!%0A¡Conexión con servidor OK!%0A%0ALa conexión es estable" 10
                sleep 10
                send_message "Si no tiene imagen:%0APruebe a cambiar de canal%0AVerifique conexión antena" 10
                sleep 10
              else
                send_message "No se pudo restablecer la conexión con el servidor. Reiniciando equipo..." 10
                sleep 10
                reboot
              fi
            fi
          fi
        else
          send_message "No hay conexión con internet. Compruebe que el router está encendido y todos los cables conectados. Reiniciando equipo..." 60
          sleep 60
          reboot
        fi
      else
        send_message "No hay conexión con el router. Compruebe que el router está encendido, conexión de los cables, wifi está activo, contraseña wifi es correcta. Reiniciando..." 30
        sleep 30
        reboot
      fi
    fi
  fi
  sleep 300
done

El script se guarda en /usr/script/ junto con reresolve-dns.sh

Permisos 755 a los dos script
Código:
chmod 755 reresolve-dns.sh
chmod 755 check_vpn_wireguard.sh

Habilitar log en oscam.conf:
Código:
nano /etc/tuxbox/config/oscam_1.20/oscam.conf
logfile= stdout;/var/log/oscam.log
Guardamos: Ctrl+X

Iniciar script en el arranque
Editamos /usr/bin/enigma2.sh
Código:
nano /usr/bin/enigma2.sh

Buscamos en el archivo:
if [ -d /home/root ]; then
cd /home/root
export HOME=/home/root
fi

Copiar debajo lo siguiente:
if [ -x /usr/script/check_vpn_wireguard.sh ]; then
/usr/script/check_vpn_wireguard.sh &
fi

Guardamos: Ctrl+X
Reiniciamos y ya está funcionando.

Espero que les sea de utilidad.

Saludos Nozul
 
Última edición:

kuti72

Vive y deja vivir
Amigo OpenSPA
19 Ago 2019
321
194
0
Valladolid
Buenas tardes, me he encontrado con un problema que tiene Wireguard en general, no solo este plugin, el problema consiste en que si el servidor de wireguard tiene ip dinámica y por lo tanto tiene que usar DDNS, en el momento que el servidor cambia de ip el cliente no se actualiza y se produce una desconexión de la red VPN.

Tras investigar un poco encontré un script oficial de wireguard que soluciona este problema, se llama reresolve-dns.sh:

Código:
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2015-2020 Jason A. Donenfeld <[email protected]>. All Rights Reserved.

set -e
shopt -s nocasematch
shopt -s extglob
export LC_ALL=C

CONFIG_FILE="$1"
[[ $CONFIG_FILE =~ ^[a-zA-Z0-9_=+.-]{1,15}$ ]] && CONFIG_FILE="/etc/wireguard/$CONFIG_FILE.conf"
[[ $CONFIG_FILE =~ /?([a-zA-Z0-9_=+.-]{1,15})\.conf$ ]]
INTERFACE="${BASH_REMATCH[1]}"

process_peer() {
    [[ $PEER_SECTION -ne 1 || -z $PUBLIC_KEY || -z $ENDPOINT ]] && return 0
    [[ $(wg show "$INTERFACE" latest-handshakes) =~ ${PUBLIC_KEY//+/\\+}\    ([0-9]+) ]] || return 0
    (( ($EPOCHSECONDS - ${BASH_REMATCH[1]}) > 135 )) || return 0
    wg set "$INTERFACE" peer "$PUBLIC_KEY" endpoint "$ENDPOINT"
    reset_peer_section
}

reset_peer_section() {
    PEER_SECTION=0
    PUBLIC_KEY=""
    ENDPOINT=""
}

reset_peer_section
while read -r line || [[ -n $line ]]; do
    stripped="${line%%\#*}"
    key="${stripped%%=*}"; key="${key##*([[:space:]])}"; key="${key%%*([[:space:]])}"
    value="${stripped#*=}"; value="${value##*([[:space:]])}"; value="${value%%*([[:space:]])}"
    [[ $key == "["* ]] && { process_peer; reset_peer_section; }
    [[ $key == "[Peer]" ]] && PEER_SECTION=1
    if [[ $PEER_SECTION -eq 1 ]]; then
        case "$key" in
        PublicKey) PUBLIC_KEY="$value"; continue ;;
        Endpoint) ENDPOINT="$value"; continue ;;
        esac
    fi
done < "$CONFIG_FILE"
process_peer

Guardé el script en la ruta: /usr/script/
Para ejecutarlo, es suficiente con poner en la terminal:
Código:
./usr/script/reresolve-dns.sh /etc/wireguard/Wg0.conf

Y de nuevo recuperé la conexión de VPN.
Imagino que ejecutando desde cron cada X minutos el comando ya tendria solucionado el problema.

Pero me dió por ir un poco más allá y pensé que la conexión VPN también podría fallar por la conexión entre el deco y el router o incluso por pérdida de conexión de internet.
¿Como podría saber el motivo del la caída de la red VPN de forma rápida y automática?

Y se me ocurrió la idea de crear un script que se encargara de ello.
El script que voy a compartir es la unión de varios script buscados por la red adaptados a este problema que comento.
Decir que no tengo ni idea de hacer scripts, así que pido disculpas si los entendidos ven muchas burradas y les animo a que compartan que mejoras o modificaciones se les ocurren.
check_vpn_wireguard.sh:

Código:
#!/bin/sh
# script que informa y/o recupera conexión de red VPN Wireguard
################### Insertar los valores dependiendo de vuestro deco. ###################################################
log=/var/log/oscam.log           # Donde tienes el log oscam
lineas=4                         # Numero lineas ultimas en que busca errores
ip_deco=127.0.0.1                # Direccion ip de nuestro receptor  
userweb=xxxxxx                   # Usuario webinf
passweb=yyyyyy                   # Password webinf
webport=80                       # Puerto webinf
tiempo=300                       # Cada cuanto tiempo queremos que se ejecute la revisión del log buscando errores
error="Connection timed out"     # Tipo error que queremos que busque
ip_router=192.168.X.1            # IP nuestro router
ip_internet=8.8.8.8              # URL o DNS de Google
host_vpn=xxyyzz.dyndns.org       # Dirección VPN
interfaz=Wg0.conf                # Archivo conf en /etc/wireguard/
#############################################################################################################################################
#Obtener ip del host y guardarla en /tmp/ip_host.txt
nslookup $host_vpn | grep "Address" | awk '{print $2}' | sed -n 2p &> /tmp/ip_host.txt
#echo "obtenida ip y guardada en /tmp"
#sleep 3
#echo "buscando errores en el log..."
#sleep 3
##################################################
while true
do
tiempo=$tiempo
count=`tail -n $lineas $log | grep "$error" | wc -l`
if [ "$count" -gt "0" ]
then
curl "http://$userweb:$passweb@$ip_deco:$webport/web/message?text=¡Error+conexión+VPN!%0AIniciando+proceso+de+recuperación+automático%0APor+favor+espere...&type=2&timeout=60"
  ping -c 1 ${ip_router} >/dev/null 2>/dev/null
  respuesta1=$?
  if [ $respuesta1 -eq 1 ];
  then
#    echo "conexion router nok"
    curl "http://$userweb:$passweb@$ip_deco:$webport/web/message?text=No+hay+conexion+con+el+router+compruebe:%0Arouter+encendido%0Aconexión+cable+de+red%0Ao%%0Awifi+activo+en+router%0Acontraseña+wifi+correcta&type=2"
  else
#    echo "conexion router ok"
    sleep 5
    ping -c 1 ${ip_internet} >/dev/null 2>/dev/null
    respuesta2=$?
    if [ $respuesta2 -eq 1 ];
    then
#      echo "conexion internet nok"
      curl "http://$userweb:$passweb@$ip_deco:$webport/web/message?text=No+hay+conexion+de+internet+compruebe:%0Aluces+encendidas+en+router%0Aconexion+cable+wan+en+router&type=2"
    else
#      echo "conexion internet ok"
      nslookup $host_vpn | grep "Address" | awk '{print $2}' | sed -n 2p &> /tmp/ip_host_new.txt
      sleep 10
      cmp "/tmp/ip_host.txt" "/tmp/ip_host_new.txt"
      respuesta3=$?
      if [ $respuesta3 -eq 0 ];
      then
#        echo "conexion vpn ok"
        rm /tmp/ip_host_new.txt
        curl "http://$userweb:$passweb@$ip_deco:$webport/web/message?text=¡VPN+conexión+OK!%0ASi+sigue+el+bloqueo+de+la+emisión:%0Acambie+de+canal%0Areinicie+camd%0Areinicie+equipo&type=2"
      else
#        echo "conexion vpn nok"
        curl "http://$userweb:$passweb@$ip_deco:$webport/web/message?text=No+hay+conexión+VPN%0AReiniciando+conexión+espere...&type=2&timeout=20"
        sh /usr/script/reresolve-dns.sh /etc/wireguard/$interfaz
        mv /tmp/ip_host_new.txt /tmp/ip_host.txt
        sleep 5

fi
fi
fi
fi
sleep 60
done

El script se guarda en /usr/script/ junto con reresolve-dns.sh

Permisos 755 a los dos script
Código:
chmod 755 reresolve-dns.sh
chmod 755 check_vpn_wireguard.sh

Habilitar log en oscam.conf:
Código:
nano /etc/tuxbox/config/oscam_1.20/oscam.conf
logfile= stdout;/var/log/oscam.log
Guardamos: Ctrl+X

Iniciar script en el arranque
Editamos /usr/bin/enogma2.sh
Código:
nano /usr/bin/enigma2.sh

Buscamos en el archivo:
if [ -d /home/root ]; then
cd /home/root
export HOME=/home/root
fi

Copiar debajo lo siguiente:
if [ -x /usr/script/check_vpn_wireguard.sh ]; then
/usr/script/check_vpn_wireguard.sh &
fi

Guardamos: Ctrl+X
Reiniciamos y ya está funcionando.

Espero que les sea de utilidad.

Saludos Nozul
Vaya crack, compañero. Enhorabuena por tu aportación.

Salu2.
 

Riojano

Usuario Destacado
Vip OpenSPA
17 Ene 2020
1.339
611
0
Pa no saber de scripts no veas la currada... gracias por compartir!
 

quecon

Usuario
Loco por OpenSPA
18 Ago 2009
484
5
0
47
Buenas yo he puesto Wireguard en un vps ( Oracle cloud ) he creado los clientes y desde el móvil funciona, desde el pc lo mismo me funciona de lujo, pero ni desde un octagon sf8008 ni un formule f3 lo hace, el octagon se conecta porque se pone el escudo en verde pero se queda sin internet, y el formule f3 directamente no conecta, alguno tiene alguna idea de porque puede pasar esto?? tengo que configurar algo de la configuración de red, los 2 decos tiene la ultima versión de openspa
 

morser

OpenSpa Team
Miembro del equipo
21 Mar 2007
7.207
1.307
0
57
La direccion IP wireguard del servidor es 10.100.0.1??? Como son los archivos de configuracion que le metes a los decos ???
 

quecon

Usuario
Loco por OpenSPA
18 Ago 2009
484
5
0
47
La direccion IP wireguard del servidor es 10.100.0.1??? Como son los archivos de configuracion que le metes a los decos ???
[Interface]
PrivateKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Address = 10.241.190.3/24
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PresharedKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Endpoint = 129.151.67.58:51820
AllowedIPs = 0.0.0.0/0, ::0/0
 

morser

OpenSpa Team
Miembro del equipo
21 Mar 2007
7.207
1.307
0
57
Prueba a cambiar el AllowedIP's por 0.0.0.0/0. Si no te va, quita lo de las DNS
 

quecon

Usuario
Loco por OpenSPA
18 Ago 2009
484
5
0
47
Quito las dns o las cambio???


Enviado desde mi iPhone utilizando Tapatalk
 

morser

OpenSpa Team
Miembro del equipo
21 Mar 2007
7.207
1.307
0
57
Quitalas

Enviado desde mi CPH2067 mediante Tapatalk
 

quecon

Usuario
Loco por OpenSPA
18 Ago 2009
484
5
0
47
Quitalas

Enviado desde mi CPH2067 mediante Tapatalk
vale he echo lo de AllowedIPs = 0.0.0.0/0, ::0/0 por AllowedIPs = 0.0.0.0/0. y en formule f3 esta funcionando, en el octagon quiero meterlo todo nuevo pero me quedado sin mando se lo ha comido mi perro, asi que voy a ver si pido uno y pruebo a ver. cuando este pondre si me ha funcionado gracias morser
 

kuti72

Vive y deja vivir
Amigo OpenSPA
19 Ago 2019
321
194
0
Valladolid
vale he echo lo de AllowedIPs = 0.0.0.0/0, ::0/0 por AllowedIPs = 0.0.0.0/0. y en formule f3 esta funcionando, en el octagon quiero meterlo todo nuevo pero me quedado sin mando se lo ha comido mi perro, asi que voy a ver si pido uno y pruebo a ver. cuando este pondre si me ha funcionado gracias morser
Buenas. Mientras te llega el mando, puedes usar el que te proporciona el openwebif a través del explorador web.