我依赖很多 Docker 镜像,并且为每个镜像更改 /etc/apt/source.list 是不切实际的,所以我想重定向archive.ubuntu.com
到 DNS 级别的镜像(我已经在网络上有自己的 dnsmasq/unbound)。
我的设置是一个在端口 53 上运行的 Pi-Hole(pihole-FTL 4.0,底层是 dnsmasq),它指向在端口 5353 上运行的未绑定:
server=127.0.0.1#5353
为了实现重定向,我将以下几行添加到了未绑定配置中:
local-zone: "archive.ubuntu.com." typetransparent
local-data: "archive.ubuntu.com. CNAME ubuntu.mirror.su.se."
而且它似乎运行良好(在端口 5353 上未绑定):
root@raspberrypi:~# dig +short -p 5353 @127.0.0.1 archive.ubuntu.com
ubuntu.mirror.su.se.
root@raspberrypi:~# dig +short -p 5353 @127.0.0.1 ubuntu.mirror.su.se
193.11.30.223
root@raspberrypi:~#
奇怪的是,dnsmasq 会因此而迷失方向:
root@raspberrypi:~# dig +short -p 53 @127.0.0.1 archive.ubuntu.com
ubuntu.mirror.su.se.
root@raspberrypi:~# dig +short -p 53 @127.0.0.1 ubuntu.mirror.su.se
root@raspberrypi:~#
对我来说,这没有多大意义,因为 dnsmasq 应该只是中继任何未绑定的作为答案发送的内容,但不知何故 dnsmasq 正在对此做一些事情。
一开始我以为是 DNSSEC 验证,但错误应该出在 archive.ubuntu.com 中,而不是镜像中。
知道如何调试吗?
答案1
看起来 unbound 本身可以做到这一点:
local-zone: "archive.ubuntu.com" redirect
local-data: "archive.ubuntu.com. CNAME se.archive.ubuntu.com."
得出:
$ docker run --rm -it test bash
root@3f1c7eff6ebc:/# dig archive.ubuntu.com
; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> archive.ubuntu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14903
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;archive.ubuntu.com. IN A
;; ANSWER SECTION:
archive.ubuntu.com. 3265 IN CNAME se.archive.ubuntu.com.
se.archive.ubuntu.com. 3265 IN CNAME ftp.acc.umu.se.
ftp.acc.umu.se. 3265 IN A 194.71.11.165
ftp.acc.umu.se. 3265 IN A 194.71.11.173
;; Query time: 3 msec
;; SERVER: 192.168.1.2#53(192.168.1.2)
;; WHEN: Thu Feb 28 19:31:27 UTC 2019
;; MSG SIZE rcvd: 142