Mac OS X Mountain Lion-DNS解析通过拨号连接在VPN上使用了错误的顺序


23

我正在使用Mac OS X 10.8.2的MacBook,并通过VPN连接到我公司的网络。通过LAN或WL​​AN建立VPN连接时,一切工作正常。但是,当我使用拨号连接(华为HSDPA USB记忆棒)时,主机名在应用程序(例如Web浏览器)中无法正确解析。像这样的命令行工具host name可以正确解析IP地址,ping name无法解析。

使用scutil --dnsWLAN和拨号连接时,我转储了DNS配置。查找顺序有明显的不同:

connecting using WLAN:

resolver #1
  nameserver[0] : 192.168.80.10
  nameserver[1] : 192.168.80.24
  if_index : 6 (ppp0)
  reach    : Reachable,Transient Connection
  order    : 100000

resolver #2
  nameserver[0] : 192.168.80.10
  nameserver[1] : 192.168.80.24
  if_index : 6 (ppp0)
  reach    : Reachable,Transient Connection
  order    : 200000

resolver #3
  domain   : local
  options  : mdns
  timeout  : 5
  order    : 300000

resolver #4
  domain   : 254.169.in-addr.arpa
  options  : mdns
  timeout  : 5
  order    : 300200

resolver #5
  domain   : 8.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300400

resolver #6
  domain   : 9.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300600

resolver #7
  domain   : a.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300800

resolver #8
  domain   : b.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 301000

DNS configuration (for scoped queries)

resolver #1
  nameserver[0] : 192.168.1.1
  if_index : 4 (en0)
  flags    : Scoped
  reach    : Reachable,Directly Reachable Address

resolver #2
  nameserver[0] : 192.168.80.10
  nameserver[1] : 192.168.80.24
  if_index : 6 (ppp0)
  flags    : Scoped
  reach    : Reachable,Transient Connection

ppp0连接是VPN连接。如您所见,两个服务器已连接,并且它们在命令行和应用程序中均能正确应答。

Connecting via UMTS:

resolver #1
  nameserver[0] : 139.7.30.126
  nameserver[1] : 139.7.30.125
  if_index : 6 (ppp0)
  reach    : Reachable,Transient Connection
  order    : 100000

resolver #2
  nameserver[0] : 192.168.80.10
  nameserver[1] : 192.168.80.24
  if_index : 7 (ppp1)
  reach    : Reachable,Transient Connection
  order    : 100000

resolver #3
  nameserver[0] : 192.168.80.10
  nameserver[1] : 192.168.80.24
  if_index : 7 (ppp1)
  reach    : Reachable,Transient Connection
  order    : 200000

resolver #4
  domain   : local
  options  : mdns
  timeout  : 5
  order    : 300000

resolver #5
  domain   : 254.169.in-addr.arpa
  options  : mdns
  timeout  : 5
  order    : 300200

resolver #6
  domain   : 8.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300400

resolver #7
  domain   : 9.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300600

resolver #8
  domain   : a.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 300800

resolver #9
  domain   : b.e.f.ip6.arpa
  options  : mdns
  timeout  : 5
  order    : 301000

DNS configuration (for scoped queries)

resolver #1
  nameserver[0] : 192.168.80.10
  nameserver[1] : 192.168.80.24
  if_index : 7 (ppp1)
  flags    : Scoped
  reach    : Reachable,Transient Connection

resolver #2
  nameserver[0] : 139.7.30.126
  nameserver[1] : 139.7.30.125
  if_index : 6 (ppp0)
  flags    : Scoped
  reach    : Reachable,Transient Connection

这次,ppp1是VPN连接,ppp0是UMTS连接。从命令的响应时间(使用不存在的主机名foo.bar.local),我推断出它ping使用第一个解析程序链,其中host使用范围查询配置。ping需要5秒钟返回“未知主机”,host立即返回。我假设ping进入了mdns解析器的5秒超时。

为了解决通过调制解调器通过VPN拨入时DNS查询中断的问题,我需要更改解析器的顺序。到目前为止,我还没有找到一种方法。

任何想法欢迎。

Answers:


7

我在Mac上也遇到了同样的问题,修复后,我发现这是由FortiClient(VPN客户端)引起的。即使FortiClient断开连接-它的DNS仍然出现在scutil中。

