# DHCP and DNS [TOC] --- ## DNS 尾碼 Q: 為何連線到某個 AP 內,出去的 request 有時會自動加上一個後綴? Answer: 這個是由 Host 自動加上的 DNS 尾碼,由 DHCP 夾帶的資訊所設定的。 (先讀下面 DHCP 相關的資訊!) 我們知道 DHCP 會將一些網路設定包在 DHCP payload 中送給 client。 當中就有 DNS 的相關資訊,告訴 client 該跟哪個 DNS 來發送 DNS query。 相關欄位的設定:  可以從 `DHCP Offer` 封包當中看到這個 Options:  而 Host 端在發送封包到某個目標 url 時,***DNS 會嘗試將 DNS 尾碼加在這個 url 後面*** 做發送。 舉例來說,在公司我們連線到特定的網域時,當中的 DHCP server 便會把相關的 network configuration 送給我們的電腦; 此時我們 Host 端便會將包在內部的 DNS 資訊做設定。 而當我們打 ping \<主機名稱\> 時,host 便會在後面加上所設定的 DNS 尾碼。 這也是為何我們在這個網域下 ping 我們的開發主機時會自動 append 一段網址的原因!  ## DHCP Overview - dhcp request 1. DHCP discover (BCAST) * 由 client 發出 (觸發條件: 插入乙太網路、或是取得 wifi 連線時 ... etc) * 發出一個 Bcast IP 封包,向連線的網路中詢問有無可用的 DHCP server 可提供服務 2. DHCP Offer (UCAST) * 當 DHCP server 收到這個指令時,將檢視內部的資源是否足夠 (e.g. IP address 是否滿了?) * ***使用 Client 的 `MAC address` 作為儲存的 index/key*** * 若發現這筆 MAC address 已經存在,並且對應的 IP address (於上一個連線週期所使用) 還沒有被占用,則會將這個上一次連線的 configuration 作為該 client 的 network config 包在 DHCP offer 內傳給該 client/user。 * 若發現資源符合,便會將 3. DHCP Request (BCAST) * 當 user 收到第一筆回應時,選擇其提供的 network configuration 來做 user local 端的設定 * 並且將 "該 user 已經選擇哪個 dhcp server" 的資訊廣播出去。 這個設計主要因為 network 當中可能不只一個 DHCP server,所以當 client 選擇某一個 DHCP server 的 offer 後,需要告知其他 DHCP server 不須等待這位 client。 4. DHCP ACK (UCAST) * user 回應給已選定的 DHCP server,告知其已經選擇 server 所配置的資訊。 * 而 server 便會開始做相關的租約計算 - DHCP IP 租約、以及處理當 DHCP client 離線時的 IP 資源回收。 擷圖 (注意: transaction ID 相同的為同一輪的 DHCP 交握~):  ## DHCP relay agent 當你的電腦與 DHCP server 不在同一個網段時,這時就需要依賴 DHCP relay agent 來轉發 DHCP 封包來維持 DHCP server 與 client 之間的通信。 舉公司內的網路為例,client 端為 `192.168.98.x`,而 DHCP server 為 `192.168.99.33`, 這時我們的 router 上就有 enable DHCP relay agent (也就是 `192.168.98.1`),將中間通信的 DHCP traffic 轉交給正確的位置上。 可以從 DHCP Offer 當中看到這個資訊!  ## Reference * [鳥哥的 linux 私房菜 - DHCP 篇](http://linux.vbird.org/linux_server/0340dhcp.php?fbclid=IwAR03-vVs_LB_0B2dP6n919RB0joUtf3a48pL2meibb6S4jA9duwfGZDJXds#server_dhcpd.conf) * [DHCP relay agent](https://david50.pixnet.net/blog/post/45230529-%5B%E7%AD%86%E8%A8%98%5Dcisco-dhcp-relay(ip-helper)) * [Jan Ho - DHCP 網路設定](http://www.jannet.hk/zh-Hant/post/dynamic-host-configuration-protocol-dhcp/) * 當中有提到 DHCP snooping 以及 IP Source Guard 的設計 (應該是 Cisco router 的實作),保護一定程度的網路攻擊。 (Reminder: **DHCP 是用 MAC address 來做存取 index/key**) * [Wireshark - DHCP capturing](https://en.wikiversity.org/wiki/Wireshark/DHCP) * 通常會使用 `port 67 and port 68` 作為主要的 capturing filter (將來回的資訊都擷取) * [DHCP - docker images](https://hub.docker.com/r/networkboot/dhcpd/) * [DNS - docker images](https://dev.to/robbmanes/running-coredns-as-a-dns-server-in-a-container-1d0) * 使用的是 [CoreDNS(從 CNCF 畢業的專案)](https://github.com/coredns/coredns)! * 其他 DNS daemon - `dnsmasq` 或是 `bind9`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up