0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CISCO ルータ、Docker, DNS, Web設定(2)

Last updated at Posted at 2025-09-03

Cisco ルータがない環境

シミュレータを動かし、自分でDockerを起動し、そこにNAT,DNS,Webを立てる。
resolv.confの設定例と、エラー例を収集。by ChatGPT
named.confの設定例と、エラー例を収集 by ChatGPT
CISCOのルータエラーの収集 by ChatGPT

ChatGPT

CISCOのルータエラーで、docker上にDNSをたてた場合を教えてください。

ChatGPT:

「CISCOのルータエラーで、Docker上にDNSを立てた場合」というのは少し曖昧ですが、おそらく以下のような状況を想定されているのではないでしょうか:
◆ 想定シナリオ:
Ciscoルーターを使ったネットワーク環境で
DNSの名前解決がうまくいかない or エラーになる
Docker上に構築したDNSサーバー(例:Bind9やCoreDNS)を使っている
そのDNSにルーターやクライアントが名前解決を試みているが失敗する
◆ よくあるエラーと原因
エラー内容 原因の可能性 対策
名前解決できない
(% Unrecognized host or address) ルーターがDNSサーバーに接続できていない pingやtracerouteで到達性を確認
ACLやNAT設定を確認
DNSタイムアウト Dockerコンテナが外部からアクセスできない docker run時のネットワークモード、ポート開放、--network hostの検討
DNS応答が不正 DNSコンテナの設定ミス(ゾーンファイル、レコードなど) BindやCoreDNSのログで確認、構文ミスの修正
CiscoルータがDNSを使っていない ip name-serverコマンド未設定 例:ip name-server 192.168.1.100(Docker DNSのIP)
DNSのUDP 53ポートがブロック ファイアウォール、iptables、Dockerネットワーク制限 ufw, firewalld, iptablesの設定確認
◆ Docker上でのDNS構築例(Bind9)
docker run -d --name mydns
-p 53:53/udp -p 53:53/tcp
-v $(pwd)/bind:/etc/bind
--restart unless-stopped
ubuntu/bind9
/etc/bind/named.conf やゾーンファイルを適切に設定
外部アクセスには -p オプションでUDP 53 を開ける必要あり
Ciscoルーターから見えるIPアドレスを確認(コンテナのIPではなく、ホストのLAN IP)
◆ Ciscoルーター側の設定例
ip name-server 192.168.1.100
ip domain-lookup
192.168.1.100 はDocker DNSを立てたホストのIP(LAN側)
ip domain-lookup を忘れるとDNSルックアップが無効になります
◆ トラブルシューティング手順
ルーターからDNSサーバーにpingできるか
ping 192.168.1.100
DNS応答があるか確認(ルーターで)
nslookup example.com
DockerホストでDNSログ確認(Bind9なら)
docker logs mydns
DNSポートが開いているか
sudo netstat -tulnp | grep 53
Dockerネットワークの確認
ブリッジモードでは外部アクセス制限がある場合がある
必要に応じて --network host オプションを検討
◆ 補足:CoreDNSを使う場合
もっと軽量にしたいなら、CoreDNSをDockerで動かすのも手です。設定もYAML的で簡単です。
もし具体的な「エラーメッセージ」や「構成(ルーターの設定、Dockerの設定、DNSコンテナの種類など)」があれば、それに合わせてピンポイントに原因と解決策をアドバイスできます。
必要なら、以下の情報を教えてください:
Dockerで使用しているDNSの種類(Bind9?CoreDNS?他?)
Ciscoルーターの機種/IOSバージョン
エラーの内容(コンソール出力など)
ネットワーク構成(簡易図でも可)
それに基づいて、もう少し正確な診断をします。

ubuntuのバージョンは?
Docker上とdockerを動かすHostの両方

resolv.confの設定例と、エラー例をお知らせください。

ChatGPT:

/etc/resolv.conf の設定は、Linux(やDockerコンテナ内)で使用するDNSの指定を行うファイルで、名前解決の際に参照される非常に重要な設定です。
以下に、基本的な設定例とよくあるエラー例を説明します。
✅ /etc/resolv.conf の基本的な設定例

DNSサーバーの指定(最大3つまで)

nameserver 8.8.8.8
nameserver 8.8.4.4

ドメイン名の指定(オプション)

domain example.com

検索ドメイン(FQDNでなくホスト名のみ指定したときに補完される)

search example.com sub.example.com

タイムアウトやリトライ回数(環境による。glideresolver等使用時)

