BandaAncha.eu

Comunidad de usuarios
de fibra, móvil y ADSL

Determinar si SSID está conectada en script sh para que no levante la VPN

Solospam

Quisiera saber si hay alguna forma de discriminar SSID, me explico:

Tengo un debian corriendo en un PC para hacer una serie de pruebas que no vienen al cuento, pero necesita conectarse a VPN para acceder a una serie de recursos; mi VPN principal es WireGuard.

Actualmente tengo un ejecutable wg.sh que levanta la VPN siempre que el PC se enciende

#!/bin/bash
Apt update 
Apt upgrade -s
wg-quick up VPN

Mis dudas son:

Cuando conecto desde casa o desde la oficina la VPN hace cosas raras porque es donde está ubicada, ¿existe alguna forma de discriminar las SSID? Es decir, poner que si la SSID es "Casa" o "oficina" entonces wg-quick down VPN

Creo que mejor es por MAC que por ssid, pero cualquiera de las dos me valdría.

BocaDePez
BocaDePez

Suponiendo que en la oficina o en la casa hay más de un AP con el mismo nombre, es mejor usar las MACs. Comparará con más direcciones pero no se confundirá con los nombres si conectais con muchas redes con el mismo nombre.

Puedes usar ifconfig (interfaz Wi-Fi) y grep con el nombre del Wi-Fi o la dirección MAC y compararlo con una lista con las SSID o las MAC de un archivo.

Escribo así porque aún no estoy escribiendo scripts con el poco tiempo que tengo. Espero que haya sido de ayuda

vukits

hay varios gestores de red, diferentes que permiten ejecutar scripts según donde estés conectado.

uno de ellos es 'WiCD' ( estoy un poco desfasado ;) )

Bisset

¿No te vale algo de este palo?:

#!/bin/bash
apt update 
apt upgrade -s
SSID="oficina"
AP=$(iwgetid -r)
if [[ "$AP" == "$SSID" ]]; then
wg-quick down VPN
else
wg-quick up VPN
fi
🗨️ 6
Solospam

Tiene buena pinta, yo es que soy user de windows iniciándome en Linux, voy a probar y te cuento

Solospam

Al final hice este script basado en el que tu me diste

#!/bin/bash
wg-quick up VPN
SSID="oficina"
AP=$(iwgetid -r)
if [[ "$AP" == "$SSID" ]]; then
wg-quick down VPN
else
wg-quick up VPN
fi
SSID="casa"
AP=$(iwgetid -r)
if [[ "$AP" == "$SSID" ]]; then
wg-quick down VPN
else
wg-quick up VPN
fi
sudo apt update 
sudo apt upgrade -s

Le di permisos de ejecución

sudo chmod +x wg.sh

lo copie en /etc/init.d/

Le "dije" que se ejecute al inicio de la sesión

sudo update-rc.d wg.sh defaults

Lo probé con el móvil y parece que funciona, luego me iré a una cafetería a ver si alcanzo la IP de wireguard.

Cualquier mejora sobre el script es bienvenida, aunque funcione seguro que se puede depurar

Gracias

🗨️ 4
Bisset

Hola,

No hace falta que lo repitas dos veces, puedes hacer la condición en una sola línea:

if [ "$AP" == "oficina" ] || [ "$AP" == "casa" ]; then
🗨️ 3
Solospam

estonces

SSID="oficina"

Sobra, no?

🗨️ 2
Bisset
🗨️ 1
Solospam

Nuevamente ha surgido un problema, me acabo de conectar a la red cableada de la oficina y no me deja acceso a internet por estar en la misma red que la VPN.

Lo ideal sería añadir las líneas correspondientes para que cuando se conecte a la red de la oficina no levante el tunel VPN

image.webp

Estuve buscando por internet pero no conseguí el comando que hace la llamada a "oficina" para crear las reglas pertinentes.

El escritorio que utilizo es el gnome

GRacias de antemano

🗨️ 8
vukits

