如何为我的网域设置Google ShortName服务,以便不需要FQDN

博客文章“ 为您的域名提供A tinyurl服务 ”解释了如何使用Google Apps为您的域名设置ShortName服务。 例如,如果您的域是example.com并且您使用的是Google Apps,则可以对其进行configuration,使http://go.example.com是您企业的个人ShortName服务。

注意:这不是要为世界创build一个“tinyurl”服务。 这是一个企业。

有一个短名称服务是有用的,只有您的用户可以使用,以便您可以创build链接到内部页面。 您可以说,“今天的午餐菜单位于http://go.example.com/lunch ”,而不是告诉人们很长的url。 博客文章logging了赋予人们build立自己的联系的一些好处。 (最重要的是:他们不必打扰你build立一个新的链接!)

问题

该系统的问题是,该url仍然相当长。 人们宁愿input“去/午餐”到他们的networking浏览器,并使其工作。 不幸的是,由于HTTP协议工作的技术性,Google Apps无法支持此function。 HTTP 1.1中的“Host:”标题列出了用户input到其Web浏览器的域,而不是FQDN 。 换句话说,当Google Apps获取“ http:// go / lunch ”的HTTP请求时,networking服务器会收到“go”作为主机名。 由于Google Apps为许多网域提供此服务,因此无法判断您是否需要go.example.comgo.some-other-example.com

因此,用户每次都必须input“go.example.com/lunch”,这比“去/午餐”要长得多。

解决scheme

谷歌可以通过使用networkingcookie或其他scheme来解决这个问题。 没有一个是特别干净或容易的。 直到他们这样做,你可以通过设置一个你自己的接受请求的机器来“解决”这个问题,并redirect它们。

服务器接受名为“go”的站点的HTTP请求,并将请求redirect到go.example.com 。 然后,您创build正确的DNSlogging,使其工作,并旋转您的DHCPconfiguration,使您的笔记本电脑/工作站做正确的事情。

这个服务器故障文档的目的是解释过程,然后给出configuration示例,以帮助您为您的网站做到这一点。 由于我无法访问或了解世界上的每个操作系统,因此我将其作为“社区维基”,以便人们可以在为其工作时填写configuration代码片段。 我把“TODO”放在特别需要改进的地方。

细节

在这个例子中,我们将使用“example.com”作为域。

第1步:以正常方式设置Google Apps服务。

go.example.com一样configurationgo.example.com的服务。 testing它,并确保像http://go.example.com/foo这样的URL工作。 如果不完整,请不要继续。 这就好比在你拥有一辆之前试图修理你的车。

第2步:select您的redirect器主机名

如果您的短名称服务是go.example.com ,理想情况下,您将使您的redirect器名称为go.example.com 。 可悲的是,物理学同时阻止两个物体在同一个地方,而DNS服从物理定律。

诀窍是让redirect器与ShortName服务的主机名相同,但在不同的域中。 例如, go.corp.example.comgo.ext.google.comgo.this-is-different.example.com

大公司通常有一个内部的子域,不暴露于外部世界。 通常,内部主机是INSIDEHOST.corp.google.com 。 那就是你放置redirect器的地方。

一些公司分配一个充满CNAME的子域,指向应该从公司内部和外部访问的服务。 这样就有一个子域需要放在人们的DNSsearchpath中。 (Unix的人可以认为这是因为/usr/local/bin是一个充满符号链接的子目录)传统上这个子域是ext.example.com 。 在该子域中,是CNAME,如mail.ext.example.comcalendar.ext.example.comvpn.ext.example.com等。)

警告:将另一项添加到您的DNSsearchpath是另一种让您的电脑运行速度变慢的方法。 每做一次额外的DNS查询都很慢,浏览网页的速度会明显变慢。 将这个redirect器添加到已经在您计算机的DNSsearchpath中的子域名更好,即使这意味着要在多个子域中添加CNAME。 例如,如果连接到您的VPN的内部机器和机器已经在其searchpath中包含corp.example.com在其中添加CNAME。 如果您希望未绑定的外部机器能够访问redirect器,则将corp.example.com硬编码到其searchpath中可能会很奇怪,如果这是从未从外部访问的计算机的子域。 在这种情况下,可以将另一个CNAME添加到外部子域(如ext.example.com )以指向redirect器。 更新Web服务器configuration以支持两者。

在这个例子中,假设您已经select了redirect器go.ext.example.com 。 该机器可以被称为任何你想要的,我们将做DNS和Web服务器configuration的所有魔术。

第3步:计划您的redirect器

您要设置的networking服务器可以位于现有的networking服务器上,也可以是为此目的而构build的新的networking服务器。 关键是,机器必须能够在任何你希望使用ShortName服务的地方进行访问:在公司内部,公司外部,当用户通过VPN连接时。 (出于安全原因,您可以select放弃在公司外部工作,为安全起见,您也可以在内部和外部安装一台机器。)

注意:您不必为此设置新的Web服务器。 只要configuration不存在,您就可以将其添加到预先存在的Web服务器。

注意:这可能相当复杂。 你可能想把重点放在最简单的情况下工作,然后一旦工作和testing,让它适用于其他情况。 特别是按以下顺序工作:1.公司内部的工作站/笔记本电脑2.那些通过VPN连接的机器,然后是公司外部的机器(例如网吧)。 3.那么在networking之外的机器,没有VPN了4.然后testing这个为其他操作系统

在这个例子中,我们假定有一个可以在同一个IP地址访问的Web服务器,不pipe你在公司内部还是外部。

在我们的“go.corp.example.com”示例中,这意味着“go”位于只能由内部人员访问的子域中,并且需要VPN才能使用ShortName服务。 由于Google Apps通常configuration为在没有VPN的情况下工作(因为所有访问都是HTTPS),所以这是次优的。

