如何從 LAN 內(跨多個子網)獲取指向本地託管 Web 伺服器的 Internet 域名的 DNS IP 解析?
切入正題:
我的一個具體問題是:10.0.3.X/24 網路上的客戶端無法訪問
subdomain.site.com
. 如何讓 10.0.2.X/24 和 10.0.3.X/24 上的客戶端在呼叫時能夠解析 10.0.1.4subdomain.site.com
?我想讓我的 DNS 解析使用 WAN 端域名為我的 Web 伺服器 LAN 工作,例如
subdomain.site.com
,任何 LAN 子網路上的n 個客戶端可以只鍵入subdomain.site.com
或site.com
適當地路由(可擴展,所以/etc/hosts
不在問題)。我的 LAN 有多個使用LEDE(網路 .1)和OpenWRT(網路 .2 和網路 .3)創建的子網:
10.0.1.X/24 Main puppy with WAN interface facing internet and NAT, web server fixed at 10.0.1.4 with ports forwarded 10.0.2.X/24 Auxiliary router with WAN interface facing 10.0.1.X/24 (routed) 10.0.3.X/24 Auxiliary router with WAN interface facing 10.0.1.X/24 (routed)
*我不想要任何髮夾式 NAT/環回 NAT 解決方案。*我更喜歡使用 DNS 的解決方案,原因如下:
- 來自客戶端的呼出呼叫權威 DNS 來查找 IP(用於路由!),然後將數據包發送到該目的地,
- 到達後,將其 DNATed 到伺服器。
- 源 IP 是客戶端的本地地址,因此伺服器直接呼叫客戶端(使用數據包的源 IP)。
- 客戶端拒絕這個包,因為它希望它來自網關,間接來自網關的分機。地址。由上面的 DNS 提供。
- NAT 環回通過將出站源 IP 轉換為網關的 LAN 端地址來解決此問題。使得
- 然後伺服器響應網關,而不是直接響應客戶端。涼豆。
此數據流的問題在於離開 LAN 並聯繫全球 DNS 伺服器以獲取 IP 地址的效率不高。當伺服器是本地對等點時(在 NAT 的同一側,在我的情況下不一定在同一個本地子網中)。當客戶端和伺服器是本地對等點時,為什麼還要離開區域網路?可以在這裡找到環回 NAT 流的一個很好的解釋, https://unix.stackexchange.com/a/282094/33386。
我知道可以使用DNS 水平分割或最近一些人稱之為的任何時髦術語來實現我想要的。在某些情況下優先於全域命名伺服器的本地命名伺服器也可以解決這個問題。**使用多個子網(多個 DHCP+DNS 伺服器)時,如何在 OpenWRT 或 LEDE 中實現這一點?**必須有人已經這樣做了。
目前,10.0.1.X/24 上的客戶端可以
subdomain.site.com
通過相應的 dnsmasq 設置訪問,/etc/config/dhcp
但我不知道為什麼,因為我認為這不包括子域:config domain option name 'site.com' option ip '10.0.1.4' # LAN address of web server
第一個缺失元素
我必須在文件中的輔助路由器
/etc/config/dhcp
上的 dnsmasq 配置中添加兩件事:list server '10.0.1.1'# Clients will still get 10.0.3.1 as dns server list rebind_domain 'subdomain.site.com' # Allow rebind to web server
使
list server
dnsmasq 將 dns 查詢轉發到 10.0.1.1 的伺服器(主路由器 dnsmasq 伺服器)。允許重新綁定特定站點,list rebind_domain
以便可以保留 dns 重新綁定保護。謝謝你在這裡“jow”。另一種選擇是完全禁用 dns 重新綁定保護。或者,也可以使用option rebind_localhost 1
,但我沒有對此進行測試。沒有這一步,我無法 pingsubdomain.site.com
。第二個缺失元素
/etc/dnsmasq.conf
在主路由器上添加以下條目。address=/.site.com/10.0.1.4
.
請注意任何子域的佔位符。這種變化也可能在 中/etc/config/dhcp
,但我不確定如何。原始的第二個缺失元素(有限)
這是我最初的解決方案,後來我放棄了。我在主路由器
10.0.1.4 subdomain.site.com
的文件中添加了一個條目(/etc/hosts
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters 10.0.1.4 subdomain.site.com
通過添加
logqueries 1
以/etc/config/dhcp
記錄所有 DNS 查詢來對此進行測試。將顯示類似於以下內容的內容,這表明這/etc/hosts
是來源:Fri Jan 5 14:11:20 2018 daemon.info dnsmasq[7368]: 73 10.0.3.149/64299 /etc/hosts subdomain.site.com is 10.0.1.4
什麼沒有奏效
令我驚訝的是
/etc/config/dhcp
,主路由器上的以下配置僅在10.0.1.X/24
子網內有效:config domain option name 'site.com' option ip '10.0.1.4' config domain option name 'subdomain.site.com' option ip '10.0.1.4'
如果有人可以闡明這一點,我很想知道為什麼!也許有問題?
似乎在輔助路由器上添加
option dns 10.0.1.1
到/etc/config/network
也沒有真正幫助我的情況。config interface 'lan' option ifname 'eth0.1' option force_link '1' option type 'bridge' option proto 'static' option ipaddr '10.0.2.1' option netmask '255.255.255.0' option dns '10.0.1.1' config interface 'wan' option ifname 'eth0.2' # Comment this out if connecting as sta using wlan option proto 'dhcp' option netmask '255.255.255.0' option gateway '10.0.1.1' option dns '10.0.1.1'
添加此選項會使條目顯示在
cat /tmp/resolv.conf.auto
. 但是,list server 10.0.1.1
如上所述,添加nameserver 10.0.1.1
了 WAN 介面。在輔助路由器上添加
dhcp_option
s/etc/config/dhcp
沒有幫助。config dhcp 'lan' option interface 'lan' option start '100' option limit '150' option leasetime '72h' option ra 'server' #list 'dhcp_option' '3,10.0.1.1' # SET DEFAULT GATEWAY, CAUTION CAN BREAK STUFF #list 'dhcp_option' '6,10.0.1.1' # SEND DNS SERVER ADDR TO CLIENTS, CAUTION CAN BREAK STUFF