前言#
上次 ubuntu の dns がエラーになった後、debain サーバーの dns も壊れました
どうして dns がこんなに私と縁があるのでしょう?
問題背景#
Debian サーバーに奇妙な現象が発生しました:
- 公共 DNS(例えば
8.8.8.8
または223.5.5.5
)はドメイン名を解決できません - ローカルネットワークの自作 DNS(例えば
192.168.0.254
)は正常に解決します
排查过程#
1. DNS 接続性テスト#
nc -zuv 223.5.5.5 53 # 出力: Connection succeeded!
公共 DNS の 53 ポートに到達可能
疑問中
2. DNS 設定確認#
cat /etc/resolv.conf
# 出力:
nameserver 223.5.5.5
nameserver 8.8.8.8
かなり正常です qwq
3. ファイアウォールルール#
sudo iptables -L -n -v | grep 53
特に問題はありません~
4.dig クエリ#
# UDP クエリ(失敗)
dig @223.5.5.5 aliyun.com +short
# 出力: ;; communications error: timed out
# TCP クエリ(成功!)
dig +tcp @223.5.5.5 aliyun.com +short
# 出力: 106.11.253.83 140.205.60.46 ...
UDP DNS クエリがブロックされ、TCP DNS は正常
5. ネットワークパケットキャプチャ#
sudo tcpdump -i any port 53 -w dns.pcap
キャプチャ結果:
- ただ 外向きの DNS リクエスト(
A? aliyun.com
) - 応答パケットは返ってきません
6. 接続トラッキング検証#
sudo conntrack -L -p udp --dport 53
# 出力: 0 flow entries
UDP リクエストは接続を確立しておらず、応答パケットは転送中に破棄されました
本当に逆天です
結論#
まだ何が問題かは分かりませんが、途中のネットワーク機器がブロックしている可能性があります?
docker なども除外しました
解決策を知っている友人がいれば、コメントを残してください。
解決策#
強制的に TCP プロトコルで解決#
# /etc/resolv.confを変更
echo "options use-vc" | sudo tee -a /etc/resolv.conf
自作 DNS#
穴を残しておきます