我的解决方案是:

scutil
> list ".*DNS"

这将显示所有DNS配置的列表,如下所示:

subKey [0] = State:/Network/Global/DNS <br>
subKey [1] = State:/Network/MulticastDNS<br>
subKey [2] = State:/Network/OpenVPN/DNS<br>
subKey [3] = State:/Network/OpenVPN/OldDNS<br>
subKey [4] = State:/Network/PrivateDNS<br>
subKey [5] = State:/Network/Service/forticlientsslvpn/DNS <br>

要检查它们中的每一个,请运行:(直到找到有问题的一个)

> get key_name
> d.show

…并对其进行修复:

> get key_name
> d.remove ServerAddresses
> set key_name

这是在我的机器上的样子:

> get State:/Network/Service/forticlientsslvpn/DNS 
> d.show
<dictionary> {
  ServerAddresses : <array> {
    0 : 192.168.30.6
    1 : 192.168.30.15
  }
  SupplementalMatchDomains : <array> {
    0 :
  }
  SupplementalMatchOrders : <array> {
    0 : 100000
  }
}
> d.remove ServerAddresses
> d.show
<dictionary> {
  SupplementalMatchDomains : <array> {
    0 :
  }
  SupplementalMatchOrders : <array> {
    0 : 100000
  }
}
> set State:/Network/Service/forticlientsslvpn/DNS
> exit

3

尝试在“网络”首选项窗格中更改DNS条目的顺序:

  1. 打开系统偏好设置网络

  2. 在左侧列表中选择您的网络服务。

  3. 使用左下角的锁解锁首选项窗格。

  4. 单击高级…,然后选择DNS选项卡。

  5. 通过向上/向下拖动来更改DNS服务器的顺序。


2
这不能为问题提供答案。要批评或要求作者澄清,请在其帖子下方发表评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论
grg

这是一个奇怪的评论。张贴者没有提及他是否曾在自己的问题中尝试过此方法,这对于他的问题可能是相关且简单的解决方案。不使用相同的设置很难分辨。
2013年

2
如其措辞所示,它是作为澄清的要求而写的-答案应写为答案;评论是要求澄清的最合适的地方。答案在“低质量帖子”审查队列中,我认为股票评论似乎最合适。的确,将其改写为答案(并添加诸如屏幕截图和格式正确的指令列表之类的详细信息)将使该答案成为一个完整而合理的答案。
grg

这是荒唐的。你是雨人还是什么?这是一个被动而谦逊的回答(因为很明显,问这个问题的人-看起来很熟练-可能已经尝试过了,但忘了在问题中提到它)。而且,如果您自己尝试过我的建议,您会注意到,对于像OP这样精通的人员,除了所包含的步骤(系统偏好设置->网络)之外,几乎没有其他步骤是必需的。
2013年

正如我所说,这只是我的意见。顺便说一下,我不是那个否决你的人。我已经编辑了您的答案,以包括有关步骤的更多详细信息。如果您认为编辑不合适,请随时回滚。
grg

2

我找到了一种解决方法:您的VPN DNS仍将被忽略,仅使用3G加密狗DNS,但是仅将VPN DNS添加到3G接口下的列表中就可以了……主要问题是3G连接管理器每次都会覆盖配置您单击“连接”,然后需要连接管理器以在3G加密狗上启用无线电……所以我将两种解决方案混合在一起:

  1. 连接到您的VPN并记下您的DNS(列表中有2个)。您可以在网络偏好设置→高级→DNS选项卡中对其进行检查。断开VPN。您需要连接到VPN,因为在连接时会动态分配DNS。

  2. 连接到3G并执行相同操作:在纸上写下DNS。然后断开3G连接。

  3. 转到网络首选项→单击3G界面→高级→DNS选项卡,然后在DNS表(在未连接时通常为空)下单击'+'。添加所有DNS服务器(首先来自3G,然后再添加VPN)。单击确定并应用。

  4. 从现在开始,要连接到3G,只需插入USB并等待直到覆盖3G(您需要打开3G连接管理器),但不要使用提供的连接管理器进行连接。如果它自动连接,请转到首选项,然后取消选中该勾号。你需要一个管理者只有把收音机的USB加密狗一样,什么都没有。

    如果单击3G管理器上的“连接”,它将覆盖3G接口上的配置,因此您需要再次重复步骤3。

  5. 转到网络→首选项,然后单击3G界面。然后单击连接。它将使用配置的DNS服务器(而不是动态接收的)连接到您的3G,包括“公用” DNS和您的VPN DNS。

  6. 连接到您的VPN。它将按预期工作。

