Como configuro o DNS ao compartilhar uma conexão VPN no Linux?

Como configuro o DNS ao compartilhar uma conexão VPN no Linux?

Estou usando um computador Linux (raspberry pi) para compartilhar uma conexão VPN via Ethernet. Quero que o Raspberry Pi se conecte à Internet normalmente (não pela VPN). Estou muito perto de fazer funcionar, mas não sei como configurar o DNS da 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

configuração eth1:

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

configuração de VPN

Eu só quero que o tráfego vindo da eth1 use a VPN. Eu mesmo configurei 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

Unindo as interfaces:

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

Teste:

Coloquei um laptop Windows na rede de compartilhamento VPN. É capaz de se comunicar diretamente com endereços da Internet. Mas o uso da pesquisa DNS de nomes de domínio falha. Não encontrei uma maneira funcional de configurar o DNS.

Eu tentei adicionar isso ao dnsmasq

server=<dns-server-address> 

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

dns-nameservers <dns-server-address> 

Isso fez com que resolvconf -l retornasse isto:

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

mas /etc/resolv.conf permanece o mesmo:

# Generated by resolvconf
nameserver 127.0.0.1

Eu até tentei editar o /etc/resolv.conf diretamente. - Mas é atualizado automaticamente e reescrito quase imediatamente.

--editar --

Meu objetivo é ter uma configuração que não exija nenhuma configuração específica em um cliente na rede de compartilhamento VPN. (Estarei anexando dispositivos que não podem ser configurados)

Também gostaria de enviar solicitações de DNS através da VPN, se possível.

--editar 2--

Primeiro. Mudei para testes com um cliente Linux. Modificar o resolv.conf para adicionar meu servidor DNS faz com que a conexão VPN com a Internet funcione.

No entanto - parece que a solução 5 é a certa para mim. Isso intercepta pacotes DNS e os altera para direcioná-los para um novo servidor DNS?

Eu não consegui fazer isso funcionar para mim. Vou postar minha configuração aqui. Estou esquecendo de algo?

# 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

-editar 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 isso, estamos recebendo respostas de DNS, mas elas não estão chegando ao cliente (192.168.5.128). Certo? Agora preciso descobrir como consertar isso...

Responder1

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 seu RPI, e se deseja que a consulta DNS passe pela VPN ou não.

1.Cliente separado (por OpenVPN) e DNSes RPI.

Este é o caso mais fácil: definir os DNSes do clienteno clientee os DNSes RPI em/etc/resolv.conf.

2.Cliente separado (fora do OpenVPN) e DNSes 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 presumi que seu cliente (Windows) usa o DNS do Google, 8.8.8.8.

3. alternativamente, você pode marcar pacotes DNS de clientes e encaminhá-los através doprincipaltabela de roteamento:

     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.Os mesmos servidores DNS para RPI e clientes, seja no OpenVPN ou fora dele.

Igual ao marcador 1 ou 2, basta usar o mesmo conjunto de DNSes.

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

Você pode pensar que configurar DNSes individualmente em cada cliente VPN é entediante, especialmente se você precisar configurar DNSes na rede do servidor, o que 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 a seguinte instrução ao arquivo de configuração do servidor:

    push "dhcp-option DNS 10.66.0.4"

Esta opção é escrita em uma variável chamadaopção_estrangeira_{n}: a primeira opção empurrada desta forma terán=1, e seu valor (no caso acima) é:

    foreign_option_1="dhcp-options DNS 10.66.0.4"

Esta variável é passada automaticamente para oacimascript, onde você terá que dividi-lo em três partes, extraindo o endereço IP, digamos$var3, e agora você pode adicionar as seguintes linhas ao seurotaroteiro:

    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êpoderiatenho que desabilitar o filtro de caminho reverso: não tenho certeza porque no meu laptop Arch Linux eu façonãopreciso fazer isso, enquanto estou na minha estação de trabalho Debian eufazer. Então, estou um pouco confuso agora, desculpe por isso.

informação relacionada