NginxとローカルDNS設定の構成に関するYouTubeチュートリアルを見ています。 Ubuntu 22.04ホストでの作業中に、チュートリアルの指示に従ってDockerを使用して設定したDNSサーバーで問題が発生しました。入力したドメイン名を解決しようとすると、Docker DNSサーバーはそれを解決できません。
nslookup ns.main.com
;; Got SERVFAIL reply from 127.0.0.1, trying next server
Server: 192.168.1.1
Address: 192.168.1.1#53
** server can't find ns.main.com: NXDOMAIN
私が直面した最初の問題は、docker-composeを使用してDockerコンテナを正常に構築できましたが、docker-compose upを使用して起動しようとするとエラーが発生することでした。エラーは、私のUbuntuホストでsystemd-resolvedがすでにポート53を使用していることを示します。この競合を解決し、次の手順に従ってコンテナを実行できました。Ubuntu:systemd-resolvedで使用されているポート53を解放する方法これはsystemd-resolvedでポート53を解放するのに役立ちます。
/etc/resolv.conf
nameserver 127.0.0.1
nameserver 192.168.1.1
nameserver fe80::1%3
search .
sudo lsof -i:53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 4079 juan 372u IPv6 116841 0t0 UDP *:domain
DNS解決の問題に対する解決策をオンラインで探していますが、まだ正しいアプローチを確信できません。一部の情報では、IPv6が問題を引き起こす可能性があるため、使用を避ける必要があることを示唆していますが、これが正しいアクションであるかどうかはわかりません。 DNS 問題の根本原因が IPv6 互換性の問題であるのか、誤った構成なのか、それとも別のものなのかは分かりません。
docker-compose.yml
services:
nginx:
build:
context: ./nginx/
ports:
- 80:80
volumes:
- ./nginx/html/:/usr/share/nginx/html/
- ./nginx/conf.d/:/etc/nginx/conf.d/
dns:
build:
context: ./dns/
restart: always
ports:
- 53:53
- 53:53/udp
volumes:
- ./dns/named.conf:/etc/bind/named.conf
- ./dns/zone/:/etc/bind/zone/
command: named -c /etc/bind/named.conf -g -u named
DNS/ドッカーファイル
FROM alpine:latest
RUN apk add bind openrc
RUN rc-update -u named
DNS/named.conf
options {
directory "var/bind";
allow-transfer { "none"; };
allow-query { any; };
listen-on { any; };
};
zone "main.com" IN {
type master;
file "/etc/bind/zone/main.com";
};
DNS/zone/main.com
$ttl 86400
@ IN SOA ns.main.com. hostmaster.main.com.(
202 ; Serial
600 ; Refresh
3600 ; Retry
12378237) ; Expire
@ IN NS ns.main.com.
ns IN A 127.0.0.1
nginx/conf.d/default.conf
server {
listen 80;
server_name ns.main.com;
location / {
root /usr/share/nginx/html/main;
index index.html;
}
}
nginx/ドッカーファイル
FROM nginx:latest
COPY ./html /usr/share/nginx/html
RUN apt-get update && apt-get install -y procps