Forzar a una aplicación a usar una interfaz de red específica


48

Estoy usando múltiples interfaces de red (LAN e inalámbricas), y he notado que hay una manera de cambiar el orden de las interfaces preferidas. ¿Cómo puedo usar la red cableada para hacer el trabajo, consultar el correo electrónico, etc. (de forma segura) y usar la VLAN inalámbrica para acceder a otras cosas (de lo contrario bloqueadas por puertos y, a veces, websense)?

Respuestas:


22

El truco consiste en ajustar las tablas de enrutamiento (que no depende del puerto de destino o la aplicación de origen, pero sí depende del host de destino). Esto supone que estás en Linux u OS X (como muestran las etiquetas).

Digamos que su puerta de enlace predeterminada es 1.2.3.4 y tiene un vpn que puede enrutar el tráfico en 6.7.8.9. Si desea que su tráfico de correo se enrute a más de 6.7.8.9, simplemente haga

sudo route add mail.myserver.com 6.7.8.9

Algunas versiones de ruta pueden requerir una palabra clave "gw" entre la dirección y el siguiente salto. Si desea hacer una ruta de red completa en el próximo salto, simplemente agregue una máscara de red en notación CIDR para el destino, como

sudo route add 192.168.0.0/24 6.7.8.9

Si desea ver la tabla de enrutamiento existente, use

netstat -nrl
or
ip route list

Si está en Windows, la "ruta de red" lo llevará a la mayor parte del camino, pero la sintaxis es totalmente diferente.


17
Esto no es realmente una respuesta, ¿verdad? La pregunta es cómo forzar una aplicación, no un sitio web. Por ejemplo, ¿qué quería que Safari pasara por VPN (ppp0) pero que Firefox pasara por en0 sin importar a qué sitio accedieran? Esa es la pregunta.
gman

2
@gman: Nada de esta respuesta es específica de los sitios web.
Lightness compite con Monica el

3
El OP quiere elegir una interfaz de red basada en el programa de aplicación. Esta respuesta muestra cómo elegir según el host de destino.
Bennett McElwee

No voy a votar en contra de esto (es un buen consejo para otra pregunta), pero ciertamente tampoco voy a votar en contra de esto (por las razones indicadas por @gman y @ bennett-mcelwee).
piel de rata

Según lo anterior, esto no responde a la pregunta de cómo bloquear una aplicación específica a una NIC específica.
catchdave

6

Si solo desea tener dos NIC activas al mismo tiempo, puede establecer la Orden de servicio en Preferencias del sistema / Red eligiendo el equipo debajo de la lista de dispositivos de red. Arrastra y suelta el orden en el que los quieres.

Por ejemplo, tengo Ether y WiFi siempre activos en mi MBP con Ether configurado por encima de Wi-Fi. Como uso Ether en el trabajo, configuré esa NIC con la configuración de proxy y mi Wi-Fi sin. Cuando voy a casa, no hay necesidad de ajustar ninguna configuración. También puede hacer esto desde la terminal usando /usr/bin/networksetup -ordernetworkservices.

Pero para que tanto la aplicación activa como la aplicación no sean predeterminadas, he tenido suerte con un giro un poco más fácil siguiendo el consejo de @ Andor. Si quiero que una aplicación no use Ether en mi caso, configuro la configuración del proxy para la aplicación en la dirección IP de mi adaptador wi-fi. Utilizará esa interfaz para salir y así evitará el proxy de la compañía y los servidores de monitoreo. Entonces, si Ether tiene una dirección de 1.2.3.4 y viene antes de Wi-Fi (5.6.7.8) en la orden de servicio, tengo mi proxy de aplicación a 5.6.7.8.


5

Para Mac, hay una solución simple que uso. En realidad, es una implementación de la solución de @ Andor. Instale un proxy y configure sus aplicaciones para usarlo:

  1. Instalé SquidMan

  2. En configuración agregue la siguiente línea. Debe especificar la ip que usará para sus aplicaciones privadas en lugar de x.x.x.x:

    tcp_outgoing_address x.x.x.x
    
  3. Inicie SquidMan y configure su aplicación para usarla como proxy.

Pasé una hora para encontrar esta información en diferentes páginas, así que espero que ayude a otros a hacerlo más rápido.


¡Debería funcionar igual en Windows y parece ser la única solución elegante!
TJJ

1

Probablemente necesitará usar las funciones de control de IO de bajo nivel (ioctl). En particular:

ioctl( socket, SIOCGIFADDR, ... ); // Get network interface address

y

ioctl( socket, SIOCSIFADDR, ... ); // Set network interface address

Vea esta página de manual para más detalles.


1

El problema es que tendrá múltiples puertas de enlace a su conexión de red, y eso es un poco difícil de administrar ...

Algunas herramientas de Unix y Linux relacionadas con el servidor o la red generalmente tienen un indicador llamado "interfaz", donde puede saber qué interfaz desea usar, como en tcpdump, por ejemplo:

tcpdump -i eth0

Pero como creo que está preguntando sobre el enrutamiento del software de escritorio estándar, eso se vuelve un poco más difícil ...

Puedo decirle un truco para eso de todos modos ... Mi solución habitual para tratar esos problemas es usar un proxy y solo tener una puerta de enlace. Casi cualquier software que use Internet en estos días tiene opciones para configurar un proxy, por lo que puede hacerlo de cualquiera de estas maneras:

1.- Configurar un proxy en la parte "no segura" (es decir, donde no se aplican las políticas) de su red, y apuntar su software a ese proxy.

2.- Configurar un servidor SSH en otro lugar "no seguro", por ejemplo, su hogar o un servidor dedicado que tenga en Internet, y abrir una conexión a través de una característica especial que tiene SSH que crea un servidor proxy de calcetines:

ssh -D 1234 user@host

Eso crearía en su computadora un servidor proxy de calcetines en el puerto "1234", que se conectaría a su "host", utilizando su "usuario", e iría a Internet a través de la conexión que tiene su "host" ... Entonces, en su software local, solo necesita abrir las herramientas de configuración del proxy y señalar localhost: 1234.

Buenos trucos para evitar las políticas corporativas de internet: P

:RE


1

Ejecuto mis aplicaciones comerciales dentro de una máquina virtual. Utilicé las instrucciones anteriores para configurar WiFi como mi conexión preferida, luego configuré la máquina virtual para usar el puerto ethernet como un adaptador "puenteado".

Todo lo que se ejecuta dentro de la máquina virtual ahora está vinculado al puerto ethernet. WiFi es mi conexión preferida para todas las demás aplicaciones (fuera de la máquina virtual), siempre que tenga una conexión WiFi conectada.

Creo que existen utilidades que pueden usarse para forzar el enlace de una aplicación a un puerto ethernet particular, pero no lo he investigado para MacOS.

El método de enrutamiento mencionado anteriormente es algo complejo para el "laico", pero también parece un buen enfoque viable, especialmente si obtiene repetidamente la misma dirección IP en sus conexiones.


0

Aunque esta pregunta es para OSX, dejaré lo siguiente aquí que funciona en Windows 7 de 64 bits. Esta pregunta surgió como uno de los mejores resultados al buscar en Google para forzar a las aplicaciones a pasar por un adaptador específico , por lo que lo siguiente podría ser útil para otros.

http://www.howtogeek.com/117890/how-to-force-an-application-to-use-a-specific-network-card/

La guía anterior usa una utilidad llamada ForceBindIp que se anuncia que funciona, Windows NT/2000/XP/2003 pero no tuve problemas para que funcione en Windows 7 - 64 Bit.

Además, problemas con ForceBindIP en Windows 7 (x64)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.