Eu tenho uma máquina Linux que está sempre conectada a uma VPN (interface vpn0) e a rota padrão passa pela interface vpn0. A conexão com o meu roteador é feita através da interface wlan0.
Eu gosto do fato de que ele roteia tudo através da VPN, e há razões para manter essa configuração. Mas como a VPN é bastante lenta, eu gostaria de poder iniciar alguns aplicativos específicos com uma rota padrão diferente: uma que atravessa diretamente wlan0 em vez de vpn0. Não quero, por exemplo, meu apt-get update
ou o navegador que executa o rádio da Web que passa pela VPN.
Pesquisei bastante por isso e não encontrei ninguém com o mesmo problema. Uma solução que encontrei exige que eu use o eth0: conectaria o eth0 à rede, criaria um novo espaço para nome da rede e depois moveria o eth0 para esse novo espaço para nome e o usaria normalmente. Então eu posso iniciar aplicativos nele usando ip netns exec nsname command
. O grande problema dessa solução é que ela exige que eu conecte através da eth0 e da wlan0, e estou procurando uma solução que use apenas a wlan0 - já que hoje em dia muitas máquinas nem sequer têm ethernet.
Parece que o caminho a seguir seria: criar um novo espaço para nome da rede, criar um par de ethernet virtual (veth0 e veth1), mover veth1 para o novo espaço para nome e, em seguida, fazer alguma mágica para rotear as coisas do outro espaço para nome da rede para usar wlan0 como um gateway em vez de vpn0.
Como o veth1 está no novo NS e o veth0 está no NS padrão e os dois estão conectados, acho que provavelmente queremos encontrar uma maneira de redirecionar o tráfego do veth0 para usar uma rota diferente (ou tabela de roteamento?) Que a padrão . Parece que eu poderia usar o "roteamento baseado em políticas", mas até agora todas as minhas tentativas falharam. Além disso, como o wlan0 não permite os mesmos recursos interessantes do eth0 (como conectar-se a pontes), essa solução provavelmente envolveria algum tipo de nat / masquerading.
Alguém pode me dar uma luz aqui? Talvez um patch para o script abaixo?
Nota: a interface wlan0 possui um IP 192.168.1.3 e o roteador sem fio é 192.168.1.1. Além disso, os aplicativos dentro da VPN precisam usar http_proxy
e amigos, mas não preciso disso quando não estou na VPN.
Eu tentei muitas coisas diferentes, mas esta é uma lista da maioria dos comandos que tentei:
echo 1 > /proc/sys/net/ipv4/ip_forward
# Create the novpn namespace, the virtual interfaces and configure them
ip netns add novpn
ip link add name veth0 type veth peer name veth1
ip link set veth1 netns novpn
ifconfig veth0 192.168.1.100/24 up
ip netns exec novpn ifconfig veth1 192.168.1.101/24 up
# Route stuff from veth0 to wlan0 using NAT. I don't know if this is
# really what I want because it uses the default routing tables
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i veth0 -j ACCEPT
# Do some magic to configure the routing tables on the new NS
ip netns exec novpn ip route add default via ?.?.?.? dev veth1
# Maybe try to route some stuff with a new routing table called novpn:
ip rule add iif veth0 lookup novpn
ip route add default dev wlan0 table novpn
ip route ???
ip route flush cache
Também me disseram que talvez eu pudesse usar uma configuração que envolva o roteamento apenas do tráfego "interno" através da VPN, mas eu realmente não quero isso.
fonte
Respostas:
Na verdade, é mais fácil do que isso.
O que você precisa fazer é configurar o roteamento de políticas para que você tenha duas tabelas de roteamento distintas e uma regra que informe ao seu PC quando usar uma delas.
Você inicia seu vpn e vamos assumir que você possui uma interface tap0 / tun0 com endereço IP 10.0.0.71 e uma interface wlan0 com o endereço 192.168.0.5.
Agora, precisamos configurar o roteamento de políticas:
e agora você está pronto. Você precisará vincular aplicativos específicos a qualquer interface, dependendo se deseja usar ou não a VPN. A ligação de um aplicativo a uma interface geralmente é fácil, exceto no Firefox notoriamente persistente, para o qual você pode ler esta página da Web .
Lembre-se de que você tem permissão para um único conjunto de servidores DNS, conforme especificado em /etc/resolv.conf. Você deve certificar-se de que pelo menos um deles esteja acessível a qualquer uma das interfaces: se a VPN especificar que ambos estejam dentro da LAN remota, a resolução de nomes para a segunda interface não VPN não funcionará.
fonte