Tengo un VPS con CentOS 7 al que me conecto con SSH. Me gustaría ejecutar un cliente OpenVPN en el VPS para que el tráfico de Internet se enrute a través de la VPN, pero aún así me permita conectarme al servidor a través de SSH. Cuando inicio OpenVPN, mi sesión SSH se desconecta y ya no puedo conectarme a mi VPS. ¿Cómo puedo configurar el VPS para permitir que las conexiones entrantes SSH (puerto 22) se abran en la IP real del VPS (104.167.102.77), pero aún enrutar el tráfico saliente (como desde un navegador web en el VPS) a través de la VPN?
El servicio OpenVPN que uso es PrivateInternetAccess, y un archivo de ejemplo config.ovpn es:
cliente Dev Tun proto udp remoto nl.privateinternetaccess.com 1194 resolv-retry infinite nobind clave persistente persist-tun ca ca.crt tls-client servidor remote-cert-tls auth-user-pass comp-lzo verbo 1 reneg-sec 0 crl-verificar crl.pem
IP addr de VPS:
1: lo: mtu 65536 qdisc noqueue state DESCONOCIDO enlace / loopback 00: 00: 00: 00: 00: 00 brd 00: 00: 00: 00: 00: 00 inet 127.0.0.1/8 ámbito host lo válido_lft para siempre preferido_lft para siempre inet6 :: host de alcance 1/128 válido_lft para siempre preferido_lft para siempre 2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000 enlace / éter 00: 50: 56: be: 16: f7 brd ff: ff: ff: ff: ff: ff Inet 104.167.102.77/24 brd 104.167.102.255 alcance global ens33 válido_lft para siempre preferido_lft para siempre inet6 fe80 :: 250: 56ff: febe: 16f7 / 64 enlace de alcance válido_lft para siempre preferido_lft para siempre 4: tun0: mtu 1500 qdisc pfifo_fast estado DESCONOCIDO qlen 100 enlace / ninguno inet 10.172.1.6 igual 10.172.1.5/32 alcance global tun0 válido_lft para siempre preferido_lft para siempre
Ruta IP del VPS:
0.0.0.0/1 a través de 10.172.1.5 dev tun0 predeterminado a través de 104.167.102.1 dev ens33 proto static metric 1024 10.172.1.1 a través de 10.172.1.5 dev tun0 10.172.1.5 dev tun0 proto kernel scope link src 10.172.1.6 104.167.102.0/24 dev ens33 proto kernel scope link src 104.167.102.77 109.201.154.177 a través de 104.167.102.1 dev ens33 128.0.0.0/1 a través de 10.172.1.5 dev tun0
route
oip route show
) y la elimino?Esto puede ser un poco tarde, pero ...
El problema es que OpenVPN cambia la puerta de enlace predeterminada, y eso interrumpe su conexión SSH actual a menos que configure las rutas apropiadas antes de iniciar OpenVPN.
Lo que sigue funciona para mí. Utiliza iptables e ip (iproute2). A continuación, se supone que la interfaz de puerta de enlace predeterminada antes de iniciar OpenVPN es "eth0". La idea es asegurar que cuando se realiza una conexión a eth0, incluso si eth0 ya no es la interfaz de puerta de enlace predeterminada, los paquetes de respuesta para la conexión vuelven a eth0 nuevamente.
Puede usar el mismo número para la marca de conexión, la marca de firewall y la tabla de enrutamiento. Usé números distintos para hacer que las diferencias entre ellos fueran más aparentes.
===
ACTUALIZAR:
Lo anterior funciona bien para mí en Debian Jessie. Pero en un sistema Wheezy más antiguo, acabo de descubrir que necesito agregar "via" a la entrada de la tabla de enrutamiento:
Allí "12.345.67.89" debe ser la puerta de enlace no VPN original.
fuente
ip route add default
)? Obtengo "RTNETLINK respuestas: el archivo existe". Estoy ejecutando Ubuntu Xenial. "vía" no ayuda. Acabo de probarlo en Arch Linux, primeroip route add default
parece tener éxito, pero laip route
salida no cambia. Cualquier ejecución posterior da como resultado el mensaje "el archivo existe".ip route show table all | grep 3412
. Y sin "vía" las conexiones no establecidas (si no me equivoco) dejan de funcionar (Ubuntu Xenial). Al menos puedo corregir la tabla de enrutamiento. Sin embargo, no puedo acceder al servidor después de ejecutarloopenvpn
.Basado en la respuesta @MrK, he escrito un código simple aquí para que sea más rápido hacer el trabajo para que no tenga que verificar las interfaces / IP:
He probado este script en 4 de mi VPS y está funcionando perfectamente.
fuente
hmm suena como una superposición de subred de ip ... sin saber más acerca de su esquema de ip, aparte de la ip pública para su terminación de vpn como nl.privateinternetaccess.com, no puedo asegurarlo.
así, por ejemplo, si la subred remota en el otro lado de nl.privateinternetaccess.com es 10.32.43.0/24, y su instancia está en un vpc aws cuya subred es 10.32.44.0/24. pero su cliente ssh de origen vive en 10.32.43.0/24 (su lado de aws vpc), no funcionará, ya que el tráfico ssh de retorno se enviará erróneamente sobre vpn a los países bajos.
proporcione información completa de ip / subred para obtener más ayuda con esto.
...
ok, entonces ... parece que tu ruta predeterminada está en el túnel, después de conectarte a nl:
para que pueda cambiar eso después de conectarse. Muchas veces los servidores VPN le dan rutas falsas. especialmente en cuerpo descuidado. en este caso, le están enviando una ruta predeterminada para que todo el tráfico del cuadro vps vaya a nl. cambie la ruta predeterminada a 104.167.102.xo cualquier puerta de enlace de subred que esté en su proveedor de vps.
fuente
Cuando activa la VPN, se reemplaza su puerta de enlace predeterminada. Esto significa que todo el tráfico generado o enrutado a través de su caja se enviará a la puerta de enlace VPN.
Una solución simple es filtrar todo el tráfico que no desea enrutar a través de la VPN y hacer algo más con él. Una posibilidad es recoger el tráfico generado desde su casilla con su dirección de origen local y enrutarlo a través de su puerta de enlace local. Esto permite que servicios como SSH funcionen correctamente.
Haremos eso aquí. Primero, cree una nueva tabla de enrutamiento y agregue una ruta predeterminada que enrute todo a través de su puerta de enlace local:
A continuación, cree una nueva regla de filtro de paquetes que marque todo el tráfico que sale de su casilla desde una dirección de origen determinada con algún identificador.
Finalmente, cree una política de enrutamiento que seleccione todo el tráfico marcado mencionado anteriormente y lo enrute utilizando la tabla generada arriba.
Una vez más, los valores de
<mark>
y<table>
son identificadores arbitrarios de su elección.fuente
Para mí, ejecutar el servidor OpenVPN en pfSense fue desmarcar la configuración "Forzar todo el tráfico IPv4 generado por el cliente a través del túnel".
fuente