情况是这样的。我的 Mac 连接到两个网络 - 一个是内部网络,一个是外部网络。内部 DNS 适用于内部和外部 URL,外部 DNS(显然)对内部 URL 一无所知。内部网络不连接到外部 IP,外部网络不连接到内部 IP。
因此,取决于我在系统偏好设置的网络部分中如何设置服务订单:
因此,如果我在服务顺序中将内部网络放在外部网络之前:
- 内部 DNS 正确回答所有请求(对于内部和外部 URL)
- 内部网络无法连接到外部 URL,所以我想我需要在路由表中添加一堆条目,以便所有非内部 IP 的内容都发送到外部网络。
如果我将外部网络放在第一位,将内部网络放在第二位,并在路由表中添加一个条目,以便所有内部请求都转到内部网络:
- 即使我在外部网络设置中首先添加内部 DNS,我仍然无法解析内部 URL。
我的问题是:
1) 为什么我无法解析内部 URL?由于我在路由表中获得了条目,将所有内部 IP 发送到内部网络,因此 DNS 请求不应该转到内部 DNS,即使外部网络在服务顺序中排在第一位?
2)是否有一个巧妙的方法可以在路由表中添加条目,以表明“除 10.xxx 之外的所有内容都进入网络 X”?
ps 对于我的问题#2,我认为指定“除 10.xxx 之外的所有内容”的方法是使用一系列路线命令:
/sbin/route add -net 128.0.0.0 -netmask 128.0.0.0 -interface en0
/sbin/route add -net 64.0.0.0 -netmask 192.0.0.0 -interface en0
/sbin/route add -net 32.0.0.0 -netmask 224.0.0.0 -interface en0
/sbin/route add -net 16.0.0.0 -netmask 240.0.0.0 -interface en0
但我希望有更简单的方法。
答案1
假设你的内部网络是 10.0.0.0/8,网关 10.0.0.1 在 eth1 上,而你的外部默认网关在 eth1 上,IP 为 abcd,则应该这样做:
route change default -interface en0 route add -net 10.0.0.0 -netmask 255.0.0.0 -interface en1
你也可以在网络脚本中设置这些(你可以在 Linux 中执行此操作 - 不确定 Mac 是否支持),请参阅这里作为示例。这实际上是一种更持久的方法,因为您不必在每次启动时手动添加路由(或将它们放入脚本中)。
更新:根据 OPs 的评论,针对 Mac OS X 更新了命令,请参阅 Linux 替代方案的链接。