
在深入討論這個問題之前,先介紹一些簡單的背景資訊:
我建立了一個小型實驗,它與運行Windows 7 的電腦一起工作。 ,其中包含來自實驗的狀態資訊。現在這個實驗將在一些活動中展示(想像一下 MakerFaire,...),如果人們可以使用他們的智慧型手機(或筆記型電腦)直接顯示這個網頁,並且配置盡可能少,我會很高興。
基本上我想要實現的是:
建立 Wifi 存取點使用計算機的內建 wifi 轉接器人們可以連接到哪些人(開放或受密碼保護)
攔截並重新導向 DNS 和/或 HTTP 請求,以便在開啟瀏覽器時顯示實驗網頁(如強制入口網站)
到目前為止,我已經能夠使用 Windows 7 的託管網路功能實現第 1 點,該功能非常適合 Wifi AP 部分。然而,當涉及到修改 DHCP 答案以提供自訂 DNS 伺服器(進而將所有流量轉送到我的網頁伺服器)時,我陷入了困境:有什麼辦法可以做到這一點嗎?
我有一些限制(否則就太容易了;-)):
- 我被 Windows 7 困住了(我知道使用 Linux 這個問題早就解決了!)
- 該電腦是一台獨立機器,即無法存取其他網路或網際網路。這也意味著沒有路由器或任何其他外部設備!
非常感謝任何幫助或建議!
答案1
- 取得 MaraDNS
MaraDNS 是一款免費、輕量且相對容易設定的 DNS 伺服器,適用於 Windows 和 Linux。從這裡下載它並將其解壓縮到某個資料夾。
- 配置 MaraDNS
開啟“secret.txt”並將值變更為其他內容(隨機字元)。
MaraDNS 設定位於同一目錄中的「mararc」檔案中。 DNS 伺服器有兩組功能。它們可以充當“權威名稱伺服器”或“遞歸/快取名稱伺服器”。
權威名稱伺服器指定網域名稱的 IP 位址。遞歸名稱伺服器儲存來自權威名稱伺服器的資訊並以遞歸方式傳遞查詢。
我們將在 MaraDNS 中配置權威和遞歸功能。
2.1 權威配置
我們將配置伺服器以提供區域網路網域的權威名稱。選擇任何域名,我選擇“local.com”(但請注意,如果您選擇現有域名,您將無法訪問實際的“local.com”網站)。
將配置行新增至“mararc”,如下所示:
csv2 = {}
csv2["local.com."] = "db.lan.txt"
其中 local.com 是您選擇的域名,db.lan.txt 是我們接下來要建立的第二個設定檔的名稱(如果您想命名第二個設定文件,請更改它)。
在與 MaraDNS 相同的目錄中建立一個名為「db.lan.txt」的新檔案。
對於要解析為名稱的每台計算機,請在「db.lan.txt」中新增一行。例如,對於兩台機器,一台“dev.local.com”,另一台“blog.local.com”,新增以下行:
dev.% 192.168.1.4 ~
blog.% 192.168.1.6 ~
完畢!
2.2 遞歸配置
我們將設定 MaraDNS 向您的預設名稱伺服器詢問所有其他網域,以便您可以將所有其他網域解析為其正確的 IP 位址。
找出您的 ISP 的 DNS 伺服器位址。這些可能會在路由器狀態頁面上列出,或透過檢查網路適配器上的詳細資訊來列出。
現在將您的 ISP 的 DNS 伺服器新增為「mararc」中的上游伺服器:
upstream_servers = {}
upstream_servers["."] = "xxx.xxx.xxx.xxx, yyy.yyy.yyy.yyy"
其中 xxx.xxx.xxx.xxx 和 yyy.yyy.yyy.yyy 是 ISP 的 DNS 伺服器。
完畢!
- 運行 MaraDNS 並使用 Askmara.exe 進行測試
雙擊“runmara.bat”,並使伺服器保持運作。
開啟命令提示符,導航至 MaraDNS 目錄並嘗試執行:
askmara.exe Agoogle.com.
和
askmara.exe Ablog.local.com.
您應該得到這樣的回覆:
# Querying the server with the IP 127.0.0.1
# Question: Agoogle.com.
google.com. +300 a 74.125.67.100
google.com. +300 a 74.125.53.100
google.com. +300 a 74.125.45.100
# NS replies:
# AR replies:
和:
# Querying the server with the IP 127.0.0.1
# Question: Ablog.local.com.
blog.local.com. +86400 a 192.168.1.6
# NS replies:
#local.com. +86400 ns synth-ip-7f000001.local.com.
# AR replies:
#synth-ip-7f000001.local.com. +86400 a 127.0.0.1
如果您在第一個查詢中遇到問題,則表示您搞亂了遞歸DNS 設定(您的ISP DNS 伺服器位址是否正確?),如果您在第二個查詢中遇到錯誤,則表示您搞亂了權威設定。
- 更改 MaraDNS 以回覆來自 LAN 的查詢
關閉 MaraDNS 窗口,並將“mararc”的前兩行更改為:
ipv4_bind_addresses = "192.168.1.2
recursive_acl = "192.168.1.0/24"
其中 192.168.1.2 是執行伺服器的電腦的 IP 位址,recursive_acl 的「192.168.1」部分與您的網路上的相同(可能是 192.168.0.0/24)。
再次啟動 MaraDNS,並保持其運作。
- 設定您的路由器以分發新的 DNS 伺服器
開啟路由器的 Web 介面並找到 DHCP 伺服器設定。應該有一個設定 DNS 伺服器的選項。寫入將運行 DNS 伺服器的電腦的 IP 位址。
對於每台計算機,斷開網絡連接(例如,透過在 Windows 中停用和啟用網絡,或在 Linux 上使用“ifconfig eth0 down”/“ifconfig eth0 up”)。
就是這樣,您現在應該能夠透過網域名稱來引用您的 LAN 電腦。