dnsmasq は小規模なネットワーク向けのDNS、DHCPサーバー。 DNSのキャッシュくらい、デフォルトであるものだと思っていたけどLinuxはそうではないようなので、こういうソフトウェアを入れてキャッシュさせる

yum でインストールして、設定ファイルを書き換える

dnsmasqをインストールすると、 /etc/dnsmasq.conf という設定ファイルが生成されるので、コメントアウトを外す とりあえず以下を設定する

domain-needed #ドメインの無いホスト名のみ問い合わせの場合、上位DNSサーバに転送しない
bogus-priv #プライベートIPアドレスの逆引きを上位DNSサーバに転送しない
resolv-file #上位DNSサーバの設定
FROM amazonlinux:2
 
RUN yum install -y dnsmasq systemd
 
RUN echo 'nameserver 8.8.8.8' > /etc/dnsmasq_resolv.conf \
  && sed -i -e 's/#domain-needed/domain-needed/' -e 's/#bogus-priv/bogus-priv/' -e 's@#resolv-file=@resolv-file=/etc/dnsmasq_resolv.conf@' /etc/dnsmasq.conf \
  && systemctl enable dnsmasq
 
ENTRYPOINT ["/sbin/init"]

実行時は --privileged と、 --dns=127.0.0.1/etc/resolv.conf に nameserver 127.0.0.1 が書かれるようにする

$ docker build -t dnsmasq-test .
$ docker run --privileged -it --dns=127.0.0.1 --name=dnsmasq dnsmasq-test
# digをインストール
$ yum install -y bind-utils
$ dig https://httpbin.org
 
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.amzn2.5.2 <<>> https://httpbin.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 59931
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
 
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;https://httpbin.org.           IN      A
 
;; AUTHORITY SECTION:
org.                    1800    IN      SOA     a0.org.afilias-nst.info. hostmaster.donuts.email. 1670768991 7200 900 1209600 3600
 
;; Query time: 18 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Dec 11 14:39:32 UTC 2022
;; MSG SIZE  rcvd: 130