博客文章“ 您的域的 “ 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”作为主机名。由于Google Apps为许多域提供此服务,因此无法确定您是否想要go.example.com
或go.some-other-example.com
。
结果,用户每次必须输入“ go.example.com/lunch”,这比“ go / lunch”长得多。
解决方案
Google可以使用网络Cookie或其他方案解决此问题。没有一个是特别干净或容易的。在它们完成之前,您可以通过设置自己的计算机来解决问题,该计算机将请求接受为“执行”并重定向它们。
服务器接受对名为“ go”的站点的HTTP请求,并将请求重定向到go.example.com
。然后,您创建正确的DNS记录以使其起作用,并旋转DHCP配置,以便您的便携式计算机/工作站执行正确的操作。
该服务器故障文档的重点是解释该过程,然后提供配置示例来帮助您为自己的站点执行此操作。由于我无法访问或不了解世界上的每个操作系统,因此我将其作为“社区Wiki”,以便人们在为其工作时可以填写配置摘要。我将“ TODO”放在特别需要改进的地方。
细节
在此示例中,我们将使用“ example.com”作为域。
第1步:以常规方式设置Google Apps服务。
go.example.com
正常配置服务。测试它,并确保类似的URL http://go.example.com/foo
。如果还没有完成,请不要继续。这就像在您拥有汽车之前尝试修理您的汽车。
步骤2:选择您的重定向器主机名
如果您的短名称服务是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服务器配置中尽一切努力。
步骤3:规划您的重定向器
您要设置的Web服务器可以在现有的Web服务器上,也可以在为此目的构建的新服务器上。关键是必须能够从您希望使用ShortName服务的任何地方访问该计算机:当用户通过VPN连接时,在公司内部,公司外部。(出于安全原因,您可以选择放弃在公司外部进行此工作。出于安全原因,也可以在内部安装一台计算机,在外部安装另一台计算机。)
注意:您不必为此设置新的Web服务器。您可以将其添加到现有的Web服务器,只要该配置不存在。
注意:这可能相当复杂。您可能要集中精力在最简单的情况下使它工作,然后在进行工作和测试后,使其在其他情况下也可以工作。尤其要使其按以下顺序工作:1.公司内部的工作站/笔记本电脑2.然后通过VPN连接的计算机,然后是公司外部的计算机(例如,在网吧)。3.然后在不启用VPN的情况下在网络外部的计算机上进行4.然后对其他操作系统进行测试
在此示例中,我们假设有一个Web服务器,无论您在公司内部还是外部,都可以使用相同的IP地址进行访问。
在我们的“走出去CORP .example.com的”例如,这意味着“走出去”是一个子域,这只是业内人士访问,并且需要使用VPN使用短名称的服务。由于通常将Google Apps配置为在没有VPN的情况下运行(因为所有访问均为HTTPS),因此这不是最佳选择。
在我们的“走出去转 .example.com的”例如,这意味着该子域是从内部和外部的公司,和访问A
记录指向一个外部IP地址。
步骤4:为您的重定向器添加DNS记录
这是所需的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
第一个DNS记录(go.example.com)应该已经存在,作为步骤1的一部分。
第二个DNS记录(转到ext .example.com)是A
指向您正在配置的新Web服务器的IP地址的记录。
第三个DNS记录(重定向器)用于在调试时为您提供帮助。
步骤5:配置Web服务器
将重定向添加到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>
如何测试。 http://go-redirector.example.com
应该在这一点上工作。
在此测试起作用之前,请勿继续。宝贝的步骤。
步骤6:配置客户端的DNS搜索路径
现在,我们将配置机器(任何运行Web浏览器的机器),以便DNS搜索路径包括“ ext.example.com”
在您的DHCP服务器和VPN服务器上发送DNS搜索路径,该路径为:
corp.example.com。
(具有重定向主机的子域,后跟“。”。)
或者,您可以使用类似以下的搜索路径:
corp.example.com example.com。
但是,这将为我们转到的每个织补网页添加一个附加的DNS查找。由于它们将在99%的时间内失败,因此这只会使网络冲浪变慢。
在工作站和便携式计算机上,您需要确保子域包含在其DNS搜索路径中。这样,当用户键入“ go”时,软件将在域中找到它。
我们希望将计算机的搜索路径配置为以各种可能的方式设置此子域:
最初,DNS搜索路径无法通过DHCP设置。这是一项新增功能,并非所有的DHCP客户端都支持。即使支持该功能的DHCP客户端也需要进行修改,因为当膝上型计算机位于(例如)网吧时,它正在与您无法控制的DHCP服务器通信。当笔记本电脑使用VPN时,VPN客户端软件实际上并不使用DHCP,但是VPN服务器通常通过某种方式传输通常从DHCP服务器获得的设置。
因此,您要在所有这些位置设置DNS搜索路径:
- DHCP服务器应发送DNS搜索路径选项
- 静态配置的计算机应设置其DNS搜索路径
corp.example.com
如果DHCP服务器尚未包含使用DHCP的客户端,则应将其配置为将域预先添加到其搜索路径中。
以下是有关如何在各种DHCP服务器和操作系统上执行此操作的说明。
配置DHCP服务器以包括DNS搜索路径:
- Windows DHCP说明
去做
- ISC DHCP指令
如果搜索路径只是计算机应位于的域,则:
option domain-name "corp.example.com";
如果客户端支持RFC 3397提供搜索路径,则可以执行此操作,但是这样做很尴尬,因为没有对DNS主机序列数据类型的本地支持,每个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)
);
应该(未经测试)生成两个项目的搜索列表。
- dnsmasq DHCP指令
去做
配置静态配置的计算机:
- 视窗
去做
- Linux / Unix
编辑/etc/resolv.conf
并确保(1)“ domain corp.example.com”是第一行,(2)添加/编辑“ search”行以包括该corp.example.com
域,(3)在其中添加“ options ndotes:2”行减少DNS服务器上的负载。
domain corp.example.com
search corp.example.com exmaple.com
options ndots:2
配置DHCP客户端在其他DHCP服务器上工作时
适用于Windows,Linux等的TODO填写。
步骤7:测试,测试,测试!
现在,用户应该能够指定:
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 )
步骤8:其他建议
最后,一个建议:即使您做http://go/foo
得很完美,当有人尝试在您未配置为强制进行DNS搜索的计算机上键入链接时,您仍然有可能无法使用链接包含您的域的路径。因此,您应该使用完整的URL发布链接:http://go.example.com/foo
; 并花时间教育您公司的PR部门和其他部门,始终以这种方式进行指定。
或者至少将它们编码为HTML,以使“ go”在链接文本中可见,但是实际的HREF指向FQDN:
<a href="http://go.example.com/lunch">go/lunch</a>
教导PR部门的人员这样做可能很困难。您可能只是想告诉他们,他们必须go.example.com
在写的任何内容中使用长版本(),因为短的“ go / lunch”仅是偶然的原因。
步骤8:HTTPS
待办事项:弄清楚如何使用HTTPS(要获得正确的认证,即使不是不可能的,认证也将非常困难)。