¿Permitir que el cliente OpenVPN empuje sus propios servidores DNS, independientemente de los DNS empujados del servidor OpenVPN?

9

Hay un servidor OpenVPN ejecutándose en un Debian y empuja un DNS en el archivo de configuración del servidor:

presione "dhcp-option DNS 8.8.8.8"

¿Existe una opción para permitir que los usuarios cambien los servidores DNS en el lado del cliente?

Aquí está el truco, el servidor openvpn debe empujar un DNS porque de lo contrario muchos clientes de OpenVPN no podrán abrir páginas web hasta que configuren manualmente los servidores DNS en la configuración de red del sistema.

Mi objetivo es aplicar automáticamente un servidor DNS predeterminado a los usuarios que no tienen conocimientos técnicos, mientras que también permitir que los usuarios de computadoras califiquen sus propios servidores DNS.

Tenga en cuenta que simplemente cambiar la configuración de DNS en la PC mientras la opción 'push "dhcp-option DNS 8.8.8.8" está activa en el servidor openvpn, no hace nada. El DNS empujado por el servidor permanece independientemente de la configuración de DNS local.

¿Algunas ideas?

Configuración del servidor OpenVPN:

# cat /etc/openvpn/openvpn.conf
server 10.186.35.0 255.255.255.0
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
ifconfig-pool-persist ipp.txt
#push "route 0.0.0.0 0.0.0.0"
#push "redirect-gateway"
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 10 120
comp-lzo
user nobody
group users
persist-key
persist-tun
status openvpn-status.log
verb 3
script-security 3
auth-user-pass-verify /etc/openvpn/auth-chap via-env
client-cert-not-required
duplicate-cn
management 127.0.0.1 5119
script-security 3 system
username-as-common-name
client-connect /etc/openvpn/scripts/clientconnect.sh
client-disconnect /etc/openvpn/scripts/clientdisconnect.sh
log-append /var/log/openvpn.log
log /var/log/openvpn.log

ACTUALIZACIÓN: Los sistemas operativos de los clientes son Windows y Mac

Dimi
fuente
No ha especificado el sistema operativo principal de sus clientes DHCP, por lo que todo lo que realmente podemos decir es "sí, anular los servidores DNS suministrados por DHCP suele ser bastante trivial". ¿Qué estabas experimentando que sugirió que este no era el caso?
Andrew B
Lo sentimos, los sistemas operativos son Windows y Mac. Cuando estoy conectado al servidor openvpn, no podría cambiar efectivamente la configuración de DNS. Por ejemplo, el servidor openvpn proporciona DNS: 8.8.8.8 y cuando cambio a un DNS en Sudáfrica (localmente), por ejemplo, mi servidor DNS oficial sigue siendo 8.8.8.8 (o el análogo de google). Uno puede probar el servidor DNS en dnsleaktest c0m
Dimi

Respuestas:

15

A partir de 2017 (OpenVPN 2.4) esto ahora es posible. Agregue esta línea a su archivo de configuración del cliente:

pull-filter ignore "dhcp-option DNS"

e ignorará todas las líneas de configuración empujadas que comienzan con el texto citado.

Las opciones se combinan de arriba hacia abajo, por lo que se utiliza la primera coincidencia. Puede usar esto para permitir algunas rutas y rechazar otras, si se ajusta a sus necesidades.

Las tres palabras clave de acción son accept, ignorey reject. No he descubierto un caso de uso para reject.

Criggie
fuente
4

En la documentación oficial de OpenVPN puede encontrar:

[...]
--route-nopull
  When used with --client or --pull, accept options pushed by server EXCEPT for routes and 
  dhcp options like DNS servers.
  When used on the client, this option effectively bars the server from adding routes to the 
  client's routing table, however note that this option still allows the server to set the 
  TCP/IP properties of the client's TUN/TAP interface.
[...]

Desafortunadamente, además de lo que está preguntando, esto tiene el efecto secundario de deshabilitar también la puerta de enlace de redireccionamiento proporcionada por su configuración y esto puede representar un problema, para su caso.

Lo que sugiero es un enfoque completamente diferente.

