如何使用 DNS 路径访问内部服务器?

如何使用 DNS 路径访问内部服务器?

我们的构建服务器托管在我们的办公室,但可以通过 build.mydomain.com 从外部访问。我在 rackspace 上有一个 dns 条目,它指向办公室防火墙,然后防火墙将 :80 请求转发到内部网络服务器。

这在办公室外非常有用。我只需去http://build.mydomain.com并且它工作正常。然而在内部(我猜是因为环回问题??)我不能使用 DNS 名称,我必须使用本地语法http://构建服务器才能找到它。有没有办法解决这个问题,而不必在办公室的每台机器上编辑主机文件?

答案1

水平分割 DNS

询问 Rackspace 是否可以配置它(我不知道他们是否支持)。或者使用适当的配置运行您自己的内部 DNS 服务器。

答案2

如果您不想进行拆分 DNS(这更容易),那么您的另一个选择是在“办公室防火墙”上配置同网络 DNAT。

http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-10.html

答案3

我猜你的防火墙机器上的 NATing 有问题。你肯定使到达防火墙公共 IP 的内部机器获得与外部主机相同的结果。但是,要实现这一点,您需要对连接进行“双重 NAT”。您需要确保源和目标都被重写。

我猜你现在只做了 DNAT,所以你的数据包被转发到目标机器,但源地址仍然是你的 LAN 地址。因此,目标服务器尝试直接回复源,但它用自己的 IP 地址回复,而源机器拒绝了它,因为它认为它来自防火墙的公共 IP。

对于此类问题,我将使用 tcpdump 来追踪。例如,在目标主机上我将运行:

tcpdump -lni eth0 port 80

然后尝试从内部机器连接到“build.example.com”名称。应该看到的是源地址是防火墙内部 IP 地址,而目标 IP 显然将是目标机器上的内部 IP。如果您没有看到与此流量相关的任何数据包,则您的 DNAT 未在防火墙上工作。如果源地址是源机器上的 IP,则意味着您没有对数据包进行 SNAT。可能是因为您只在流量通过上游链路离开防火墙时对其进行 NAT。

如果目标计算机上的 tcpdump 没有帮助,您可以尝试在防火墙上执行 tcpdump。我通常会执行几种不同的 tcpdump:

tcpdump -lni any port 80

这将显示任何接口上的端口 80 流量。因此,对于 NATing,您通常会看到未经任何转换的传入数据包,然后您还将在任何 NAT 的结果之后看到该数据包。但是,此 tcpdump 将仅显示 HTTP(端口 80)流量。您惯于查看 ICMP 流量是否像防火墙 REJECT 规则那样,或者是否没有任何东西在端口上监听......

tcpdump -lni any host $SOURCE_HOST_IP

这个命令将显示任何发往/来自源主机的信息,因此您将看到可能有用的 ICMP 消息。但是,这将忽略 NAT 数据包。

tcpdump -lni any host $DESTINATION_HOST_IP

这将显示发往目标机器或来自目标机器的数据包。这些应该列出目标主机 IP 和与目标主机位于同一网络的防火墙 IP。如果不是,则需要查看 NAT 规则。

也可以使用 DNS 视图,但设置和维护起来也很麻烦。但它确实有好处,即流量将直接到达目标主机,而不必经过防火墙。

我的建议是使内部主机能够访问外部 IP,但这实际上取决于您的具体需求。

第一个将显示数据包

答案4

您有本地 DNS 服务器吗?如果您正在使用本地 DNS 服务器,并且网络中的每台计算机都使用它来解析 DNS 查询。您可以创建正向查找并添加记录。如果您使用的是 Windows 2008,您也可以执行条件转发。如果您有少量用户编辑其主机文件并将 build.domain.com 条目添加到您的本地 IP 地址,您也可以实现这一点。

相关内容