无法从Mac OS X通过VPN连接解析主机


10

序言

我从Macbook建立了VPN连接,看来连接成功。

工作VPN

但是,由于无法解析主机名,因此无法访问我的工作计算机:

$ ping myusername
ping: cannot resolve myusername: Unknown host

新的解决方法

在尝试了一切之后,我发现此命令使VPN网络和Internet都可以使用:

sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0

公司的DNS服务器可通过其IP访问。如何配置网络以将其用于从192.168开始的所有内容?

旧的解决方法

我发现了一个临时解决方法,该方法允许我通过修改两个选项来通过VPN访问网络:

我在“ 通过VPN连接发送所有流量”中打了一个勾号:

VPN选项

我在VPN界面的DNS设置中手动输入“搜索域名”:

在VPN选项中输入域名

执行以下两个步骤足以使我的工作计算机可ping通:

$ nslookup myusername
Server:     192.168.10.16
Address:    192.168.10.16#53

Name:   myusername.universe.mycompany
Address: 192.168.11.56

$ ping myusername
PING myusername.universe.mycompany (192.168.11.56): 56 data bytes
64 bytes from 192.168.11.56: icmp_seq=0 ttl=126 time=126.164 ms

但是,由于我将所有流量都隧道化以通过VPN,因此我无法再访问Internet:

$ ping google.com
PING google.com (74.125.232.48): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1

问题

如何正确设置网络,以便网络了解何时通过VPN以及何时使用正常连接?我需要它来正确解析Windows服务器名称。

如果我需要发布任何控制台命令输出,只要您让我确切知道哪个,我都愿意这样做。
非常感谢您的帮助,因为这对我来说现在是一种表演停止者。

谢谢!


您的VPN子网掩码是什么?如果它是255.255.255.0,则您无法访问dns服务器192.168.10.x,因为您的子网是192.168.7.x。
hsmiths 2011年

ifconfig输出为ppp0flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1396 inet 192.168.7.232 --> 192.168.7.117 netmask 0xffffff00所以我想它是255.255.255.0。我该如何更改?谢谢。

@shsmith,请参阅“新解决方法”部分。您是正确的,无法访问DNS服务器。我曾经route使它们可用,因为我没有找到更改网络掩码的方法。如何将它们标记为“所有与192.168相关的DNS”?

我不知道您在远程端拥有什么VPN服务器,但是我认为那是您应该寻求解决问题的地方。看来VPN是一个分离的隧道设置,这意味着对VPN端的访问都是通过VPN,而其他(Internet)访问是通过普通网关。VPN服务器应配置为指定名称服务器和它们应用于的域。另外,关于将DNS服务器标记为用于192.168。相关查询的DNS服务器的问题是错误的方法-与内部DNS服务器(而不是IP)一起使用的是域名部分,需要对其进行“标记”。
2011年

@barryj,非常感谢您的输入。我会问管理员,但我认为我是唯一一个遇到此问题的人,因此,如果我能自己解决这个问题,我不想浪费他们的时间。至于DNS,我只想使用VPN来访问Windows网络上的其他计算机,例如用于RDC的工作计算机,用于开发的数据库服务器等
丹,

Answers:


3

您可能需要查看解析器手册页

引用一种解决方案:

可以从具有此手册页中描述的格式的文件中读取特定客户端的配置。目前,这些文件位于系统的/etc/resolv.conf文件和/ etc / resolver目录中的文件中。但是,客户端配置不限于文件存储。DNS多客户端搜索策略的实现还可以在其他数据源(例如系统配置数据库)中找到客户端配置。DNS系统的用户不应假设配置数据的来源。

据我所知,你需要把一个文件名为example.com/etc/resolver,如果你想为特殊域名服务器与域名服务器为该域的IP地址example.com-可能是他们使用resolv.conf的语法,我不记得了。但是你应该能够弄清楚:)

编辑:就自动化过程而言,我很确定这可以与AppleScript或Automator一起使用。但是我从来没有想过要解决这个问题,因此第二个问题可能会有所帮助。


谢谢!工作正常。/ etc / resolver中文件的语法类似于resolv.conf,例如,“ nameserver 1.2.3.4”对我来说是开箱即用的。
Per Lundberg'1

3

OSX似乎错误地设置了网络掩码。这是在这两个雪豹和山狮使用PPTP VPN我的经验,并通过这个线程支持在这里

