Bind

綁定沒有按預期工作。可能的錯誤配置

  • August 9, 2015

我有兩個樹莓派——一個用作媒體播放器,另一個用作家庭伺服器(我稱之為插頭)。

在外掛中,我安裝了幾個具有 Web 界面的應用程序 - SickBeard(電視庫)、CouchPotato(電影庫)、Sabnzbd(Usenet 下載器)和傳輸(torrent 下載器)。我在前面使用 NGINX 作為代理。所以我的基本想法是,任何指向我的“Plug’s IP”的域都將路由到 NGINX,NGINX 根據使用的域名,將呼叫路由(代理)到相應應用程序的 Web 界面。例如,dl.plug.example.com(我不想透露域名)將帶我到傳輸網路界面,而 usenet.plug.example.com 將帶我到 Sabnzbdplus 網路界面,pi.plug.example .com 將指向我的其他 PI(用作媒體播放器)的“遠端”界面,modem.plug.example.com 將指向我路由器的管理頁面。它確實按預期工作。

現在我安裝並配置了 BIND,然後將我的調製解調器設置為使用 Plug 的 IP 作為 DNS 伺服器,以便所有請求都通過 Plug 的 BIND 安裝。我的目標是:

  1. 從連接到我的家庭網路的任何設備,.plug.example.com 應該將我帶到通過本地 IP 託管應用程序字節的相應機器。意思是,如果我在家並且在手機瀏覽器上輸入 dl.plug.example.com,它應該會路由到 192.168.1.x。如果我從家外訪問,它應該路由到我的公共 IP。
  2. 對不在我的網路中託管的任何其他域名的任何請求,我希望 BIND 通過 Google DNS (8.8.8.8) 並解決它。

公共 IP 部分有效。意味著當我從網路外部訪問時,它確實有效。當我從內部網路嘗試時 - 它會波動。也就是說,有時它會通過我的內部 IP 進行路由,但有時它會帶我通過整個網路(通過公共 IP 進行路由)。這是我試圖解決的一個問題。

另一個問題是有時 plug.example.com 根本無法解決。通過 BIND 已啟動並執行。當我通過域名從終端進行 SSH 時,它有時無法解析,但如果我使用 IP,它可以順利執行。所以我猜這是我的 BIND 配置的一些問題。根據我的調製解調器配置,所有 DNS 流量都通過安裝 BIND 的外掛。所以這不應該發生。

我已將我的 BIND 配置上傳到: https ://drive.google.com/file/d/0B8TuY1aaTEhmbXRGVUkwbUh1bVU/view?usp=sharing

第一的

這是我工作的 Gentoo 安裝中的 Hosts 文件。我已經刪除了實際的路由說明,以支持評論。更多關於路由的資訊:

# /etc/hosts: Local Host Database
#
# This file describes a number of aliases-to-address mappings for the for 
# local hosts that share this file.
#
# In the presence of the domain name service or NIS, this file may not be 
# consulted at all; see /etc/host.conf for the resolution order.
#
# Imaginary network.
#10.0.0.2               myname
#10.0.0.3               myfriend
#

# According to RFC 1918, you can use the following IP networks for private 
# nets which will never be connected to the Internet:
#
#       10.0.0.0        -   10.255.255.255
#       172.16.0.0      -   172.31.255.255
#       192.168.0.0     -   192.168.255.255
#
# In case you want to be able to connect directly to the Internet (i.e. not 
# behind a NAT, ADSL router, etc...), you need real official assigned 
# numbers.  Do not try to invent your own network numbers but instead get one 
# from your network provider (if any) or from your regional registry (ARIN, 
# APNIC, LACNIC, RIPE NCC, or AfriNIC.)

問題

