Linux

我可以讓 dnsmasq 刪除/拒絕/重定向除一個以外的任何地址查詢嗎?

  • October 14, 2018

我正在建立一個本地調查系統。Linux 筆記型電腦將執行 Limesurvey(在典型的 LAMP 堆棧上),並且可以通過 5 台平板電腦訪問會議參與者。平板電腦沒有問題,因為它們會預先配置載入調查。但是,我也想允許參會者通過他們的手機訪問調查連結。我打算做的是:

  1. 筆記型電腦用作接入點。DNSMASQ 在加入 AP 後會提供 IP。我會給他們一個簡單的本地地址(例如http://lime)來訪問調查界面,這應該是可能的,因為 DNSMASQ 將充當他們的 DNS 伺服器 - 所以它會知道如何解決石灰。
  2. 我想快速處理客戶端錯誤 - 例如,他們在加入 AP 後意外輸入了不同的地址(或者只是想上網,例如訪問 google.com) - 我希望 DNSMASQ立即返回錯誤,最好重定向到自定義錯誤頁面,為他們提供正確的連結。
  3. 編輯:我調查了這個;可能我將不得不製作一個強制門戶類型的解決方案。我仍然想要顯示啟動頁面的最簡單方法 - 列出調查並將所有其他請求刪除/重定向到啟動頁面。我不需要身份驗證,因為不會通過此連接提供網際網路;在這種情況下,身份驗證只是額外的點擊,但我希望人們可以輕鬆訪問調查。

這可能嗎?有沒有更好的方法來執行這個計劃?

當然!使用以下命令將所有名稱解析重定向到一個地址:

address=/#/10.0.0.101

這是/etc/dnsmasq.conf文件中所需的條目。我建議使用它,因為如果伺服器因任何原因重新啟動,它將強制執行此類配置。

在命令行上,該選項被呼叫:

-A, --address=/<domain>[/<domain>...]/[<ipaddr>]  

dnsmasq 手冊的副本address=如下。

-i vlan但是,即使設置(預期使用的介面)和-a 10.6.66.1(預期 dnsmasq 將偵聽 DNS 解析的地址)似乎是合理的。不要那樣做!。

允許 dnsmasq 以萬用字元模式綁定到埠 53 上的任何和所有伺服器地址。這樣,對伺服器的任何關於 DNS 解析的請求都將由 dnsmasq 響應。

這三種模式是“萬用字元”、“綁定介面”和“動態綁定”。

在“萬用字元”模式下,dnsmasq 綁定萬用字元 IP 地址(0.0.0.0 或 ::)。這允許它在相關埠上接收發送到伺服器的所有數據包。訪問控制(–interface、–except-interface、–listen-address 等)由 dnsmasq 實現:它查詢核心以確定接收數據包的介面和發送數據包的地址,以及應用配置的規則。如果未指定任何其他模式,則萬用字元模式是預設值。

使用埠 53(預設情況下外部客戶端會期望):

port=53   # It is set to be 53 by default, not really needed.

關閉(並禁止)兩者avahi-dnssystemd.resolved

確保沒有其他程序/服務正在偵聽埠 53 或 5353。

$ netstat -pantu | grep ':53'

還設置此選項以強制mylocaldomaindnsmasq DNS 解析器以錯誤 (NXDOMAIN) 解析(無點)之類的名稱,並且(某些)名稱解析不會轉發到任何其他伺服器:

# Never forward plain names (without a dot or domain part)
domain-needed
# Never forward addresses in the non-routed address spaces.
bogus-priv

確保/etc/resolv.conf未使用任何伺服器設置:

no-resolv
no-poll

以上所有將配置 dnsmasq 的 DNS 端以將所有域解析為一個簡單的地址。仍然可以通過將其包含在/etc/hosts文件中來添加任何其他名稱來解析其他需要的地址,例如

127.0.0.1
10.0.3.101   linum

最後一個地址應該是調查的網路伺服器的地址。

上面的初始地址 (10.0.0.101) 應該是錯誤頁面,解釋瞭如何訪問調查頁面。

但這還不是全部。您還需要配置 DHCP 伺服器以提供帶有 dnsmasq DNS 解析器地址的名稱伺服器選項(不使用選項編號 5,它已過時(並且應該已經過時了 20 多年)):

dhcp-option=6,10.0.0.101

加上 dnsmasq 的 DHCP 部分所需的所有其他配置。

這將允許電腦(平板電腦或手機)通過定義的 DNS 伺服器獲取 DHCP 給定地址。所有符合協議的電腦都將遵循此類配置選項,並且無法解析任何其他地址。

但是,設備也有可能嘗試直接訪問 IP 號碼(不請求 DNS 解析)。必須在為本地網路服務的路由器上使用 IPFilter 配置來避免這種情況。


來自man dnsmasq

-A,–地址=/

$$ /… $$/$$ $$

指定要為給定域中的任何主機返回的 IP 地址。域中的查詢永遠不會轉發,並且總是使用指定的 IP 地址(可能是 IPv4 或 IPv6)進行回复。要為域同時提供 IPv4 和 IPv6 地址,請使用重複的 -A 標誌。要為單個查詢包含多個 IP 地址,請改用 –addn-hosts=。請注意,/etc/hosts 和 DHCP 租約會覆蓋各個名稱的此項。這樣做的一個常見用途是將整個 doubleclick.net 域重定向到某個友好的本地 Web 伺服器,以避免橫幅廣告。域規範的工作方式與 –server 相同,但附加了 /#/ 匹配任何域的功能。因此,–address=/#/1.2.3.4 將始終返回 1.2.3.4 對於任何未從 /etc/hosts 或 DHCP 回答且未通過更具體的 –server 指令發送到上游名稱伺服器的查詢。

另請閱讀:

添加偽造的DNS條目

綁定配置以將所有查詢僅解析到一個地址

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