À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":
sudoipnetnsaddnavegador
Crie um par de interfaces de rede do tipo "veth" e vincule a veth1 ao namespace "navegador":
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
sudo bash -c 'echo -e "252\tbypassvpn" >> /etc/iproute2/rt_tables'
sudo ip route add default via 192.168.0.1 dev wlp0s20f3 proto dhcp metric 600 table bypassvpn
sudo ip rule add from 10.0.0.0/24 table bypassvpn
sudo ip netns exec navegador bash
unshare --mount /bin/bash
echo -e "nameserver 8.8.8.8" > ./resolv.conf
mount --bind resolv.conf /etc/resolv.conf
mount -t cgroup2 cgroup2 /sys/fs/cgroup
mount -t securityfs securityfs /sys/kernel/security/