Tom*_*ime 13 domain-name-system dhcp url service
博客文章“为您的域提供 'tinyurl' 服务”说明了如何使用 Google Apps 为您的域设置 ShortName 服务。例如,如果您的域是example.com并且您使用 Google Apps,您可以将其配置http://go.example.com为您企业的个人 ShortName 服务。
注意:这不是创建一个供全世界使用的“tinyurl”服务。这是针对企业的。
拥有一个只有您的用户可以使用的短名称服务非常有用,这样您就可以创建指向内部页面的链接。您可以说“今天的午餐菜单位于http://go.example.com/lunch ” ,而不是告诉人们一个长而难懂的 URL 。博客文章记录了授权人们建立自己的链接的一些好处。(最重要的是:他们不必打扰您设置新链接!)
系统的问题是 URL 仍然很长。人们宁愿在他们的网络浏览器中输入“go/lunch”并让它工作。遗憾的是,由于 HTTP 协议工作方式的技术问题,Google Apps 无法支持这一点。HTTP 1.1 中的“Host:”标头列出了用户在其 Web 浏览器中键入的域,而不是FQDN。换句话说,当 Google Apps 收到“ http://go/lunch ”的HTTP 请求时,网络服务器会收到“go”作为主机名。由于谷歌Apps的提供许多领域这项服务,如果你想它不能告诉go.example.com或go.some-other-example.com。
因此,用户每次都必须输入“go.example.com/lunch”,这比“go/lunch”要长得多。
谷歌可以通过使用网络 cookie 或其他一些方案来解决这个问题。没有一个是特别干净或容易的。在他们这样做之前,您可以通过设置自己的机器来解决问题,该机器将请求作为“go”接受并重定向它们。
服务器接受名为“go”的站点的 HTTP 请求并将请求重定向到go.example.com. 然后您创建正确的 DNS 记录以使其正常工作,并调整您的 DHCP 配置,以便您的笔记本电脑/工作站做正确的事情。
此服务器故障文档的重点是解释该过程,然后提供配置示例以帮助您为您的站点执行此操作。由于我无法访问或了解世界上的每个操作系统,因此我将其设为“社区 wiki”,以便人们可以填写配置片段以供他们使用。我已经把“TODO”放在特别需要改进的地方。
在本例中,我们将使用“example.com”作为域。
go.example.com正常配置服务。测试它并确保类似的 URLhttp://go.example.com/foo有效。如果这不完整,请不要继续。这就像在你拥有一辆汽车之前试图修理你的汽车一样。
如果您的短名称服务是go.example.com,理想情况下您应该将重定向器的名称设为go.example.com。可悲的是,物理学会阻止两个物体同时出现在同一个地方,而 DNS 遵守物理学定律。
诀窍是让重定向器与 ShortName 服务具有相同的主机名,但在不同的域中。例如,go.corp.example.com、go.ext.google.com、 或go.this-is-different.example.com。
大公司通常有一个不对外公开的内部子域。通常内部主机是INSIDEHOST.corp.google.com. 那就是你放置重定向器的地方。
一些公司分配了一个充满 CNAME 的子域,指向应该从公司内部和外部访问的服务。这样一来,就需要将一个子域放入人们的 DNS 搜索路径中。(Unix 人可以认为这/usr/local/bin是一个充满符号链接的子目录)传统上这个子域是ext.example.com. 在该子域中有 CNAME,如mail.ext.example.com、calendar.ext.example.com、vpn.ext.example.com等。)
警告:将另一个项目添加到您的 DNS 搜索路径是另一种使您的计算机运行速度变慢的方法。每次进行额外的 DNS 查询都很慢,网上冲浪会明显变慢。最好将此重定向器添加到您机器的 DNS 搜索路径中已有的子域,即使这意味着在多个子域中添加 CNAME。例如,如果您的内部机器和连接到您的 VPN 的机器已经corp.example.com在其搜索路径中,请在那里添加 CNAME。如果您希望未通过 VPN 连接的外部机器能够访问重定向器,corp.example.com如果搜索路径是从未从外部访问过的机器的子域,则将其硬编码到它们的搜索路径中可能会很奇怪。在这种情况下,可以将另一个 CNAME 添加到外部子域(例如ext.example.com) 指向重定向器。更新 Web 服务器配置以支持两者。
对于此示例,假设您已选择重定向器为go.ext.example.com. 这台机器可以随意命名,我们将在 DNS 和 Web 服务器配置中发挥所有作用。
您要设置的 Web 服务器可以位于现有 Web 服务器上,也可以是专门为此目的而构建的新 Web 服务器。关键是必须可以从您希望 ShortName 服务工作的任何地方访问该机器:公司内部、公司外部、用户通过 VPN 连接时。(出于安全原因,您可以选择放弃在公司外部工作。出于安全原因,您也可以在内部设置一台机器,在外部设置另一台机器。)
注意:您不必为此设置新的 Web 服务器。只要配置不存在,您就可以将其添加到预先存在的 Web 服务器中。
注意:这可能相当复杂。您可能希望专注于在最简单的情况下使其工作,然后在工作和测试后,让它在其他情况下工作。特别是,按以下顺序运行: 1. 公司内部的工作站/笔记本电脑 2. 然后通过 VPN 连接的机器,然后是公司外部的机器(例如,在网吧)。3. THEN 机器在网络外,没有 VPN 4. THEN 测试其他操作系统
在这个例子中,我们假设有一个 Web 服务器可以通过相同的 IP 地址访问,无论您是在公司内部还是外部。
在我们的“走出去CORP .example.com的”例如,这意味着“走出去”是一个子域,这只是业内人士访问,并且需要使用VPN使用短名称的服务。由于 Google Apps 通常配置为在没有 VPN 的情况下工作(因为所有访问都是 HTTPS),因此这是次优的。
在我们的“走出去转.example.com的”例如,这意味着该子域是从内部和外部的公司,和访问A记录指向一个外部IP地址。
以下是所需的 DNS 记录:
go.example.com. IN CNAME ghs.google.com.
go.ext.example.com. IN A 64.32.179.5
go-redirector.example.com IN A 64.32.179.5
Run Code Online (Sandbox Code Playgroud)
第一个 DNS 记录 (go.example.com) 应该已经作为步骤 1 的一部分存在。
第二个 DNS 记录 (go. ext .example.com) 是A指向您正在配置的新 Web 服务器的 IP 地址的记录。
第三条 DNS 记录(go-redirector)是为了在调试时帮助你。
将重定向添加到 Web 服务器。(这假设 Web 服务器已安装并正在运行)。
这是Apache配置片段:
<VirtualHost *:80>
ServerName go-redirector.example.com
ServerAlias go, go.ext, go.ext.example
RewriteEngine on
RewriteRule ^(.*)$ http://go.example.com$1 [R=permanent]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
如何测试这个。 http://go-redirector.example.com此时应该工作。
在此测试成功之前不要继续。婴儿步骤。
现在我们要配置机器(任何运行 Web 浏览器的机器),以便 DNS 搜索路径包括“ext.example.com”
在您的 DHCP 服务器和 VPN 服务器上发送一个 DNS 搜索路径:
corp.example.com 。
(带有重定向主机的子域,后跟“.”)
或者,您可以使用如下搜索路径:
corp.example.com 示例.com 。
但是,这将为我们访问的每个该死的网页添加额外的 DNS 查找。由于它们 99% 的时间都会失败,这只会使网上冲浪变慢。
在工作站和笔记本电脑上,您需要确保子域包含在其 DNS 搜索路径中。这样当用户输入“go”时,软件就会在域中找到它。
我们想配置机器的搜索路径以包含这个子域,以可能设置搜索路径的所有方式:
最初无法通过 DHCP 设置 DNS 搜索路径。这是一项新添加的功能,并非所有 DHCP 客户端都支持它。甚至支持它的 DHCP 客户端也需要修改,因为当笔记本电脑在(例如)网吧时,它正在与您无法控制的 DHCP 服务器通信。当笔记本电脑使用 VPN 时,VPN 客户端软件实际上并不使用 DHCP,但 VPN 服务器通常会通过某种方式传输通常从 DHCP 服务器获取的设置。
因此,您要在所有这些地方设置 DNS 搜索路径:
corp.example.com如果 DHCP 服务器尚未包含域,则应将使用 DHCP 的客户端配置为将域预先添加到其搜索路径中。以下是有关如何在各种 DHCP 服务器和操作系统上执行此操作的说明。
去做
如果搜索路径只是机器应该在的域,那么:
option domain-name "corp.example.com";
Run Code Online (Sandbox Code Playgroud)
如果客户端支持 RFC 3397 来提供搜索路径,那么您可以这样做,但它很尴尬,因为没有对作为 DNS 主机序列的数据类型的本机支持,每个主机编码为长度前缀标签,如在 DNS 中。无法写入定义为记录数组的选项的值,其中记录包含另一个记录的数组,因此您只能使用数据字符串手动编码。
option dns-search-domains code 119 = string;
option dns-search-domains concat(
encode-int(4,1), "corp", encode-int(7,1), "example", encode-int(3,1), "com", encode-int(0,1),
encode-int(7,1), "example", encode-int(3,1), "com", encode-int(0,1)
);
Run Code Online (Sandbox Code Playgroud)
这应该(未经测试)生成一个两项搜索列表。
去做
去做
编辑/etc/resolv.conf并确保 (1) "domain corp.example.com" 是第一行,(2) 添加/编辑 "search" 行以包含corp.example.com域,(3) 添加一个 "options ndots:2" 行到减少 DNS 服务器的负载。
domain corp.example.com
search corp.example.com exmaple.com
options ndots:2
Run Code Online (Sandbox Code Playgroud)
TODO 填写适用于 Windows、Linux 等。
现在用户应该能够指定:
http://go/foo http://go.example/foo http://go.example.com/foo
事实上,作为置信度测试,您需要在所有情况下测试这些 URL:
( each OS you support ) * ( internal LAN / at an Internet cafe / while on the VPN )
Run Code Online (Sandbox Code Playgroud)
最后,一点建议:即使您在这方面做得很好,http://go/foo当有人尝试在您没有配置为强制 DNS 搜索的计算机上输入链接时,您仍然面临链接无法工作的风险包含您的域的路径。您应该,因此,发布使用完整的URL链接:http://go.example.com/foo; 并花时间教育您公司的公关部门和其他人始终以这种方式指定它。
或者至少用 HTML 编码它们,以便“go”在链接文本中可见,但实际的 HREF 转到 FQDN:
<a href="http://go.example.com/lunch">go/lunch</a>
Run Code Online (Sandbox Code Playgroud)
教公关部门的人这样做可能很困难。您可能只想告诉他们他们必须go.example.com在他们编写的任何内容中使用长版本 ( ),因为简短的“go/lunch”仅在偶然情况下起作用。
TODO:研究如何处理 HTTPS(认证将非常困难,如果不是不可能的话)。
小智 3
这个问题应该以某种方式标记为“已回答”。这样,https://serverfault.com/unanswered URL 将保持正确。请(发布并)接受此问题的“答案”。谢谢!
我的“答案”是构建(或安装)链接缩短服务非常简单,而不是跳过上面的所有环节,只需在 Web 服务器上设置一个本地链接缩短器来回答“go. example.com”并确保您的 DNS 响应搜索 example.com。这样,您就不会向外界泄露内部 URL。(可能我没抓住要点。)
备择方案:
对于非常小的公司或工作组,询问每个人他们最喜欢的书签,并找到一些空间将其放在内部网首页上。
或者,将您的小公司或团体的内联网部署为 wiki,并提供方便的共享热链接列表,以帮助人们到达他们可能想去的地方。
干杯,-丹尼