He consultado a personas anteriores que hacían preguntas similares, pero aún no he recibido una respuesta directa que funcione para mi situación dada, así que aquí va ...
Estoy ejecutando Linux (Fedora 22) y tengo un servicio VPN que pago, pero solo necesito programas específicos para usar la VPN para su tráfico de Internet y puedo usar mi conexión ISP estándar para todo lo demás (es decir, navegación web, etc)
Haremos esto simple y lo limitaremos al programa más utilizado, World of Warcraft, que se ejecuta a través de WINE.
Ahora, tengo una configuración de VPN a través de la interfaz de red para que todo mi tráfico a través de enp10s0 (el nombre extraño de mi computadora para eth0) pueda ser canalizado a través del servicio VPN, sin embargo, solo necesito programas específicos (o puertos que usan esos programas, para Se específico) para pasar por la VPN.
¿Cómo configuro el túnel y hago que solo enrute los puertos necesarios a través de la VPN, mientras mantengo todo lo demás sin enrutar?
Respuestas:
Lo que pides hace no existe. Por eso no está satisfecho con las respuestas que encontró (algunas de ellas, posiblemente, siendo mías): todas han sugerido soluciones , no es una solución genuina, ni simple ni compleja.
Dejame explicar. El enrutamiento en todos los sistemas operativos está determinado por la dirección de destino: es posible que tenga varias rutas, pero la elección entre ellas no se basa en la aplicación que invoca la conexión, sino simplemente en la dirección de destino. Parada completa
Déjame darte un ejemplo no trivial. Cuando un cliente VPN ha establecido una conexión a su servidor, aún es posible enrutar una conexión a un sitio determinado, por ejemplo example.org, fuera de la VPN. Pero todas las aplicaciones que intentan llegar a esa dirección especial se enrutarán fuera de la VPN: no es posible que algunas aplicaciones vayan a example.org a través de la VPN mientras que otras aplicaciones pasan fuera de la VPN.
La situación se enriquece con el kernel de Linux, que permite el enrutamiento de origen: esto significa que puede tener dos o más tablas de enrutamiento, y la elección entre ellas se basa en la dirección de origen, no en la dirección de destino.
Un ejemplo no trivial: mi PC tiene dos líneas externas, con dos IP públicas distintas. Se puede contactar a través de cualquiera de las interfaces, y es importante que mis respuestas a una conexión determinada pasen por la misma interfaz que la conexión: de lo contrario, se descartarán como irrelevantes cuando lleguen a la persona que inició la conexión. Este es el enrutamiento de origen.
Justo lo suficiente, ¿qué pasa con las conexiones que comenzamos? Algunas aplicaciones le permiten especificar la dirección de enlace, como el cliente openssh :
Para ellos, no hay problema en tener una instancia pasando por la VPN (por ejemplo, la tabla de enrutamiento 1) mientras que otra instancia saldrá de la VPN (por ejemplo, la tabla de enrutamiento 2). Pero otras aplicaciones, como Firefox, no solo son muy difíciles de vincular a una dirección IP de origen específica (sino que también aquí para una solución muy inteligente), pero también son malos y desagradables en el sentido de que lo harán no le permiten tener dos copias de sí mismas ejecutándose simultáneamente, cada una vinculada a una dirección de origen diferente. En otras palabras, mientras que gracias al truco mencionado anteriormente puede obligar a una instancia a enlazar a una dirección de origen de su elección, entonces no puede tener otra versión de enlace a la otra dirección de origen.
Esto explica por qué usamos soluciones alternativas: todas se basan en la misma idea, que funcionan con una pila de red separada que el resto de la PC. Por lo tanto, puede tener, en orden de complejidad aproximado decreciente, máquinas virtuales, acopladores, contenedores, espacios de nombres. En cada una de ellas tendrás una o más tablas de enrutamiento, pero puedes tener varias instancias de cada una (VM / dockers / containers / namespaces) y también puedes agregarlas libremente, cada una de ellas ejecutando su propia aplicación como Firefox, felizmente separada. de los otros.
Tal vez usted todavía está interesado en una de las soluciones?
EDITAR:
La solución más sencilla es un espacio de nombres de red. La siguiente secuencia de comandos maneja todos los aspectos necesarios de una NNS: póngala en un archivo (usted elige su nombre, generalmente uso
newns
, pero haces lo que prefieras) en/usr/local/bin
, entonceschmod 755 FILE_NAME
, y puedes usarlo de la siguiente manera:Se abrirá un
xterm
para usted (eso es porque me gusta xterm para trabajar, pero puede cambiarlo si desea usar cualquier otra cosa), que pertenece al nuevo espacio de nombres. Desde el interior del xterm puede, si lo desea, comenzar su vpn y luego comenzar su juego. Puede verificar fácilmente que está usando la VPN a través del siguiente comando:Lo que te devuelve tu IP pública. Después de configurar la VPN en el xterm, puede verificar que su IP pública sea diferente en sus otras ventanas. Puede abrir hasta 254 xterms, con 254 NNS diferentes y diferentes conexiones.
Si lo desea, puede incluso iniciar un escritorio completo dentro del nuevo espacio de nombres de red, mediante
entonces puedes buscarlo usando Alt + Ctrl + Fn , donde Fn es uno de F1, F2, ....-
Necesito agregar una advertencia: el manejo de DNS dentro de los espacios de nombres es un poco buggy, se paciente.
fuente
$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 0.0.0.0 0.0.0.0 U 50 0 0 ppp0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 enp10s0 1.0.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enp10s0 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 enp10s0 199.168.112.120 192.168.1.1 255.255.255.255 UGH 100 0 0 enp10s0