我在一家公司工作,由于几个奇怪的原因,我有以下设置:
- 以太网:位于访客网络中,可以访问互联网
- Wifi:位于企业网络中,可以访问内联网
- 适配器顺序已设置,因此以太网是第一个
route add
用于添加我需要的内网路由(10.[4/6/1/39].xx等)
现在的问题是某些程序无法工作,因为它们不使用 IP,而是使用命名地址。因此,scutil --dns
解析器 #1 与外部 DNS 服务器相连,然后解析器 #2 与内部网 DNS 服务器相连。(如果我断开电缆,并且只在 Wifi 公司,名称就可以正常解析)。
我想到两种可能的解决方案,但我不知道如何让它们发挥作用:
- 即使 Wifi 是第一个适配器,我还是会以某种方式切换 DNS 解析器顺序,以便在 Internet DNS 之前尝试使用内部网 DNS
- 将 Wifi 适配器放在第一位,然后找到一个“排除”路由命令,它不是说“通过 en0 发送 IP X”,而是“通过 en1 发送任何不等于 X 的 IP”
有人能帮我吗?
答案1
听起来我一直在同一家公司工作;-)
请在以下链接中找到一个 Ruby 脚本,你可以调整它来执行以下任务Hennes 将其描述为选项 4),尽管它使用 DNS 请求转发而不是视图转发。不过这应该很容易修复。 https://github.com/simonair/pubcode/blob/master/multihome_setup/multihome_setup.rb
该脚本将根据需要使用 sudo。
只有当您准确理解它的作用时才使用它。
最好在开始试验该脚本之前创建一个新的Location
使用,因为这将允许您通过切换回已知良好的来撤消任何更改。System Preferences > Network
Location
其作用:
- 枚举所有网络接口,并根据其连接方式识别连接到公司网络的接口和连接到其他网络的接口默认网关IP 地址(不是分配给接口本身的地址)
- 配置内置
BIND
DNS 服务器以处理企业网络和 Internet 的请求并按域转发这些请求。例如,example.com
将被转发到企业名称服务器,而example.net
将被转发到其他名称服务器。 - 通过公司接口建立到子网列表的路由,其余子网通过其他网络建立路由
- 或者,如果配置正确,它还将启动 VPN 连接。
您需要调整脚本来满足您的需要。
请注意,您需要restore
断开与公司网络的连接后,使用参数再次调用脚本,否则,所有 DNS 请求都将到达您的本地名称服务器,并且无法在您的公司环境之外解析它们。
答案2
我不确定这是否是一个正确完整的答案,但将其放在多条评论中似乎是一个解决办法。
1)快速解决方法:
将内部网名称添加到主机文件。(它位于/私人/等/主机)。如果您只需要访问少数服务器,这种方法是可行的,而且相对容易做到。但它也感觉像是一个临时解决方案,如果服务器 IP 发生变化,您将需要手动更新主机文件。
2) 假设内联网上的 DNS 服务器也旋转 Internet 上的名称,则您只能使用该 DNS 服务器。我认为这不太可能,因为您明确提到访客网络可以访问 Internet,而另一个可以访问内联网。(如果内联网可以访问 Internet,但被某些防火墙规则阻止,而这些规则不会阻止所有内容,则可能是这种情况。例如,不是端口 53)。
3) 使用两个 DNS 服务器(您正在尝试做的)可能不起作用。
我没有 OS/X 机器来测试这一点,但我最近从惨痛经历中了解到,有些操作系统不会按顺序查询 DNS 服务器,也不会在第一个名称服务器出现故障时返回到辅助名称服务器。相反,它们似乎会随机使用列出的名称服务器。
其结果将是:(
顺序为 Internet DNS、Intranet DNS)
在 Internet 上查询主机 -> 成功。
在 Intranet 上查询主机 -> 通过 Internet 上的 DNS 服务器查找失败,放弃,不再尝试下一步。
我不知道在 OS/X 上是否存在这种情况,而且我也没有 Mac 可以测试。
4)本地名称服务器
(以粗体显示是因为我认为这是最好的解决方案)。
答案3
我遇到了类似的问题苹果系统具有多个物理和虚拟网络接口,并且需要根据这些网络接口的可用性或不可用性向不同的服务器请求名称解析。
经过一番谷歌搜索和尝试,我在一个更大的讨论中找到了最完整的信息https://rakhesh.com/infrastructure/macos-vpn-doesnt-use-the-vpn-dns简而言之,为了定义具体的解析器和改变 macos 的系统解析器优先级,满足我的每个特定分辨率需求(例如,“当可访问时,必须向私有 DNS 服务器 10.10.10.128 查询 mydomain.tld,否则将使用 Google 的公共 DNS 服务器 8.8.8.8”)足以
在 /etc/resolver 中创建一个文件(例如 /etc/resolver/per-domain-resolver 或您最喜欢的名称)
用一系列领域,名称服务器, 和搜索顺序指令,例如
domain mydomain.tld nameserver 10.10.10.128 search_order 1 nameserver 8.8.8.8
值得强调的是,我的试验一旦嵌入,就成为有效的解决方案领域和搜索顺序指令。