在我们的“go。ext。example.com”例子中,这意味着可以从公司内部和外部访问子域,并且Alogging指向外部IP地址。

第4步:为您的redirect器添加DNSlogging

以下是所需的DNSlogging:

 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 

第一个DNSlogging(go.example.com)应该已经作为步骤1的一部分存在。

第二个DNSlogging(go。ext .example.com)是一条Alogging,指向您正在configuration的新Web服务器的IP地址。

第三个DNSlogging(go-redirector)是在debugging时帮助你。

第5步:configurationWeb服务器

将redirect添加到Web服务器。 (这假设networking服务器已经安装并正在运行)。

这里是Apacheconfiguration代码片段:

 <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> 

如何testing这个。 http://go-redirector.example.com应该在这一点上工作。

不要继续下去,直到这个testing工作。 婴儿的步骤。

步骤6:configuration客户端的DNSsearchpath

现在我们要configuration机器(任何运行Web浏览器的),以便DNSsearchpath包括“ext.example.com”

在您的DHCP服务器和VPN服务器上发送一个DNSsearchpath:

corp.example.com。

(redirect主机的子域名,后跟“。”)

或者,您可以使用searchpath,如:

corp.example.com example.com。

但是,这将添加一个额外的DNS查找每个我们去的网页。 由于他们将失败99%的时间,这只会使网上冲浪缓慢。

在工作站和笔记本电脑上,您需要确保子域名包含在他们的DNSsearchpath中。 这样当用户input“go”时,软件将在域中find它。

我们要configuration机器的searchpath,以便可以设置searchpath的每个方式包括这个子域:

最初DNSsearchpath不能通过DHCP设置。 这是一个新增function,并不是所有的DHCP客户端都支持它。 即使是支持DHCP的客户端也需要修改,因为当一台笔记本电脑在某个网吧的时候,它正在和一个你不控制的DHCP服务器通话。 当笔记本电脑使用VPN时,VPN客户端软件实际上并不使用DHCP,但是VPN服务器通常会通过某种方式传输通常从DHCP服务器获得的设置。

因此,您要在所有这些地方设置DNSsearchpath:

  • DHCP服务器应发送DNSsearchpath选项
  • 静态configuration的机器应该设置DNSsearchpath
  • 如果DHCP服务器已经不包含它,那么使用DHCP的客户端应该被configuration为将corp.example.com域预先corp.example.com到它们的searchpath。

以下是有关如何在各种DHCP服务器和操作系统上执行此操作的说明。

configurationDHCP服务器以包含DNSsearchpath:

  1. Windows DHCP指令

去做

  1. ISC DHCP指令

如果searchpath只是机器应该在的域,那么:

 option domain-name "corp.example.com"; 

如果客户端支持RFC 3397来提供searchpath,那么你可以做到这一点,但是它很笨拙,因为没有一个数据types的本地支持,这个数据types是一个DNS主机序列,每个数据types都被编码为DNS中的长度前缀标签。 没有办法将定义为logging数组的选项的值写入,其中logging包含另一个logging的数组,因此您可以使用数据string来手动对事物进行编码。

 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) ); 

应该(未经testing)生成两个项目的search列表。

  1. dnsmasq DHCP指令

去做

configuration静态configuration的机器:

  1. 视窗

去做

  1. 的Linux / Unix

编辑/etc/resolv.conf并确保(1)“domain corp.example.com”是第一行,(2)添加/编辑“search”行以包含corp.example.com域,(3) )添加一个“options ndotes:2”行以减lessDNS服务器的负载。

 domain corp.example.com search corp.example.com exmaple.com options ndots:2 

configurationDHCP客户端在其他DHCP服务器上工作

TODO填写Windows,Linux等

第七步:testing,testing,testing!

现在用户应该能够指定:

http:// go / foo http://go.example/foo http://go.example.com/foo

事实上,作为一个信心testing,您将需要在所有情况下testing这些URL:

 ( each OS you support ) * ( internal LAN / at an Internet cafe / while on the VPN ) 

第八步:其他build议

最后,有一点build议:即使你做了一个完美的工作,当一个人试图在你没有使用的计算机上键入http://go/foo链接时, tconfiguration强制DNSsearchpath包含您的域名。 因此,您应该使用完整url发布链接: http://go.example.com/foohttp://go.example.com/foo ; 花时间教育贵公司的公关部门和其他人总是这样指定。

或者至less在HTML中进行编码,以便在链接文本中显示“go”,但实际的HREF将转到FQDN:

 <a href="http://go.example.com/lunch">go/lunch</a> 

在公关部门教授人员可能很困难。 你可能只想告诉他们,他们必须使用长版本( go.example.com )写任何东西,因为短的“去/午餐”只是偶然的工作。

第8步:HTTPS

待办事项:弄清楚如何使用HTTPS(即使不是不可能,authentication也将非常困难)。

这个问题应该以某种方式被标记为“回答”。 这样, https://serverfault.com/unuswered URL将保持正确。 请(发布和)接受这个问题的“答案”。 谢谢!

我的“答案”是构build(或安装)缩短链接服务是非常简单的,而不是跳过上面的所有环节,只需在Web服务器上设置一个本地链接缩短器即可。 example.com“,并确保您的DNS答案searchexample.com。 这样,你就不会把内​​部url泄露给世界。 (可能我错过了这一点。)

备择scheme:

  • 对于一个非常小的公司或工作组,请向每个人询问他们最喜欢的书签,并find一些空间将其放在Intranet首页上。

  • 或者,将您的小公司或小组的Intranet部署为Wiki,并使用共享热链接的便利列表来帮助人们到达他们可能想去的地方。

干杯,丹尼