Page cover

Contornando VPN local

Às vezes, você precisa executar uma aplicação usando a internet do seu provedor local, de modo que ela não seja afetada pelas rotas de um cliente de VPN. Em casos assim, o que fazer?

Usar um outro computador? Subir uma máquina virtual? Desconectar da VPN, acessar o que quer acessar e conectar novamente na VPN?

Nesta documentação vamos ver como executar aplicações por fora da VPN usando network e mount namespace, regra de roteamento (ip rule) e SNAT. A aplicação, neste caso, será o navegador Google Chrome.

Crie o namespace de rede chamado "navegador":

sudo ip netns add navegador

Crie um par de interfaces de rede do tipo "veth" e vincule a veth1 ao namespace "navegador":

sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth1 netns navegador

Atribue endereços IP as interfaces veth, habilite roteamento e ajuste as rotas e SNAT:

sudo ip addr add 10.0.0.1/24 dev veth0
sudo ip link set veth0 up
sudo ip netns exec navegador ip addr add 10.0.0.2/24 dev veth1
sudo ip netns exec navegador ip link set veth1 up
sudo ip netns exec navegador ip route add default via 10.0.0.1
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j MASQUERADE

Crie uma tabela de roteamento chamada "bypassvpn" e insira a rota default da rede local (wlp0s20f3 é a minha interface de rede):

Execute o bash no namespace de rede "navegador", em seguida execute um novo bash com o namespace de mount ativo, e sobrescreva a configuração de DNS (caso esteja usando um DNS interno da infra da VPN):

E execute o navegador neste novo ambiente:

Com isso, é esperado que o Google Chrome navegue na internet usando o IP público do seu provedor local e outro navegador (como o Firefox) use o IP público do seu provedor de VPN.

Last updated