请注意:

  • 如果您的VPN DNS更改,则需要手动更改。由于您的VPN DNS仍被动态分配给该接口(尽管被OS X忽略),因此可以在Network→VPN interface w Advanced→DNS选项卡下轻松地进行检查。

  • 如果您的3G DNS更改(不太可能),您也需要手动更改。如果出现问题并且无法导航,则需要通过3G连接管理器,单击“连接”,然后查看动态分配的DNS ...这将需要您返回到步骤3并重新配置它。


2

我长期遇到相同的问题,但是现在我有时间找到适合我的解决方案。我没有更改DNS服务器的顺序,但是我一直在VPN后面永久使用DNS服务器。

  1. 通过拨号连接。

  2. 连接VPN连接,然后从VPN连接→高级→DNS复制DNS服务器IP和搜索域。

  3. 断开VPN连接。

  4. Ping <name><hostname>VPN服务器并记下IP。

  5. 断开拨号连接。

  6. 复制拨号连接(例如,将其命名为“ 3G for VPN”)。

  7. 在拨号连接的DNS选项卡中输入IP和搜索域。它们将被永久存储和使用。

  8. 通过新的拨号连接进行连接。

  9. 现在,您无权访问名称服务器(因为它们由VPN保护)-您必须编辑VPN连接的服务器地址。用IP替换主机。

  10. 通过VPN连接进行连接,您应该可以使用它。

注意:通常,主机名不会更改,但IP会更改。因此,如果某天不工作,请再次执行步骤…


亚历山大,您好,这听起来很有前途。但是,尽管dns解析器的命令看起来还不错,但我没有任何运气。必须再次与我们的IT部门联系。
user1248552 2013年

1

您所说的内容给了我一些提示,因此我将vpn连接中的dns ip添加到了主连接中的dns列表中(没什么花哨的,仅使用图形界面进行网络首选项。)我不确定您是否处理的方式不同,但它与我合作。


1

在10.13.0中仍然会发生这种情况

我已经与Apple一起打开了错误报告。“ ping internalhostname”可以正常工作,但“ host internalhostname”或“ nslookup internalhostname”在拆分隧道VPN(基于Cisco IPSec或IKEv2)下失败,是不正常的。

而且,正如某些人所注意到的,与L2TP / IPsec不同,不能使用“设置服务顺序”来对Cisco IPsec连接和IKEv2连接进行优先级排序。

我想提出的另一点是,即使此隧道确实以“ scutil --dns”显示,分割隧道Cisco IPSec或IKEv2 VPN也不会在其“高级”设置中显示任何DNS服务器或“搜索域”。L2TP / IPsec VPN确实可以很好地显示此信息。

必须提供一些东西,Apple需要提供一些解释/修正。


我发现在2017年底macOS就是这种情况。不赞成在域上配置的拆分DNS。我运行了scutil --dns上面的命令,似乎来自VPN的DNS始终是最后一个,即使正确设置了它也没有用于搜索域。
mcdado

0

即使在VPN路由器中正确设置了分割DNS的情况下,也会导致始终使用本地DNS服务器而不是远程网络的DNS服务器的错误,因此在Lion / Mountain Lion中不起作用。

但是,如果您使用Cisco ASA IPSEC路由器,则可以在建立VPN连接时强制使用远程DNS服务器:

如果使用Cisco ASDM,请转到“配置”>“网络(客户端)访问”>“组策略”>((您的OSX / iPhone的VPN组)>“高级”>“拆分隧道”

设置了:DNS名称(取消选中“继承”并定义内部dns域名,例如myoffice.local)通过隧道发送所有DNS查找:设置为YES(这是重要设置)

保存并不要忘记将其存储在闪存中以备将来使用。

如果使用IOS命令行,请设置:

group-policy <your-tunnel-group-name> attributes
 split-dns value myoffice.local
 split-tunnel-all-dns enable`

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.