Eu tenho um Debian Jessie rodando Bind. Existe uma conexão OpenVPN configurada. E resolv.conf
configurado para usar a vinculação local primeiro:
nameserver 127.0.0.1
nameserver 4.2.2.4
Eu quero configurar o sistema de uma forma que certos programas acessem a internet somente através dessa conexão VPN (na ausência dessa conexão ele não deve ter nenhum acesso em qualquer lugar ), e o resto para acessar a internet diretamente. Eu quero que todos programas usem o Bind local para resolver nomes de domínio e remover esse 4.2.2.4
de resolv.conf
.
Eu achei que namespaces de rede são ferramentas adequadas para um trabalho: eu movo a interface VPN para o namespace da rede (então é a única conexão disponível lá exceto loopback), então execute os programas certos na minha rede namespace. Eu fiz o seguinte script que configurei para executar como script route-up
do OpenVPN:
NS=zzz
if [ ! -f /var/run/netns/$NS ]; then
/sbin/ip netns add $NS
fi
/sbin/ip link set $dev netns $NS
/sbin/ip netns exec $NS /sbin/ifconfig lo up
/sbin/ip netns exec $NS /sbin/ifconfig $dev $ifconfig_local pointopoint $ifconfig_remote up
/sbin/ip netns exec $NS /sbin/route add default gw $ifconfig_remote metric 1024
Funciona muito bem para mim, exceto que Bind não escuta a interface de loopback no namespace da minha rede, portanto todas as solicitações de resolução de nomes vão para o DNS externo. Como faço para consertar isso? Posso especificar de alguma forma que ambos os loopback (um regular e netns um) são os mesmos? Ou devo executar outra cópia do Bind no meu namespace? Algo mais?
Tags networking debian bind