問題

問題

博文「為您的網域提供「tinyurl」服務」 說明如何使用 Google Apps 為您的網域設定 ShortName 服務。例如,如果您的網域是 Google Appsexample.com並且您使用 Google Apps,則可以將其配置為http://go.example.com您企業的個人 ShortName 服務。

注意:這並不是要創建一個「tinyurl」服務供全世界使用。這是針對一個企業而言的。

擁有隻有您的使用者可以使用的短名稱服務非常有用,這樣您就可以建立指向內部頁面的連結。您可以說:「今天的午餐菜單是在http://go.example.com/lunch」。該部落格文章記錄了允許人們建立自己的連結的一些好處。(最重要的是:他們不必打擾您建立新連結!)

問題

系統的問題是 URL 仍然相當長。人們寧願在網頁瀏覽器中輸入“go/lunch”並使其正常工作。遺憾的是,由於 HTTP 協定運作方式的技術問題,Google Apps 無法支援此功能。 HTTP 1.1 中的「Host:」標頭列出了使用者在 Web 瀏覽器中輸入的網域,而不是完全合格域名。換句話說,當 Google Apps 收到“http://go/午餐" 網路伺服器接收「go」作為主機名稱。由於 Google Apps 為許多網域提供此服務,因此它無法判斷您是否想要go.example.comgo.some-other-example.com

結果,使用者每次都必須輸入“go.example.com/lunch”,這比“go/lunch”長得多。

解決方案

谷歌可以透過使用網路cookies或其他一些方案來解決這個問題。這些都不是特別乾淨或容易的。在他們這樣做之前,您可以透過設定自己的機器來解決問題,該機器接受請求作為「go」並重新導向它們。

伺服器接受名為「go」的網站的 HTTP 請求,並將該請求重新導向到go.example.com。然後,您建立正確的 DNS 記錄以使其正常運作,並調整 DHCP 配置以使您的筆記型電腦/工作站執行正確的操作。

此伺服器故障文件的重點是解釋該過程,然後提供配置範例來幫助您為網站執行此操作。由於我無法訪問或了解世界上的每個作業系統,因此我將其設為“社區維基”,以便人們可以在使用它時填寫配置片段。我已將“TODO”放在特別需要改進的區域。

細節

在此範例中,我們將使用“example.com”作為網域。

第 1 步:以正常方式設定 Google Apps 服務。

go.example.com正常配置服務。對其進行測試並確保類似的 URLhttp://go.example.com/foo有效。如果尚未完成,請不要繼續。這就像在你擁有一輛汽車之前試圖修理你的汽車一樣。

步驟 2: 選擇您的重定向器主機名

如果您的短名稱服務是go.example.com,那麼理想情況下您應該將重定向器的名稱設為go.example.com。可悲的是,物理學阻止兩個物體同時位於同一個地方,而 DNS 遵守物理定律。

訣竅是讓重定向器與 ShortName 服務具有相同的主機名,但位於不同的網域中。例如,go.corp.example.comgo.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.comcalendar.ext.example.comvpn.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 位址存取。

在我們的「走.公司.example.com」範例,這表示「go」位於僅內部人員可以存取的子網域中,並且需要VPN 才能使用ShortName 服務。由於Google Apps 通常配置為無需VPN 即可運作(因為所有存取都是透過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

作為步驟 1 的一部分,第一個 DNS 記錄 (go.example.com) 應該已經存在。

第二筆 DNS 記錄 (go.分機.example.com)是A指向您正在設定的新 Web 伺服器的 IP 位址的記錄。

第三筆 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 搜尋路徑
  • corp.example.com如果 DHCP 伺服器尚未包含該網域,則應將使用 DHCP 的用戶端設定為將網域預先新增至其搜尋路徑。

以下是有關如何在各種 DHCP 伺服器和作業系統上執行此操作的說明。

設定 DHCP 伺服器以包含 DNS 搜尋路徑:

  1. Windows DHCP 說明

去做

  1. 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,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)
    );

它應該(未經測試)產生一個包含兩個項目的搜尋清單。

  1. dnsmasq DHCP 指令

去做

配置靜態配置的機器:

  1. 視窗

去做

  1. 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;並花時間教育公司的公關部門和其他人始終以這種方式指定。

或至少將它們編碼為 HTML,以便「go」在連結文字中可見,但實際的 HREF 轉到 FQDN:

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

教公關部門的人這樣做可能很困難。您可能只是想告訴他們必須go.example.com在所寫的任何內容中使用長版本 ( ),因為短的“go/lunch”只有在偶然情況下才會起作用。

步驟 8:HTTPS

TODO:弄清楚如何使用 HTTPS(要獲得正確的認證將非常困難,即使不是不可能)。

答案1

這個問題應該以某種方式標記為「已回答」。這樣,https://serverfault.com/unansweredURL 將保持正確。請(發布並)接受此問題的“答案”。謝謝!

我的「答案」是,建立(或安裝)連結縮短服務非常簡單,而不是跳過上面的所有環節,只需在 Web 伺服器上設定一個本地連結縮短器來回答「go. example.com」並確保您的DNS 回應搜尋example.com。這樣,您就不會向外界洩露內部 URL。 (可能我沒抓到重點。)

備擇方案:

  • 對於非常小的公司或工作小組,請詢問每個人他們最喜歡的書籤,並找到一些空間將其放在內部網首頁上。

  • 或者,為您的小型公司或團體將 Intranet 部署為 wiki,並提供方便的共享熱鏈接列表,以幫助人們到達他們可能想去的地方。

乾杯,-丹尼

相關內容