請注意關於專用網路的最後一個評論塊。大多數人在為他們的專用網路配置網路服務時忘記的是,有一條假想的線將他們的內部網路(RFC 1918RFC 6761涵蓋的那些 IP 地址)和外部網路(用於所有實際目的的 Internet)分開,其中域 IP 地址主要由Internet 編號分配機構(即 IANA)維護和更新。這也是公認的做法,因為 IANA 負責DNS 根區, IANA DNS 伺服器對域解析到何處擁有最終決定權。將您的 DNS 伺服器想像成樹的頂部分支。如果您的伺服器無法解析主機,您的請求將沿著樹向下發送到後續分支。每個分支的大小都在增長 樹的底部是 IANA DNS 伺服器。


解決方案

由私有網路的維護者/創建者來處理私有網路內部的路由。在 Linux 中,這是通過更新主機文件來完成的,該文件通常儲存在/etc/hosts 請注意,OP 通過安裝和配置 BIND 只解決了一半的問題。BIND 正確地將名稱路由到主機和主機:埠,反之亦然。在大多數伺服器中,它的眾多用途之一是外部 DNS 區域(一個在您的專用網路之外)綁定到內部 DNS 區域。有關這方面的更多資訊,請參閱Linux DNS 伺服器 BIND 配置。當以下某些部分有保證時,我也會參考該連結。

由於內部路由由不同的規則 (RFC 1918/6761) 管理,因此必須設置靜態路由,以便地址到名稱的映射在 BIND 中工作。如果etc/hosts沒有為此配置文件,則綁定映射只知道在內部路由請求,而不知道將請求路由到哪裡。為了解決這個問題,我們必須添加我們的本地映射(假設 OP 已經正確設置了外部 BIND映射):

# IPv4 and IPv6 localhost aliases
127.0.0.1       bedroom-gentoo.myISP.net     bedroom-gentoo  localhost
::1             bedroom-gentoo.myISP.net     bedroom-gentoo  localhost

然後是我們的本地解決方案(在 OP 的情況下)

192.168.1.x    sickbeard.plug.example.com   sickbeard.plug    sickbeard
192.168.1.x    dl.plug.example.com          dl.plug           download
# Add others as needed.

請注意,上面的專用網路解析可以解析為FQDN,只加上主機名。OP 和其他人可以針對所需的行為進行相應的調整。我發現在專用網路中使用 FQDN 比記住所有創建的主機名更容易。

第 2 步 - 可選但首選

我在下面添加連結,因為讀者會在大多數與網路設置相關的答案中看到這個網路術語。如果您是新來的,請閱讀。如果你已經有一段時間了,你可能想跳過。

看不看就知道,DHCP 做的非常好。從這裡到永恆,它的主要功能將是提供地址,無論是公共的還是私人的。DHCP 不擅長的是記住它給出的地址實際上可能屬於任何類型的伺服器。在 OP 和許多其他讀者的情況下,情況就是如此。這種情況在這裡適用,因為我們將 IP 地址“軟體保留”192.168.1.xplug設備。為了確保 DHCP 在重新啟動/重新啟動或斷電後不會愚蠢地覆蓋伺服器的地址,應該在路由器中使用 MAC 地址綁定。我從我的摩托羅拉衝浪板上截取了以下螢幕截圖,但我在大多數主要路由器品牌(D-LINK、NetGear、LinkSys/Cisco)中都看到了相同類型的輸入螢幕。此外,有些人可能將其命名為 Reserve,有些人將其命名為 Binding,有些人將其命名為 MAC Binding:

按 MAC 地址預留

在 OP 的情況下,伺服器的 MAC 地址plug將進入第一個框,/etc/hosts文件中的最後一個八位字節 x 將進入 IP 地址框。我相信主機名是自動填寫的,但etc/hosts如果需要,您可以使用名稱。這將確保我們永遠不必修改主機文件,因為我們正在強制 DHCP 分發靜態 IP 地址。另一方面,這可能會略微增加流媒體服務的記憶體。我以前對我的 Roku 設備使用過相同的概念。


為了娛樂

TCP/IP 的工作原理 - Youtube

引用自:https://unix.stackexchange.com/questions/220836