Para resolver este problema, necesitará configurar ambos iptables y reglas de enrutamiento. El problema específico con el que se encuentra es que los paquetes SSH salientes se enrutan a través de su interfaz de túnel VPN anónimo en lugar de su interfaz Ethernet. Esto sucede porque su software VPN configuró una regla de enrutamiento para enviar todo el tráfico no controlado a través de la interfaz del túnel. Bueno para anonimizar el tráfico de su red; malo para establecer conexiones SSH a su computadora.
Hay algunas maneras de solucionar este problema, pero compartiré con usted la que me funcionó en una situación idéntica. Esto es lo que debemos hacer:
- Cree una nueva tabla de reglas de IP para manejar el tráfico no VPN
- Agregue una regla de IP para buscar en nuestra tabla sin VPN cualquier paquete marcado con una máscara de filtro de red específica
- Agregue una ruta IP que dirija todo el tráfico en nuestra tabla sin VPN para usar su interfaz Ethernet en lugar del túnel
- Agregue una regla de iptables para marcar todo el tráfico SSH con nuestra máscara de filtro de red designada
Nota: Estaba trabajando con Raspbian mientras hacía lo siguiente, por lo que es posible que deba ajustar un poco los comandos para que se ajusten a su distribución.
Crear una nueva tabla de reglas de IP
Comience por inspeccionar el archivo de definición de tabla de iproute2. Queremos asegurarnos de no usar el nombre o el número de ninguna tabla de reglas existente.
cat /etc/iproute2/rt_tables
Probablemente verá algo en este sentido:
# reserved values
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
Elija un número arbitrario y un nombre para su nueva tabla de reglas, cualquier cosa que no se haya usado anteriormente. Usaré el número 201 y el nombre novpn
para el resto de esta respuesta.
Agregue una definición directamente al archivo de definición o edítela en el editor de texto que elija:
echo "201 novpn" >> /etc/iproute2/rt_tables
Agregue una nueva regla de IP para buscar la tabla sin VPN
Verifique las reglas de ip existentes que se ocupan de las máscaras de netfilter:
ip rule show | grep fwmark
Si grep no muestra nada, estás libre. Si imprime algunas líneas, tome nota del número hexadecimal a la derecha de la palabra fwmark
en cada línea. Deberá elegir un número que no esté actualmente en uso. Como no tenía reglas fwmark existentes, elegí el número 65.
ip rule add fwmark 65 table novpn
Lo que esto hace es que los paquetes con netfilter mask 65 busquen en nuestra nueva novpn
tabla las instrucciones sobre cómo enrutar los paquetes.
Dirija todo el tráfico en nuestra nueva tabla para usar la interfaz Ethernet
ip route add default via YOUR.GATEWAY.IP.HERE dev eth0 table novpn
Lo importante a tener en cuenta aquí es dev eth0
. Esto obliga a todo el tráfico que pasa a través de la novpn
tabla a usar solo la interfaz Ethernet de hardware, en lugar de la interfaz de túnel virtual que crea su VPN.
Ahora sería un buen momento para vaciar su caché de iproute, para asegurarse de que sus nuevas reglas y rutas tengan efecto inmediato:
ip route flush cache
Indique a la regla del firewall que marque todo el tráfico SSH con la máscara de filtro de red designada
iptables -t mangle -A OUTPUT -p tcp --sport 22 -j MARK --set-mark 65
Hay demasiadas opciones aquí para que las explique con gran profundidad. Le recomiendo que lea la página del manual de iptables para tener una idea de lo que está sucediendo aquí:
man iptables
En pocas palabras: estamos agregando una regla de salida a la tabla de control del cortafuegos (para el manejo especializado de paquetes) que le indica que marque todos los paquetes TCP que se originen desde el puerto de origen 22 con nuestra máscara de filtro de red 65 designada.
¿Qué sigue?
En este punto, debería estar listo para probar SSH. Si todo va bien, debería recibir el feliz mensaje "iniciar sesión como".
Por razones de seguridad, le recomiendo que indique a su firewall que descarte cualquier solicitud SSH entrante desde la interfaz del túnel:
iptables -A INPUT -i tun0 -p tcp -m tcp --dport 22 -j DROP
Tenga en cuenta que todas las instrucciones anteriores son transitorias (excepto la creación de la ID de la tabla de reglas): se borrarán la próxima vez que reinicie su computadora. Hacerlos permanentes es un ejercicio que te dejo.