Como configuro o DNS quando compartilho uma conexão VPN no linux?

2

Estou usando um computador Linux (raspberry pi) para compartilhar uma conexão VPN via ethernet. Eu quero o pi framboesa para se conectar à internet normalmente (não através da VPN). Estou muito perto de fazê-lo funcionar, mas não sei como configurar o DNS para a rede eth1.

Connection to the internet: eth0 192.168.11.21/24, gateway 192.168.11.1
vpn connection: tun0 <- openvpn connection
vpn sharing network: eth1 192.168.5.1/24 <- this maching is the gatway for the vpn sharing network

eth1 config:

eth1: /etc/network/interface
auto eth1
iface eth1 inet static
address 192.168.5.1
netmask 255.255.255.0

Eu tenho o dnsmasq rodando como um servidor dhcp para eth1 (rede de compartilhamento vpn)

# Configuration file for dnsmasq.
#
interface=eth1
dhcp-range=192.168.5.50,192.168.5.150,12h

config vpn

Eu só quero o tráfego proveniente da eth1 para usar o vpn. Eu mesmo configuro as rotas usando uma tabela de roteamento separada.

# extract from openvpn config
route-noexec
route-up "/etc/openvpn/route-up.sh"
down "/etc/openvpn/down.sh"

# route-up.sh
/sbin/ip route add $trusted_ip/32 via $route_net_gateway table vpn
/sbin/ip route add 0.0.0.0/1 via $route_vpn_gateway table vpn
/sbin/ip route add 128.0.0.0/1 via $route_vpn_gateway table vpn

Também precisei executar alguns comandos para configurar a tabela de roteamento separada:

# make a new routing table called vpn
echo 200 vpn >> /etc/iproute2/rt_tables 

# add a rule to use the routing table for the addresses on eth1
ip rule add from 192.168.5.0/24 table vpn

Ligando as interfaces:

sysctl net.ipv4.ip_forward=1      
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Teste:

Eu coloquei um laptop Windows na rede de compartilhamento vpn. É capaz de se comunicar diretamente com endereços de internet. Mas, usando nomes de domínio, a pesquisa de DNS falha. Eu não encontrei uma maneira de trabalhar para configurar o DNS.

Eu tentei adicionar isso ao dnsmasq

server=<dns-server-address> 

Eu também tentei adicionar essa linha em eth1 em / etc / network / interfaces

dns-nameservers <dns-server-address> 

Isso fez com que o resolvconf -l retornasse isto:

# resolv.conf from eth1.inet
# Generated by ifup for eth1.inet
nameserver <dns-server-address1>
nameserver <dns-server-address2>

mas o /etc/resolv.conf reimita o mesmo:

# Generated by resolvconf
nameserver 127.0.0.1

Eu até tentei editar o /etc/resolv.conf diretamente. - Mas é atualizado automaticamente e é gravado quase de imediato.

- editar -

Meu objetivo é ter uma configuração que não requeira configuração específica em um cliente na rede de compartilhamento vpn. (Eu vou estar anexando dispositivos que não podem ser configurados)

Também gostaria de enviar pedidos de DNS através da VPN, se possível.

- edição 2 -

Primeiro. Eu mudei para o teste com um cliente Linux. Modificando o resolv.conf para adicionar meu servidor dns, a conexão à Internet vpn'd funciona.

No entanto - parece que a solução 5 é a única para mim. Isso é interceptar pacotes DNS e alterá-los para direcioná-los para um novo servidor DNS?

Eu não consegui fazer isso funcionar para mim. Vou postar minha configuração aqui. Estou faltando alguma coisa?

# iptables-save
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*mangle
:PREROUTING ACCEPT [51:3878]
:INPUT ACCEPT [49:3758]
:FORWARD ACCEPT [2:120]
:OUTPUT ACCEPT [30:3438]
:POSTROUTING ACCEPT [32:3558]
-A PREROUTING -p tcp -m tcp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
-A PREROUTING -p udp -m udp --dport 53 -j MARK --set-xmark 0x1/0xffffffff
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*nat
:PREROUTING ACCEPT [4:337]
:INPUT ACCEPT [3:277]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i tun0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 198.18.0.1
-A PREROUTING -i tun0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 198.18.0.2
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Fri Sep 23 16:57:46 2016
# Generated by iptables-save v1.4.21 on Fri Sep 23 16:57:46 2016
*filter
:INPUT ACCEPT [41189:45918808]
:FORWARD ACCEPT [63803:44422296]
:OUTPUT ACCEPT [33919:5341216]
COMMIT
# Completed on Fri Sep 23 16:57:46 2016

# ip route list table vpn
0.0.0.0/1 via 172.21.24.1 dev tun0 
81.171.74.16 via 192.168.11.1 dev eth0 
128.0.0.0/1 via 172.21.24.1 dev tun0 


