Fazendo bind para escutar localhost em netns

1

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?

    
por n0rd 17.12.2015 / 21:58

0 respostas