options timeout:2 attempts:3
🛠 よくある /etc/resolv.conf 関連のエラー例と原因
エラー内容 原因 対処法
Temporary failure in name resolution DNSにアクセスできない(ネットワーク不可、DNSサーバー死んでる) nameserver のIPを確認。pingできるか?
Unknown host 名前解決できない(DNS応答なし) /etc/resolv.conf の記載ミス、DNSサーバー設定ミス
/etc/resolv.conf が書き戻される DHCPクライアントやsystemd-resolvedが自動上書き resolv.confを手動編集しても無効。上書きを防ぐには設定を止める必要あり
Dockerコンテナ内で nameserver 127.0.0.11 になってる Dockerの内部DNS(デフォルト設定) ホスト側のDNS解決設定に依存する。必要に応じて --dns オプション指定
ping: unknown host 名前解決できず ping できない /etc/resolv.confが正しくない or DNSが応答していない
コンテナで /etc/resolv.conf が空 Alpineなどの軽量イメージで自動生成されない 明示的に作成する必要あり(RUN echo nameserver 8.8.8.8 > /etc/resolv.conf)
🧪 確認コマンド例(ホスト/コンテナ両方)
DNS設定確認
cat /etc/resolv.conf
DNS名前解決のテスト
nslookup google.com
dig google.com
ping google.com
Docker run 時に DNS を指定(コンテナ用)
docker run --dns 8.8.8.8 --dns 8.8.4.4 ...
📌 /etc/resolv.conf を固定する方法(Ubuntuなど)

  1. systemd-resolved 無効化
    sudo systemctl disable systemd-resolved
    sudo systemctl stop systemd-resolved
  2. シンボリックリンク解除(Ubuntuでは /run/systemd/resolve/stub-resolv.conf へのリンク)
    sudo rm /etc/resolv.conf
    echo -e "nameserver 8.8.8.8\nnameserver 8.8.4.4" | sudo tee /etc/resolv.conf
    ※ この方法は環境によっては推奨されない。上書き制御は慎重に。
    🐳 Docker コンテナで /etc/resolv.conf を明示的に渡す例
    docker run -v /my/custom/resolv.conf:/etc/resolv.conf alpine ping google.com
    🔁 おすすめ対処フロー
    cat /etc/resolv.conf で現在の設定を確認
    ping や nslookup でDNSの疎通確認
    Dockerを使ってる場合は、docker run --dns オプションでDNS指定して試す
    ホストOSで systemd-resolved などの影響を受けていないか確認
    もしあなたが遭遇している 具体的なエラーメッセージ や システム構成(Docker or ホストOS, ネットワーク構成など) があれば、それをもとにさらに正確なアドバイスが可能です。必要であれば、それも教えてください。

named.confの設定例とエラー例をお知らせください。

ChatGPT:

named.conf は、BIND(Berkeley Internet Name Domain)で使用されるメインの設定ファイルです。DNSサーバーの動作を定義する重要なファイルで、ゾーン定義・オプション・アクセス制御などを設定します。
✅ 基本的な named.conf の設定例(簡易構成)
以下はローカルキャッシュDNS + 正引きゾーン1つを定義したシンプルな例です:
options {
directory "/var/cache/bind";
// DNSクエリの送信先(フォワーダー)
forwarders {
8.8.8.8;
8.8.4.4;
};
// 外部からの再帰問い合わせを拒否(セキュリティ)
allow-recursion { 127.0.0.1; 192.168.1.0/24; };
// DNS応答の送信元ポートを固定にしない
query-source address * port 53;
dnssec-validation auto;
auth-nxdomain no; # RFC1035を満たす
listen-on port 53 { any; }; # すべてのインタフェースで受信
listen-on-v6 { none; }; # IPv6無効(必要に応じて)
};
zone "." IN {
type hint;
file "/usr/share/dns/root.hints";
};
zone "example.local" IN {
type master;
file "/etc/bind/db.example.local";
allow-update { none; };
};
📄 ゾーンファイル例:db.example.local
$TTL 86400
@ IN SOA ns1.example.local. admin.example.local. (
2025090301 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.example.local.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
⚠️ よくある named.conf のエラーと対処法
エラー内容 原因 対処法
named: unexpected token near ... 構文ミス(セミコロン ; 忘れ、ブロックのカッコ {} 閉じ忘れ) 行末にセミコロンがあるか、{}の整合性確認
named: zone ...: NS record ... not found NSレコードがゾーンファイルにない or 不正 ゾーンファイルにNSと対応するAレコードを追加
permission denied namedがゾーンファイルにアクセスできない ファイルのパーミッション、SELinux、AppArmorなど確認
file not found fileで指定したゾーンファイルが存在しない パスのスペルや存在確認
bind: address already in use すでにポート53が使われている 他のDNSサービス(systemd-resolvedなど)を停止
named: no working nameservers found in /etc/resolv.conf 再帰問い合わせ用のフォワーダーが不通 forwarders で指定したDNSが正しく動作しているか確認
🧪 トラブルシューティング手順

  1. 設定チェック
    named-checkconf /etc/bind/named.conf
  2. ゾーンファイルチェック
    named-checkzone example.local /etc/bind/db.example.local
  3. サービス再起動
    sudo systemctl restart bind9
  4. ログ確認
    sudo journalctl -u bind9
    📁 ディレクトリ構成例(Ubuntu/Debian)
    /etc/bind/
    ├── named.conf
    ├── named.conf.options
    ├── named.conf.local
    ├── db.example.local
    └── db.127
    named.conf は以下のように他ファイルをインクルードすることが多いです:
    include "/etc/bind/named.conf.options";
    include "/etc/bind/named.conf.local";
    🛡 セキュリティの注意点
    ゾーン更新が不要な場合、allow-update { none; }; を必ず指定(不正更新防止)
    外部に公開するDNSでは allow-recursion や listen-on を適切に制限
    未使用のゾーンや zone "." を無効化する場合は注意(root DNSに関係)
    📌 Dockerで動かす場合の注意
    コンテナ外からアクセスするなら -p 53:53/udp を忘れずに
    ゾーンファイル・設定ファイルは -v でマウントして管理
    ✳️ まとめ:構成ポイント
    named.conf でゾーン定義・基本設定
    ゾーンファイルでDNSレコード管理
    権限/構文/依存関係の整合性が重要
    named-checkconf / named-checkzone で事前に検証
    もしあなたの環境に合わせた named.conf の例(例:フォワーダーDNSとしてだけ使う、内部専用DNSなど)を作成したい場合は、以下の情報を教えていただければカスタマイズも可能です:
    利用用途(例:内部ネットワークだけ、外部向け、再帰DNS)
    使用しているOS(例:Ubuntu 20.04, Alpineなど)
    ゾーンの数やFQDNの例
    必要であれば、それに応じたテンプレートも用意します。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?