Autoriser le client OpenVPN à pousser ses propres serveurs DNS, indépendamment du DNS poussé du serveur OpenVPN?

9

Il y a un serveur OpenVPN fonctionnant sur Debian et il pousse un DNS dans le fichier de configuration du serveur:

pousser "dhcp-option DNS 8.8.8.8"

Existe-t-il une option pour permettre aux utilisateurs de modifier ces serveurs DNS côté client?

Voici le hic, le serveur openvpn doit pousser un DNS car sinon de nombreux clients OpenVPN ne pourront pas ouvrir de pages Web tant que les serveurs DNS définis manuellement dans les paramètres réseau du système.

Mon objectif est d'appliquer automatiquement un serveur DNS par défaut aux utilisateurs non techniquement qualifiés, tout en permettant également aux utilisateurs d'ordinateurs qualifiés de configurer leurs propres serveurs DNS.

Notez que simplement changer les paramètres DNS sur le PC alors que l'option 'push "dhcp-option DNS 8.8.8.8"' est active sur le serveur openvpn, ne fait rien. Le DNS poussé par le serveur reste quels que soient les paramètres DNS locaux.

Des idées?

Configuration du serveur 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

MISE À JOUR: Les systèmes d'exploitation clients sont Windows et Mac

Dimi
la source
Vous n'avez pas spécifié le système d'exploitation principal de vos clients DHCP, donc tout ce que nous pouvons vraiment dire est "oui, remplacer les serveurs DNS fournis par DHCP est généralement assez banal". Qu'avez-vous vécu qui a suggéré que ce n'était pas le cas?
Andrew B
Désolé, les systèmes d'exploitation sont Windows et Mac. Une fois connecté au serveur openvpn, je ne serais pas en mesure de modifier efficacement les paramètres DNS. Par exemple, le serveur openvpn fournit DNS: 8.8.8.8 et lorsque je passe à un DNS en Afrique du Sud (localement) par exemple, mon serveur DNS officiel reste 8.8.8.8 (ou l'analogue de google). On peut tester le serveur DNS sur dnsleaktest c0m
Dimi

Réponses:

15

Depuis 2017 (OpenVPN 2.4), cela est désormais possible. Ajoutez cette ligne à votre fichier de configuration client:

pull-filter ignore "dhcp-option DNS"

et il ignorera toutes les lignes de configuration poussées qui commencent par le texte cité.

Les options sont appariées de haut en bas, donc la première correspondance est utilisée. Vous pouvez l'utiliser pour autoriser certains itinéraires et en rejeter d'autres, si cela convient à vos besoins.

Les trois mots - clés d'action sont accept, ignoreet reject. Je n'ai pas découvert de cas d'utilisation pour reject.

Criggie
la source
4

Dans la documentation officielle d' OpenVPN, vous pouvez trouver:

[...]
--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.
[...]

Malheureusement, en plus de ce que vous demandez, cela a pour effet secondaire de désactiver également la passerelle de redirection fournie par votre configuration et cela peut représenter un problème, dans votre cas.

Ce que je suggère, c'est une approche complètement différente.

Comme vous l'avez explicitement mentionné: « Mon objectif est d'appliquer automatiquement un serveur DNS par défaut aux utilisateurs non techniquement qualifiés, tout en permettant également aux utilisateurs d'ordinateurs qualifiés de configurer leurs propres serveurs DNS. » Il semble que vous sachiez exactement quels utilisateurs vous souhaitez fournir. une configuration DNS et quels utilisateurs vous ne souhaitez pas fournir une telle configuration.

Par conséquent, au lieu de pousser votre configuration directement dans le fichier de configuration principal d'OpenVpn (... et, en tant que tel, de fournir une telle configuration à TOUS vos utilisateurs), vous pouvez implémenter une configuration par utilisateur . Vous pouvez le faire avec:

--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.

Donc, comme pour la configuration principale, vous devez supprimer :

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

et ajoutez une référence au répertoire / etc / openvpn / userconf (à titre d'exemple. N'hésitez pas à choisir ce que vous voulez):

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

Ensuite, dans un tel répertoire userconf, créez un fichier pour chacun des utilisateurs auxquels vous souhaitez fournir un tel DNS, y compris dans ce fichier les deux lignes supprimées ci-dessus.

Évidemment, vous êtes libre d'affiner la configuration openvpn pour chaque utilisateur, sans limiter la personnalisation aux deux lignes ci-dessus.

Enfin, vous pourriez également être intéressé par le paramètre exclusif ccd .

Damiano Verzulli
la source
Merci pour l'effort Damiano mais je crains que la bonne réponse soit que le serveur DNS de l'adaptateur TAP doive être changé, car changer les propriétés IPv4 de la connexion Internet en serveurs DNS personnalisés n'aide pas lorsqu'il est connecté à un serveur OpenVPN qui pousse les serveurs DNS. De cette façon, il n'est pas nécessaire de supprimer quoi que ce soit des configurations de serveur, mais simplement de modifier les propriétés IPv4 des adaptateurs TAP de la machine Windows.
Dimi
@Dimi: en fait, cette solution est beaucoup plus limitée que vous ne la faites apparaître. Étant donné que différentes connexions VPN utilisent différents serveurs DNS et l'ordre d'établissement des liens déterminera quel adaptateur TAP sera utilisé, je ne peux pas préconfigurer les adaptateurs TAP pour utiliser un ensemble spécifique de DNS, car les DNS que je configure peuvent même ne pas s'appliquer au connexion établie à l'aide de cet adaptateur TAP particulier. En bref, votre solution de contournement ne fonctionne que s'il n'y a qu'une seule connexion VPN toujours établie via le même adaptateur TAP.
0xC0000022L
1

Mon problème n'était pas exactement le même, mais les symptômes étaient suffisamment similaires pour que cette question apparaisse dans les résultats de recherche, donc au cas où quelqu'un d'autre se retrouverait ici pour la même raison:

J'utilise Tunnelblick , une interface graphique OpenVPN pour Mac OS. Mon serveur OpenVPN n'était pas configuré pour pousser des options DHCP ou DNS, mais le client utilisait toujours le serveur DNS sur VPN, au lieu du serveur DNS local non VPN que je voulais qu'il utilise.

La solution était d'aller dans Configurations → onglet Paramètres de Tunnelblick et de changer Définir DNS / WINS sur Ne pas définir de serveur de noms .

Aldaviva
la source
0

Merci pour @aldaviva, cela fonctionne sur mon macOS 10.11.

Joignez ma capture d'écran.

entrez la description de l'image ici

Chu-Saing Lai
la source