¿Cómo configuro DNS cuando comparto una conexión VPN en Linux?

¿Cómo configuro DNS cuando comparto una conexión VPN en Linux?

Estoy usando una computadora con Linux (raspberry pi) para compartir una conexión VPN a través de Ethernet. Quiero que la Raspberry Pi se conecte a Internet normalmente (no a través de la VPN). Estoy muy cerca de hacerlo funcionar, pero no sé cómo configurar el DNS para la red 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

configuración eth1:

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

Tengo dnsmasq ejecutándose como servidor dhcp para eth1 (red compartida vpn)

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

configuración vpn

Solo quiero que el tráfico proveniente de eth1 use la VPN. Yo mismo configuro las rutas usando una tabla de enrutamiento 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

También necesitaba ejecutar algunos comandos para configurar la tabla de enrutamiento 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

Uniendo las interfaces:

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

Pruebas:

Puse una computadora portátil con Windows en la red para compartir VPN. Es capaz de comunicarse directamente con direcciones de Internet. Pero el uso de la búsqueda DNS de nombres de dominio falla. No he encontrado una forma funcional de configurar el DNS.

Intenté agregar esto a dnsmasq.

server=<dns-server-address> 

También intenté agregar esta línea bajo eth1 en /etc/network/interfaces

dns-nameservers <dns-server-address> 

Esto provocó que resolvconf -l devolviera esto:

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

pero /etc/resolv.conf sigue siendo el mismo:

# Generated by resolvconf
nameserver 127.0.0.1

Incluso intenté editar /etc/resolv.conf directamente. - Pero se actualiza automáticamente y se vuelve a escribir casi de inmediato.

--editar --

Mi objetivo es tener una configuración que no requiera ninguna configuración específica en un cliente en la red de uso compartido de VPN. (Estaré adjuntando dispositivos que no se pueden configurar)

También me gustaría enviar solicitudes de DNS a través de la VPN, si es posible.

--editar 2--

Primero. Pasé a probar con un cliente Linux. Modificar resolv.conf para agregar mi servidor DNS hace que funcione la conexión a Internet VPN.

Sin embargo, parece que la solución 5 es la indicada para mí. ¿Se trata de interceptar paquetes DNS y modificarlos para dirigirlos a un nuevo servidor DNS?

No pude hacerlo funcionar para mí. Publicaré mi configuración aquí. ¿Me estoy perdiendo 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)

Al observar esto, recibimos respuestas de DNS, pero no llegan al cliente (192.168.5.128). ¿Bien? Ahora necesito descubrir cómo solucionarlo...

Respuesta1

No ha aclarado si desea que los servidores DNS sean específicos de su máquina Windows, de todos los clientes OpenVPN o incluso de su RPI, y si desea que la consulta DNS se realice a través de la VPN o no.

1.DNS de cliente (a través de OpenVPN) y RPI separados.

Este es el caso más sencillo: configurar los DNS del clienteen el clientey los DNS RPI en/etc/resolv.conf.

2.DNS de cliente (fuera de OpenVPN) y RPI separados.

Igual que el anterior excepto que tendrás que agregar la siguiente regla de enrutamiento al RPI:

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

donde supuse que su cliente (Windows) usa el DNS de Google, 8.8.8.8.

3. Alternativamente, puede marcar paquetes DNS de clientes y enrutarlos a través delprincipaltabla de ruteo:

     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.Los mismos servidores DNS para RPI y clientes, ya sea a través de OpenVPN o fuera.

Igual que el punto 1 o 2, solo use el mismo conjunto de DNS.

5.Configuración automática para todos los clientes OpenVPN, obviamente a través de OpenVPN.

Puede que pienses que configurar los DNS individualmente en cada cliente VPN es tedioso, especialmente si necesitas configurar los DNS en la red del servidor, algo que no es tan fácil como el de Google. Primero deberá enviar la opción DNS desde el servidor al cliente RPI, agregando la siguiente declaración al archivo de configuración del servidor:

    push "dhcp-option DNS 10.66.0.4"

Esta opción se escribe en una variable llamadaopción_extranjera_ {n}: la primera opción empujada de esta manera tendránorte=1, y su valor (en el caso anterior) es:

    foreign_option_1="dhcp-options DNS 10.66.0.4"

Esta variable se pasa automáticamente alarribascript, donde tendrá que dividirlo en tres partes, extrayendo la dirección IP en, digamos$var3, y ahora puede agregar las siguientes líneas a suruta arribaguion:

    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 que esto funcione, ustedpuedeTengo que desactivar el filtro de ruta inversa: no estoy seguro porque en mi computadora portátil Arch Linux lo hago.noNecesito hacer eso, mientras estoy en mi estación de trabajo Debianhacer. Así que estoy un poco desconcertado en este momento, lo siento.

información relacionada