Como mencionó explícitamente: " Mi objetivo es aplicar automáticamente un servidor DNS predeterminado a usuarios no técnicamente expertos, al mismo tiempo que permitir que usuarios de computadoras capacitados establezcan sus propios servidores DNS " . Parece que usted sabe exactamente qué usuarios desea proporcionar una configuración de DNS y a qué usuarios no desea proporcionar dicha configuración.

Por lo tanto, en lugar de insertar su configuración directamente en el archivo de configuración principal de OpenVpn (... y, como tal, proporcionar dicha configuración a TODOS sus usuarios), puede implementar una configuración por usuario . Puedes hacer esto con:

--client-config-dir dir
  Specify a directory dir for custom client config files. After a connecting client 
  has been authenticated, OpenVPN will look in this directory for a file having the 
  same name as the client's X509 common name. If a matching file exists, it will be
  opened and parsed for client-specific configuration options. If no matching file is
  found, OpenVPN will instead try to open and parse a default file called "DEFAULT", 
  which may be provided but is not required. Note that the configuration files must 
  be readable by the OpenVPN process after it has dropped it's root privileges.
  This file can specify a fixed IP address for a given client using --ifconfig-push, as 
  well as fixed subnets owned by the client using --iroute.
  One of the useful properties of this option is that it allows client configuration 
  files to be conveniently created, edited, or removed while the server is live, without 
  needing to restart the server.
  The following options are legal in a client-specific context: --push, --push-reset, 
  --iroute, --ifconfig-push, and --config.

Entonces, en cuanto a la configuración principal, debe eliminar :

  [**** to be removed from the main config***]
  push "dhcp-option DNS 8.8.8.8"
  push "dhcp-option DNS 8.8.4.4"

y agregue referencia al directorio / etc / openvpn / userconf (como ejemplo. Siéntase libre de elegir lo que quiera):

 [**** to be ADDED to the main config***]
 client-config-dir /etc/openvpn/userconf

Luego, en dicho directorio de configuración de usuario, cree un archivo para cada uno de los usuarios que desea proporcionar dicho DNS, incluidas en dicho archivo las dos filas eliminadas anteriormente.

Obviamente, usted es libre de ajustar la configuración de openvpn para cada usuario, sin limitar la personalización a las dos filas anteriores.

Como nota final, es posible que también le interese el parámetro exclusivo de ccd .

Damiano Verzulli
fuente
Gracias por el esfuerzo Damiano, pero me temo que la respuesta correcta es que el servidor DNS del adaptador TAP debe cambiarse, ya que cambiar las propiedades IPv4 de la conexión a Internet a servidores DNS personalizados no ayuda cuando se conecta a un servidor OpenVPN que empuja servidores DNS. De esta manera, no es necesario eliminar nada de las configuraciones del servidor, sino simplemente editar las propiedades IPv4 de los adaptadores TAP de la máquina Windows.
Dimi
@Dimi: en realidad esa solución es mucho más limitada de lo que parece. Dado que las diferentes conexiones VPN usan diferentes servidores DNS y el orden de establecer los enlaces determinará qué adaptador TAP se usa, no puedo preconfigurar los adaptadores TAP para usar un conjunto específico de DNS, ya que los DNS que estoy configurando pueden ni siquiera aplicarse al conexión que se establece usando ese adaptador TAP particular. En resumen, su solución funciona solo si solo hay una conexión VPN establecida a través del mismo adaptador TAP.
0xC0000022L
1

Mi problema no era exactamente el mismo, pero los síntomas eran lo suficientemente similares como para que esta pregunta apareciera en los resultados de búsqueda, por lo que en caso de que alguien más termine aquí por la misma razón:

Estoy usando Tunnelblick , una GUI de OpenVPN para Mac OS. Mi servidor OpenVPN no estaba configurado para enviar ninguna opción de DHCP o DNS, pero el cliente todavía estaba usando el servidor DNS a través de VPN, en lugar del servidor DNS local que no era VPN que quería que usara.

La solución fue ir a la pestaña Configuraciones → Configuración de Tunnelblick y cambiar Establecer DNS / WINS a No establecer el servidor de nombres .

Aldaviva
fuente
0

Gracias por @aldaviva, está funcionando en mi macOS 10.11.

Adjunte mi captura de pantalla.

ingrese la descripción de la imagen aquí

Chu-Saing Lai
fuente