Eu já vi algumas perguntas referentes a DNS estáticos, push do servidor openVPN, etc., mas nenhum deles realmente se aplica ou eles exigem ferramentas de GUI e estou usando um Ubuntu Core sem cabeçalho no qual eu sou SSH.
root@redacted:~# lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 14.04.3 LTS
Release: 14.04
Codename: trusty
Quando a máquina é conectada somente através da eth0 à rede local, tudo funciona bem. Eu posso fazer ping de IPs diretamente (8.8.8.8) e resolver nomes de domínio (google.com).
wget -q -O - ipecho.net/plain #Shows my ISPs provided Public IP
Quando a máquina está conectada através de tun0 usando a rede VPN, posso fazer ping de IPs diretamente (8.8.8.8) e resolver nomes de domínio (google.com).
wget -q -O - ipecho.net/plain #Shows my VPNs provided Public IP
Tudo como esperado até agora ...
Agora vem o problema ... Eu adiciono as seguintes regras iptables para forçar um usuário específico a só poder usar o adaptador tun0:
sudo iptables -A OUTPUT -m owner --gid-owner vpnonly -o lo -j ACCEPT
sudo iptables -A OUTPUT -m owner --gid-owner vpnonly -o eth0 -p tcp -d 192.168.x.x/24 --sport xxxx -j ACCEPT
sudo iptables -A OUTPUT -m owner --gid-owner vpnonly \! -o tun0 -j REJECT
Caso você esteja curioso, a segunda regra permite que uma UI baseada na web seja acessível em minha rede local que é executada como o usuário.
Então, agora, quando executo processos que não quero poder comunicar através do meu IP público, evitando vazamentos se a VPN for desconectada / etc / etc, simplesmente os executo rapidamente, cujo único grupo é vpnonly . NO ENTANTO quando executo um processo como vpnonly, posso fazer ping de IPs diretamente (8.8.8.8) mas não consigo resolver nomes de domínio (google.com).
root@redacted:~# sudo -u vpnonly ping -c 2 google.com
ping: unknown host google.com
Mesmo que eu consiga resolvê-lo novamente, isso seria satisfatório, mas o que eu realmente gostaria de fazer é definir a VPN para usar um DNS separado e específico, deixando a eth0 para usar 8.8.8.8 8.8.4.4.
Eu pesquisei tudo o que posso pensar relacionado a isso e não consigo resolvê-lo ... Espero ter adicionado detalhes suficientes, mas agradeço adicionar mais a pedido
EDIT 1: iptables completos
root@redacted:~# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere owner GID match vpnonly
ACCEPT tcp -- anywhere 192.168.x.x/24 owner GID match vpnonly tcp spt:xxxx
REJECT all -- anywhere anywhere owner GID match vpnonly reject-with icmp-port-unreachable
-
root@redacted:~# iptables -L -v
Chain INPUT (policy ACCEPT 16407 packets, 12M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6230 packets, 675K bytes)
pkts bytes target prot opt in out source destination
3751 2800K ACCEPT all -- any lo anywhere anywhere owner GID match vpnonly
6635 3332K ACCEPT tcp -- any eth0 anywhere 192.168.x.x/24 owner GID match vpnonly tcp spt:xxxx
4 224 REJECT all -- any !tun0 anywhere anywhere owner GID match vpnonly reject-with icmp-port-unreachable
Editar 2:
Tudo funciona corretamente até que as regras do iptables sejam adicionadas, ponto no qual o único problema que eu sofro é a resolução do nome de domínio. Meu vpn também fornece DNS não-registro. A solução para isso seria alterar a minha entrada de servidor de nomes / etc / network / interfaces de 192.168.x.1 para o endereço IP de DNS fornecido pela minha VPN e, em seguida, permitir todas as conexões com esse IP de DNS antes da rejeição? Eu queria perguntar antes de tentar, um para ter certeza de que era tão seguro quanto eu acredito que fosse logicamente, e dois eu estou oferecendo uma recompensa de qualquer maneira. Eu quero ter certeza de que não há vazamentos, e não quero introduzir um via DNS ...
Depois de mais esclarecimentos, ao invés de modificar interfaces, eu deveria simplesmente permitir 192.168.x.1 e o IP DNS da VPN explicitamente antes da rejeição?
O que eu realmente gostaria de fazer é forçar essas consultas DNS através do adaptador tun0, fazer qualquer comunicação com o mundo exterior do usuário "vpnonly" passar pela VPN, se possível.