是否允许OpenVPN客户端推送自己的DNS服务器,而不管OpenVPN服务器推送的dns?


9

Debian上有一个运行OpenVPN的服务器,它在服务器配置文件中推送了DNS:

推送“ dhcp-option DNS 8.8.8.8”

是否有允许用户在客户端上更改该DNS服务器的选项?

这很重要,openvpn服务器必须推送DNS,因为否则,除非在系统的网络设置中手动设置DNS服务器,否则许多OpenVPN客户端将无法打开网页。

我的目标是将默认DNS服务器自动应用到非技术人员,同时还允许熟练的计算机用户设置自己的DNS服务器。

请注意,在openvpn服务器上激活“ push“ dhcp-option DNS 8.8.8.8””选项时,仅在PC上更改DNS设置就不会执行任何操作。无论本地DNS设置如何,服务器推送的DNS都将保留。

有任何想法吗?

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

更新:客户端操作系统是Windows和Mac


您尚未指定DHCP客户端的主要操作系统,因此我们只能说的是:“是的,覆盖DHCP提供的DNS服务器通常很简单。” 您在经历什么表明不是这种情况?
安德鲁B

抱歉,操作系统是Windows和Mac。连接到openvpn服务器后,我将无法有效更改DNS设置。例如,openvpn服务器提供DNS:8.8.8.8,例如,当我更改为南非(本地)的DNS时,我的官方DNS服务器仍为8.8.8.8(或Google的类似产品)。一个人可以在dnsleaktest c0m上测试DNS服务器
Dimi

Answers:


16

从2017年(OpenVPN 2.4)开始,这已经成为可能。将此行添加到您的客户端配置文件:

pull-filter ignore "dhcp-option DNS"

它将忽略所有以引号引起来的已推送配置行。

选项自上而下匹配,因此使用第一个匹配。如果需要,您可以使用它来允许某些路线而拒绝其他路线。

这三个动作关键字acceptignorereject。我尚未发现的用例reject


4

在官方OpenVPN文档中,您可以找到:

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

不幸的是,除了您要问的以外,这还具有禁用配置提供的重定向网关的副作用,对于您的情况,这可能是一个问题。

我建议的是完全不同的方法。

正如您明确提到的那样:“ 我的目标是将默认DNS服务器自动应用到非技术熟练的用户,同时还允许熟练的计算机用户设置自己的DNS服务器。 ”看来您确切知道要提供哪些用户DNS配置,以及您不想提供哪些配置的用户。

因此,您可以实现每个用户的配置,而不是直接在主OpenVpn配置文件中推送您的配置(...如此,将此类配置提供给所有用户)。您可以执行以下操作:

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

因此,对于主要配置,您应该删除

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

添加/ etc / openvpn / userconf目录的引用(例如,请随意选择所需的内容):

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

然后,在此类userconf目录中,为要提供此类DNS的每个用户创建一个文件,在该文件中包括上面删除的两行。

显然,您可以自由地为每个用户微调openvpn配置,而不是将自定义限制在上面的两行中。

最后一点,您可能也对ccd-exclusive参数感兴趣。


感谢Damiano的努力,但我担心正确的答案是应该更改TAP适配器的DNS服务器,因为将Internet连接的IPv4属性更改为自定义DNS服务器在连接到推送DNS服务器的OpenVPN服务器时无济于事。这样,不需要从服务器配置中删除任何内容,而只需编辑Windows计算机的TAP适配器的IPv4属性。
Dimi 2015年

@Dimi:实际上,该解决方案比您提出的解决方案要局限得多。由于不同的VPN连接使用不同的DNS服务器,并且建立链接的顺序将确定使用哪个TAP适配器,因此我可能无法将TAP适配器预配置为使用一组特定的DNS,因为我配置的DNS甚至可能不适用于使用该特定TAP适配器建立的连接。简而言之,仅始终通过同一TAP适配器建立一个VPN连接时,您的解决方法才有效。
0xC0000022L

1

我的问题并不完全相同,但是症状非常相似,足以使该问题出现在搜索结果中,因此如果其他人出于同样的原因而出现在这里:

我正在使用Tunnelblick,这是Mac OS的OpenVPN GUI。我的OpenVPN服务器未设置为推送任何DHCP或DNS选项,但是客户端仍在通过VPN使用DNS服务器,而不是我希望其使用的本地非VPN DNS服务器。

解决方案是进入Tunnelblick的“配置”→“设置”选项卡,然后将“ 设置DNS / WINS”更改为“不设置名称服务器”


0

感谢@aldaviva,它正在我的macOS 10.11上运行。

附上我的截图。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.