como he dicho, no sé por qué te complicas con networkmanager.

usa Wicd

🗨️ 7
Solospam

Entiende que yo en Linux llevo 2 días, tengo una raspberry pi pero me salta con problemas de pascuas en viernes (afortunadamente) y tras seguir 4 tutoriales todo funciona y me puedo olvidar de la raspberry

Ahora me propuse aprender, y eso es más dar por saco, ya que no es tan sencillo como parece… lo que pretendo hacer en debian con wireguard en iOS me lo hace nativamente

El script que en su momento me pasó @Bisset ahora está así

#!/bin/bash
IP=$(ip route get 1.2.3.4 | awk '{print $7}')
if ["$IP" == 192.168.x.x ]||[ "$IP" == "192.168.y.y" ]|| [ "$IP" == "192.168.z.z" ]; then
wg-quick down VPN
else
wg-quick up VPN
fi
AP=$(iwgetid -r)
if [ "$AP" == "Oficina" ] ||[ "$AP" == "Oficina2" ]|| [ "$AP" == "casa" ]; then
wg-quick down VPN
else
wg-quick up VPN
fi
sudo apt update
sudo apt upgrade -y

Porque es la forma a priori que he encontrado para que me discrimine la IP aprovechando que tengo IP fija por ARP… pero no se si existe alguna forma mejor de hacerlo

🗨️ 6
vukits

que confirme @Bisset , que es el padre de la criatura, y que yo estoy con Windows y no puedo depurar :P

#!/bin/bash
IP=$(ip route get 1.2.3.4 | awk '{print $7}')
AP=$(iwgetid -r)
esIpIncompatible=["$IP" == 192.168.x.x ]||[ "$IP" == "192.168.y.y" ]|| [ "$IP" == "192.168.z.z" ]
esApIncompatible=[ "$AP" == "Oficina" ] ||[ "$AP" == "Oficina2" ]|| [ "$AP" == "casa" ]
if  [esApIncompatible]||[esApIncompatible]; then
wg-quick down VPN
else
wg-quick up VPN
fi
sudo apt update
sudo apt upgrade -y
🗨️ 5
Solospam
🗨️ 4
vukits
🗨️ 3
Solospam
🗨️ 1
vukits
Solospam
1

Hasta la fecha tengo esto, he simplificado todo a la oficina porque entiendo que una vez que en la oficina funcione el resto es ampliar atributos

#!/bin/bash
wg-qick down VPN
AP=$(iwgetid -r)
NAME=$(nmcli -t -f NAME c show --active)
if [ "$AP" == "Wifi_ofi" ] || [ "$Name" == "RJ45_ofi" ]; then
wg-quick down VPN
else
wg-quick up VPN
fi
sudo apt update
sudo apt upgrade -y

Por lo que he estado probando si estoy sólo en wifi el script funciona

Si estoy en wifi y RJ45 el script funciona

Si no tengo wifi pero si RJ45 se levanta la conexión WireGuad

Lo bueno es que al menos prioriza RJ45 frente a wifi, lo que me permite una mejor tasa de transferencia con el NAS

Es una solución a medias, pero como no soy de desactivar wifi me podría valer a falta de algo mejor

Saludos

🗨️ 3
vukits

Si estoy en wifi y RJ45 el script funciona

es una excelente solución por una razón muy sencilla: se basa en localización fisica y nombre de red wifi y no en IP

🗨️ 2
Solospam

se basa en localización fisica y nombre de red wifi y no en IP

Si, es que sino no tiene sentido… se trata de que levante una conexión VPN automáticamente, pero si la levanta donde está instalada la conexión a internet no funciona… es un coñazo, pero hay que decir que esto iOS lo hace de forma nativa con wireguard.

Tambien hay que decir que wireguard no funciona si no eres administrador en windows, pero programar una task de estas características en windows si tienen que ser unas risas

Gracias por tu ayuda @vukits

🗨️ 1
vukits

Bah, de nada.

Si es que lo habeis solucionado todo vosotros :P