注意:这不是为全世界创建“tinyurl”服务.这是针对企业的.
拥有只有您的用户可以使用的短名称服务才有用,这样您就可以创建指向内部页面的链接.您可以说,“今天的午餐菜单是在http://go.example.com/lunch”,而不是告诉人们一个长期困难的网址.该博客文章记录了授权人们建立自己的链接的一些好处. (最重要的是:他们不必费心去设置新的链接!)
问题
系统的问题是URL仍然很长.人们宁愿在他们的网络浏览器中输入“go / lunch”并使其正常工作.遗憾的是,由于HTTP协议的工作原理,Google Apps无法支持此功能. HTTP 1.1中的“Host:”标题列出了用户在其Web浏览器中键入的域,而不是FQDN.换句话说,当Google Apps获取“http://go/lunch”的HTTP请求时,Web服务器会收到“go”作为主机名.由于Google Apps为许多域提供此服务,因此无法判断您是否需要go.example.com或go.some-other-example.com.
因此,用户每次都必须输入“go.example.com/lunch”,这比“去/午餐”要长得多.
解决方案
谷歌可以通过使用网络cookie或其他方案来解决这个问题.其中没有一个特别干净或容易.在他们这样做之前,您可以通过设置您自己的机器来解决问题,该机器接受请求“go”并重定向它们.
服务器接受名为“go”的站点的HTTP请求,并将请求重定向到go.example.com.然后,您可以创建正确的DNS记录以使其正常工作,并改变您的DHCP配置,以便您的笔记本电脑/工作站做正确的事情.
此服务器故障文档的要点是解释该过程,然后提供配置示例以帮助您为站点执行此操作.由于我无法访问或了解世界上的每个操作系统,因此我将其设为“社区维基”,以便人们可以填写配置片段,因为它们可以为他们工作.我把’TODO’放在特别需要改进的领域.
细节
在此示例中,我们将使用“example.com”作为域.
第1步:以正常方式设置Google Apps服务.
正常配置go.example.com的服务.测试它并确保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的子域,这些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地址访问,无论您是在公司内部还是外部.
在我们的“go.corp.example.com”示例中,这意味着“go”位于只能由内部人员访问的子域中,并且需要VPN才能使用ShortName服务.由于Google Apps通常配置为在没有VPN的情况下工作(因为所有访问都是HTTPS),因此这是次优的.
在我们的“go.ext.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
第一个DNS记录(go.example.com)应作为步骤1的一部分存在.
第二个DNS记录(go.ext.example.com)是指向您正在配置的新Web服务器的IP地址的A记录.
第三个DNS记录(go-redirector)是在调试时帮助你的.
步骤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”时,软件将在域中找到它.
我们希望配置机器的搜索路径以包含可能设置搜索路径的每个方式的子域:
最初无法通过DHCP设置DNS搜索路径.这是一个新添加的功能,并非所有DHCP客户端都支持它.即使是支持它的DHCP客户端也需要进行修改,因为当笔记本电脑位于(例如)网吧时,它正在与您无法控制的DHCP服务器通信.当笔记本电脑使用VPN时,VPN客户端软件实际上并不使用DHCP,但VPN服务器通常会通过某种方式传输通常从DHCP服务器获取的设置.
因此,您希望在所有这些位置设置DNS搜索路径:
> DHCP服务器应发送DNS搜索路径选项
>静态配置的计算机应设置其DNS搜索路径
>如果DHCP服务器尚未包含DHCP,则应将使用DHCP的客户端配置为将corp.example.com域预先挂起到其搜索路径.
以下是有关如何在各种DHCP服务器和操作系统上执行此操作的说明.
配置DHCP服务器以包含DNS搜索路径:
> Windows DHCP说明
去做
> ISC DHCP指令
如果搜索路径只是机器应该在的域,那么:
option domain-name "corp.example.com";
如果客户端支持RFC 3397提供搜索路径,那么你可以这样做,但它很尴尬,因为没有本机支持数据类型,这是一个DNS主机序列,每个都编码为DNS中的长度前缀标签.没有办法编写定义为记录数组的选项的值,其中记录包含另一个记录的数组,因此您需要使用数据字符串手动编码.
option dns-search-domains code 119 = string; option dns-search-domains concat( encode-int(4,1),"corp",encode-int(7,"example",encode-int(3,"com",encode-int(0,1) );
> dnsmasq DHCP指令
去做
配置静态配置的计算机:
> Windows
去做
> Linux / Unix
编辑/etc/resolv.conf并确保(1)“domain corp.example.com”是第一行,(2)添加/编辑“搜索”行以包含corp.example.com域,(3) )添加“options ndotes:2”行以减少DNS服务器上的负载.
domain corp.example.com search corp.example.com exmaple.com options ndots:2
配置DHCP客户端在其他DHCP服务器上工作
TODO填写Windows,Linux等.
第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搜索路径包含您的域.因此,您应该使用完整的网址发布链接:http://go.example.com/foo;并花时间教育贵公司的公关部门和其他人,以便始终以这种方式指定.
或者至少用HTML编码,以便在链接文本中看到“go”,但实际的HREF会转到FQDN:
<a href="http://go.example.com/lunch">go/lunch</a>
在PR部门教人员这样做可能很困难.您可能只想告诉他们,他们必须在他们写的任何内容中使用长版本(go.example.com),因为简短的“go / lunch”只能偶然发挥作用.
第8步:HTTPS
TODO:弄清楚如何使用HTTPS(如果不是不可能的话,认证将变得非常困难).
解决方法
我的“答案”是建立(或安装)链接缩短服务是不容易的,而不是跳过上面的所有箍,只需在Web服务器上设置一个本地链接缩短器,它回答“go. example.com“并确保您的DNS回答搜索example.com.这样,您就不会将内部URL泄露给全世界. (可能我错过了这一点.)
备择方案:
>对于一个非常小的公司或工作组,向每个人询问他们最喜欢的书签,并找到一些空间将其放在Intranet首页上.
>或者,将您的小型公司或组织的Intranet部署为维基,并提供一个方便的共享热链接列表,以帮助人们获得他们可能想去的地方.
干杯,-danny