序言
我从我的 Macbook 建立了 VPN 连接,似乎连接成功。
但是,我无法访问我的工作计算机,因为主机名无法解析:
$ ping myusername
ping: cannot resolve myusername: Unknown host
新的解决方法
在尝试了所有我能尝试的方法后,我发现这个命令可以让我同时使用 VPN 网络和互联网:
sudo route add -net 192.168.7.218 192.168.7.117 255.255.0.0
公司的 DNS 服务器可以通过其 IP 访问。如何配置网络将它们用于从 192.168 开始的所有内容吗?
旧的解决方法
我找到了一个临时的解决方法,通过修改两个选项,我可以经由 VPN 访问网络:
我打勾了通过 VPN 连接发送所有流量:
我在VPN界面的DNS设置中手动输入搜索域名:
执行这两个步骤就足以让我的工作计算机可以 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 进行传输,因此我无法再访问互联网:
$ 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 服务器名称。
如果我需要发布任何控制台命令输出,我愿意这样做,只要您告诉我具体是哪个。
任何帮助都非常感谢,因为这对我来说现在是一种阻碍。
谢谢!
答案1
你可能想看看解析器手册页
引用一个解决方案:
特定客户端的配置可以从具有本手册页中所述格式的文件中读取。系统目前将这些配置放在 /etc/resolv.conf 文件和 /etc/resolver 目录中的文件中。但是,客户端配置不仅限于文件存储。DNS 多客户端搜索策略的实施还可以将客户端配置放在其他数据源中,例如系统配置数据库。DNS 系统的用户不应该对配置数据的来源做出任何假设。
据我所知,如果您想要特殊的名称服务器,您需要将一个名为的文件放入example.com
该/etc/resolver
域的名称服务器的 IP 中example.com
-- 可能是他们使用resolv.conf
语法,我不记得了。但你应该能够弄清楚 :)
编辑:就自动化流程而言,我确信使用 AppleScript 或 Automator 可以实现。但我从未考虑过这个问题,所以关于这个话题的第二个问题可能会有所帮助。
答案2
答案3
Mac OSX DNS 解析很奇怪。下面是快速修复方法。
将以下代码放入文件名中
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
将“MY VPN”一词替换为您的 VPN 连接的名称。
连接到 VPN 后,
reset_dns
从终端窗口运行
Mac OSX 仅使用与您的“主”网络连接关联的 DNS 服务器。上述代码将您的 VPN 连接的 DNS 服务器添加到主网络连接(即通常是 Wi-Fi 或以太网),以便首先使用您的 VPN DNS 服务器,然后才是您的主连接 DNS 服务器。
断开 VPN 连接后再次运行该reset_dns
命令以删除条目并恢复原始 DNS 服务器配置。不过,这是可选的,因为保持 DNS 服务器关联通常不会造成任何损害。
答案4
我也遇到了同样的问题。原来我的家用路由器与我的工作系统处于同一 IP 范围内。一旦我将家用路由器更改为不同的范围,我就能连接了。