只不過是想用 docker 架個 dns 也要這麼虐嗎

 想著要把伺服器搬到 docker 上去架設,比起那個 apt install PACKAGEsssss 折騰了許多,先拿個 bind DNS server 來試一下,不試不知道,一試不得了,果真折騰!

 工作環境:
    Ubuntu Server 18 LTS
        docker
            bind9
        docker-compose(另文好了)

 一開始先把伺服器清乾淨,然後把 docker 裝起來,把防火牆上的小洞挖好,然後開始動手。

 先把 docker 自已的網路設一下,

docker network create br.name.u.like --driver=bridge --subnet=192.168.0.0/24

 抓一下 docker 的 bind DNS server

docker pull sameersbn/bind:latest

 啟動 bind DNS server

docker run -d --name=bind \
  --ip=192.168.0.9 \
  --network=br.name.u.like \
  --publish=53:53/udp --publish=10000:10000/tcp \
  --volume=/home/someone/.bind/primary:/data \
  --env='ROOT_PASSWORD=WhateverPasswordUWant' \
  sameersbn/bind:latest

 

 醬子就行了,然後連到電腦的 ip:10000 把用剛才上面設的 root 密碼 WhateverPasswordUWant 進去 Webmin 設定你要的 DNS 。

 

======================== 以下都是坑 ========================

# dns 53 PORT 被系統佔住

#  --dns=127.0.0.111
#WARNING: Localhost DNS setting (--dns=127.0.0.111) may fail in containers.
#a23fdff40cb0b45c54c7446a7f39fba28eed03471bd9dc9c1a1569551495a3d8
#docker: Error response from daemon: Address already in use.

 
Ubuntu 裝好了以後,53 port 已經被佔住了,這是因為 systemd-resolved 啟用了
netstat -tulpna 可以查看,看到類似 127.0.0.*:53 就是有服務使用了 53 port,像下方將子

udp        0      0 0.0.0.0:53              0.0.0.0:*                           -
udp6       0      0 :::53                   :::*                                

這個設定涉及 /etc/systemd/resolved.conf 檔案中的 DNSStubListener 參數,改了這個要設好 DNS server 不然無法解析網址,就連不到所有的網站了

1. 編輯 /etc/systemd/resolved.conf

sudo vim /etc/systemd/resolved.conf

移除 DNS= 和 DNSStubListener= 前方的 #
設成像是下方的樣子

[Resolve]
DNS=1.1.1.1
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=no
DNSStubListener=no
#ReadEtcHosts=yes

2. 設定檔案連結

sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf

3. 重新開機
Port 53 應該已經沒有在使用了,不會出現類似 "listen tcp 127.0.0.1:53: bind: address already in use" 的訊息

或是
sudo lsof -i :53
如果 port 53 沒有在使用就不會出現任何訊息,就成功了

可以架你自已的 DNS server 不會被卡住了


#  --publish=1.2.3.4:53:53/udp --publish=1.2.3.4:10000:10000/tcp \
#docker: Error response from daemon: driver failed programming external connectivity on endpoint bind9 (fda042ee61fdc9489610fa8a75b7fcff5409f9947ab957e7e5341be5bd0a5045): Error starting userland proxy: listen udp4 192.168.0.9:53: bind: cannot assign requested address.
ip 統一設一次就行











留言

這個網誌中的熱門文章

使用 Excel 計算2個地點之間的直線距離

LINE 儲存的檔案傳到 email 不方便 很不方便 非常不方便 但是有解的筆記

合併列印標籤漏印