# ip route list table main
default via 192.168.11.1 dev eth0 
default via 192.168.11.1 dev eth0  metric 202 
172.21.24.0/23 dev tun0  proto kernel  scope link  src 172.21.24.57 
192.168.5.0/24 dev eth1  proto kernel  scope link  src 192.168.5.1 
192.168.11.0/24 dev eth0  proto kernel  scope link  src 192.168.11.21 
192.168.11.0/24 dev eth0  proto kernel  scope link  src 192.168.11.21  metric 202 

# ip rule
0:  from all lookup local 
32764:  from all fwmark 0x1 lookup vpn 
32765:  from 192.168.5.0/24 lookup vpn 
32766:  from all lookup main 
32767:  from all lookup default 

# cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 127.0.0.1

# On the client
# cat /etc/resolv.conf 
# Generated by resolvconf
nameserver 192.168.5.1

- edição 3 -

# tcpdump -i tun0 -n port 53
23:44:29.787915 IP 192.168.5.1.53 > 192.168.5.128.38840: 36460 4/0/0 A 157.7.203.102, A 157.7.154.23, A 116.58.172.182, A 157.7.235.92 (101)
23:44:29.788071 IP 192.168.5.1.53 > 192.168.5.128.38840: 37999 0/0/0 (37)
23:44:30.619149 IP 192.168.5.1.53 > 192.168.5.128.58425: 3383 1/0/0 A 129.169.10.40 (47)
23:44:30.620635 IP 192.168.5.1.53 > 192.168.5.128.58425: 11649 0/1/0 (83)

Olhando para isto, estamos obtendo respostas de DNS voltando, mas elas não estão indo para o cliente (192.168.5.128). Certo? Agora eu preciso descobrir como consertar isso ...

    
por pauld 22.09.2016 / 14:56

1 resposta

1

Você não esclareceu se deseja que os servidores DNS sejam específicos para sua máquina Windows, para todos os clientes OpenVPN, ou talvez até para você RPI, e se você deseja que o DNS consulte a VPN ou não.

1. Cliente separado (sobre OpenVPN) e DNS do RPI.

Este é o caso mais fácil: configurar os DNSs do cliente no cliente e os DNSs do RPI em /etc/resolv.conf .

2. Separe os DNS do cliente (fora do OpenVPN) e RPI.

O mesmo que acima, exceto que você terá que adicionar a seguinte regra de roteamento ao RPI:

    ip route add 8.8.8.8/32 via Your.Router.IP.Address dev Your.Non.VPN.Interface table vpn

onde assumi que seu cliente (Windows) usa o DNS do Google, 8.8.8.8.

3. Alternativamente , você pode marcar pacotes DNS de clientes e rotea-los através da tabela de roteamento main :

     iptables -A PREROUTING -t mangle -p tcp --dport 53 -j MARK --set-mark 1
     iptables -A PREROUTING -t mangle -p udp --dport 53 -j MARK --set-mark 1
     ip rule add from all fwmark 1 table main
     iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

4. Mesmos servidores DNS para RPI e clientes, seja pelo OpenVPN ou por fora.

O mesmo que o marcador 1 ou 2, use apenas o mesmo conjunto de DNSes.

5. Configuração automática para todos os clientes do OpenVPN, obviamente, sobre o OpenVPN.

Você pode pensar que configurar os DNSs individualmente em cada cliente VPN é entediante, especialmente se você precisar configurar DNSs na rede do servidor, não algo tão fácil quanto o do Google. Você terá primeiro que enviar a opção DNS do servidor para o cliente RPI, adicionando o sthetment seguinte ao arquivo de configuração do servidor:

    push "dhcp-option DNS 10.66.0.4"

Esta opção é escrita em uma variável chamada foreign_option_ {n} : a primeira opção pressionada dessa forma terá n = 1 , e seu valor (no caso acima) ) é:

    foreign_option_1="dhcp-options DNS 10.66.0.4"

Esta variável é automaticamente passada para o script up , onde você terá que dividi-la em três partes, extraindo o endereço IP, digamos $ var3 , e você Agora, você pode adicionar as seguintes linhas ao seu script rotear :

    iptables -t mangle -A PREROUTING -p tcp --dport 53 -j MARK --set-mark 1
    iptables -t mangle -A PREROUTING -p udp --dport 53 -j MARK --set-mark 1
    ip rule add  fwmark 1 table vpn
    iptables -t nat -A PREROUTING -p tcp --dport 53 -i tun0 -j DNAT --to-destination $var3
    iptables -t nat -A PREROUTING -p udp --dport 53 -i tun0 -j DNAT --to-destination $var3

Para fazer isso funcionar, você pode ter que desabilitar o filtro de caminho inverso: Não tenho certeza, porque no meu laptop Arch Linux eu não preciso fazer isso, enquanto na minha estação de trabalho Debian eu faço . Então, estou um pouco confuso, agora mesmo, sinto muito por isso.

    
por 22.09.2016 / 16:57