我在这里找到了一个解决方案,其中涉及为ppp0通信设置路由规则。

基本上:

$ sudo <your_text_editor_of_choice> /etc/ppp/ip-up

    #!/bin/sh
    /sbin/route add -net 192.168 -interface ppp0

$ sudo chmod 755 /etc/ppp/ip-up

每次您连接到VPN时,都会设置路由规则。


2

Mac OSX DNS解析很有趣。这是快速解决方法。

  1. 将以下代码放在文件名中reset_dns

    #!/bin/bash
    
    function get_pri_srvc_id ()
    {
      cat <<EOF | scutil | \
        grep 'PrimaryService' | \
        awk -F': ' '{print $2}'
    show State:/Network/Global/IPv4
    EOF
    }
    
    function get_srvc_name ()
    {
      cat <<EOF | scutil | \
        grep 'UserDefinedName' | \
        awk -F': ' '{print $2}'
    show Setup:/Network/Service/$1
    EOF
    }
    
    function get_srvc_ids ()
    {
      cat <<EOF | scutil | \
        sed -nEe '
    /ServiceOrder/ {
      :ids
      n
      /[0-9]+ :/ {
        s/ *[0-9]+ : ([0-9A-Z-]+) */\1/p
        b ids
      }
    }'
    show Setup:/Network/Global/IPv4
    EOF
    }
    
    function get_srvc_id_by_name ()
    {
      local srvc_ids=$(get_srvc_ids)
    
      for srvc_id in $srvc_ids
      do
        local srvc_name=$(get_srvc_name "$srvc_id")
        if [[ "$srvc_name" == "$1" ]]
        then
          echo $srvc_id
          return
        fi
      done
    }
    
    function get_dns_ips ()
    {
      local srvc_id=$(get_srvc_id_by_name "$1")
    
      cat <<EOF | scutil | \
        sed -nEe '
    /ServerAddresses/ {
      :ips
      n
      /[0-9]+ :/ {
        s/ *[0-9]+ : ([0-9.]+) */\1/p
        b ips
      }
    }'
    show $2:/Network/Service/$srvc_id/DNS
    EOF
    }
    
    function set_dns_ips ()
    {
      networksetup -setdnsservers "$@"
    }
    
    vpn_srvc_name='MY VPN'
    ip_file='/tmp/setup_dns_ips'
    
    pri_srvc_id=$(get_pri_srvc_id)
    pri_srvc_name=$(get_srvc_name "$pri_srvc_id")
    
    if [[ ! -e "$ip_file" ]]
    then
      setup_dns_ips=$(get_dns_ips "$pri_srvc_name" "Setup")
      state_dns_ips=$(get_dns_ips "$pri_srvc_name" "State")
      setup_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "Setup")
      state_vpn_ips=$(get_dns_ips "$vpn_srvc_name" "State")
    
      echo "set_dns_ips $pri_srvc_name $setup_vpn_ips $state_vpn_ips $setup_dns_ips $state_dns_ips"
      set_dns_ips "$pri_srvc_name" $setup_vpn_ips $state_vpn_ips $setup_dns_ips $state_dns_ips
    
      if [[ -z "$setup_dns_ips" ]]
      then
        setup_dns_ips="Empty"
      fi
    
      echo $setup_dns_ips >$ip_file
    else
      setup_dns_ips=$(cat $ip_file)
    
      echo "set_dns_ips $pri_srvc_name $setup_dns_ips"
      set_dns_ips "$pri_srvc_name" $setup_dns_ips
    
      rm $ip_file
    fi
    
  2. 将“ MY VPN”一词替换为您的VPN连接的名称。

  3. 连接到VPN后,reset_dns从终端窗口运行

Mac OSX仅使用与“主要”网络连接关联的DNS服务器。上面的代码将您的VPN连接的DNS服务器添加到主要网络连接(即通常是Wi-Fi或以太网),以便首先使用您的VPN DNS服务器,然后再使用您的主要连接DNS服务器。

reset_dns断开与VPN的连接后,再次运行命令以删除条目并恢复原始DNS服务器配置。但是,这是可选的,因为仅保持DNS服务器关联通常不会有任何损害。


0

我遇到过同样的问题。原来我的家用路由器与我的工作系统处于相同的IP范围。将家用路由器更改为其他范围后,便可以连接了。

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.