Quiero que una aplicación use una conexión VPN mientras que otras no.
Estoy usando Xubuntu (por lo tanto XFCE) pero me gustaría una solución de línea de comandos/configuración estática si es posible.
¿Es posible lograrlo, y si es así, cómo?
Respuestas
¿Demasiados anuncios?Una vez quise hacer esto y corrí la aplicación en una máquina virtual (me gusta VirtualBox) y configuré la instancia del SO huésped para que todo su tráfico fuera completamente enrutado por VPN. Podría decirse que es un poco exagerado, pero significa que te preocupas mucho menos por si todos los paquetes de la aplicación (y cualquier cosa que haya generado) se enrutan como tú quieres. Las funciones de Windows y de carpetas compartidas de las VM modernas permiten que el uso de la aplicación en una VM sea bastante sencillo.
La forma más fácil sería usar una VPN que pueda exponerse como un servidor de SOCKS, entonces cualquiera de las herramientas de envoltura de calcetines (por ejemplo, tsocks) podría hacer eso.
De lo contrario, se podría hacer que los iptables lo hicieran usando la marcación de paquetes y luego usando eso para la selección de la ruta.
Si es sólo a un destino específico que se logra fácilmente haciendo que la VPN sólo añada la ruta relevante para eso y no otra.
Por supuesto, si es sólo una aplicación, intentaría que usara SSL para que no se necesitara ninguna VPN.
Puedes intentar jugar con los iptables owner
si puede hacer que la aplicación en cuestión se ejecute como un usuario particular ( man iptables
buscar owner
y piense en lo que puede hacer a partir de eso, no tengo la solución lista, ni recuerdo la sintaxis más allá de lo que usa --uid-owner
opción de línea de comando).
La solución propuesta por timday (hacer que la aplicación se ejecute en la instancia de invitados con openvz, xen o virtualbox) también debería funcionar, pero si se puede ir a por ello, probablemente se pueda restringir el proceso en cuestión a un usuario concreto.
Si estás usando IPSEC deberías poder añadir una política de seguridad que coincida con un puerto TCP o UDP específico. Para Xubuntu tendrías que instalar las herramientas ipsec y poner algo como
spdadd 10.1.1.0/24 10.2.2.0/24[4000] tcp -P in ipsec esp/tunnel//require;
en /etc/ipsec-tools.conf. El ejemplo anterior (totalmente inventado, sin probar) fuerza el tráfico al puerto TCP 4000 a través de la VPN.