Isenta programas de usar conexão VPN ativa

8

Quando me conecto a uma VPN, todo o tráfego da minha rede é roteado automaticamente por ela. Existe uma maneira de adicionar isenções a isso? Não sei se adicionar exceções tem algo a ver com o protocolo VPN, mas a VPN que estou usando é do protocolo OpenVPN.

Falando em OpenVPN, por que não é instalado por padrão nas instalações do Ubuntu, ao contrário do PPTP?

Eu não pude obter a lista de servidores do IRCHighWay, e este é o resultado que eu estou tentando conectar no XChat com a execução do script bash em execução:

* Looking up irc.irchighway.net
* Connecting to irc.irchighway.net (65.23.153.98) port 6667...
* Connected. Now logging in...
* You have been K-Lined.
* *** You are not welcome on this network.
* *** K-Lined for Open proxies are not allowed. (2011/02/26 01.21)
* *** Your IP is 173.0.14.9
* *** For assistance, please email [email protected] and include everything shown here.
* Closing Link: 0.0.0.0 (Open proxies are not allowed. (2011/02/26 01.21))
* Disconnected (Remote host closed socket).

O IP 173.0.14.9 é o devido à minha VPN. Eu tinha esquecido de verificar ip route list antes de executar o script, e este é o único depois de executá-lo:

~$ ip route list
99.192.193.241 dev ppp0  proto kernel  scope link  src 173.0.14.9 
173.0.14.2 via 192.168.1.1 dev eth1  proto static 
173.0.14.2 via 192.168.1.1 dev eth1  src 192.168.1.3 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.3  metric 2 
169.254.0.0/16 dev eth1  scope link  metric 1000 
default dev ppp0  proto static

Ah, e a execução do script retornou essa saída:

~$ sudo bash irc_route.sh
Usage: inet_route [-vF] del {-host|-net} Target[/prefix] [gw Gw] [metric M] [[dev] If]
       inet_route [-vF] add {-host|-net} Target[/prefix] [gw Gw] [metric M]
                              [netmask N] [mss Mss] [window W] [irtt I]
                              [mod] [dyn] [reinstate] [[dev] If]
       inet_route [-vF] add {-host|-net} Target[/prefix] [metric M] reject
       inet_route [-FC] flush      NOT supported

Eu corri o script depois de me conectar à VPN.

    
por Oxwivi 17.02.2011 / 20:30

2 respostas

6

Crie um arquivo, irc_route.sh, que contenha:

#!/bin/bash
# script to make connections to irc.irchighway.net go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*//;t;d"|head -1)
route add -host irc.irchighway.net gw $GW $DEV

Altere DEV para ser a interface da qual você obtém sua conexão com a Internet (pode ser qualquer um dos wlan0, eth1, eth0, ppp0). Em seguida, execute o script com sudo bash irc_route.sh , você pode verificar os resultados executando ip route list antes e depois.

O IP do gateway padrão para o tráfego de internet no dispositivo DEV é armazenado na variável GW, que é então usada para rotear todo o tráfego que vai para o servidor irc.irchighway.net através do seu GW padrão ao invés da conexão OpenVPN que você tem.

Para que isso funcione para todos os servidores IRCHighWay, você precisaria obter uma lista de todos os servidores.

server_list.txt:

 irc.irchighway.net
 caliburn.pa.us.irchighway.net

Script:

#!/bin/bash
# script to make connections to irchighway go via DEV.
DEV=eth0 
GW=$(ip route list | sed "s/.* via \([0-9.]*\) dev $DEV.*//;t;d"|head -1)
cat server_list.txt| xargs -iSERVER route add -host SERVER gw $GW $DEV

Existe uma solução "mais fácil", você pode marcar as portas e rotear com base nisso, veja tutorial do iproute2 mas eu não usei isso. E há alguns problemas com esse tipo de roteamento se você não sabe o que está fazendo.

    
por Erik Johansson 23.02.2011 / 14:46
1

Você não pode impedir que programas específicos façam conexões através da VPN, mas se eles quiserem alcançar um host específico ou um número de porta, então é possível. Eu vou assumir o pior caso, que você quer certos aplicativos para ignorar o firewall.

Isso deve ser possível usando o SELinux, banindo conexões de rede de um programa. Não conheço nenhuma boa ferramenta para fazer essa configuração, nem como alterá-la em tempo real.

Eu acho que houve uma vez um módulo no iptables que poderia corresponder ao programa de envio, mas eu não o vejo há algum tempo.

    
por Erik Johansson 21.02.2011 / 15:54