docker自定義網絡里的dns實現原理


簡單說一下流程吧,不寫了。

docker會修改容器里的/etc/resolv.conf文件,把dns服務器設置成127.0.0.11,因為127.0.0.0/8地址都是本機回環地址,所以dns查詢的時候實際上是把請求發給了自己。雖然是發給自己,但是還是要走netfilter表的。nat表的output鏈里把發往127.0.0.11:53的UDP包轉到了41741端口

iptables -A DOCKER_OUTPUT -d 127.0.0.11/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.11:41741

 netstat -anp查看發現是dockerd在監聽41741端口,等dns請求又回環到filter表的input鏈的時候dockerd就接到了這個請求。所以,輾轉了半天dns請求最終發給了dockerd進程。dockerd自身處理這些請求,處理不了的應該是要發給宿主機的dns服務器。

 

 

參考:

https://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/

https://www.jianshu.com/p/4433f4c70cf0

https://anoyi.com/p/dba9342071d8


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM