将 archive.ubuntu.com 重定向到 DNS 级别的镜像

将 archive.ubuntu.com 重定向到 DNS 级别的镜像

我依赖很多 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

相关内容