
内部DNS障害対策
台風10号は中心地から遠く離れた神奈川県県央部にも大きな爪痕を残しました。
8月29日の夜から雨が降り続け、相当な雨量が24時間降り続けました。 このため国道246号線の善波トンネル、小田急小田原線が不通になるなどあまり聞いたことの無い災害も発生したようです。 幸い少し高台にある我が家は被災することは有りませんでしたが、近所の道路も冠水で通行止めになっているところもありました。
雨はその後も降り続き、8月31日夜、近所の送電線への落雷があったようで、我が家で1分ほど停電が発生しました。 通電後にサーバーは自動的に立ち上がり回復しましたが、その後ネットワークの障害が発生しました。 外からのWebサーバーへのアクセスは可能であることがわかりましたが、宅内で自分のサーバーにアクセスすることができなくなりました。 この問題の解決のために週末24時間以上かかり、完全に嵌ってしまいました。 同じ問題に悩む人もいるかもしれませんので共有しておきます。
LANの外からウェブサーバーもメールサーバーもアクセスできるが、LAN内部から見れないということで、内部DNSの不具合であることは明白なのでDNSの再立ち上げを行いましたがNG。 何も変更していませんのでDNSのConfigファイルにも特に問題はありません。 サーバー自体を再立ち上げしても問題は解決しませんでした。
Windows PCでターミナルシェル(DOS画面)から、nslookupで名前解決を試してみましたが、「サイトを見つけられません」というエラーが返り、LAN内の名前解決も、LAN外の名前解決もできないことがわかりました。
サーバー自体のターミナルからの名前解決はLAN内、LAN外ともに正しく動作しています。
つまりLAN内に存在しているWindows パソコンやスマホなど他のデバイスからDNSサーバーへのアクセスができていないという現象です。 Pingも通っていますし物理的な接続は全く問題ありません。
ここにきて、もしかしたらファイヤーウォールでLAN内のデバイスからDNSへのアクセスが拒否されているのかという心配も出てきました。さらにWiFiのアクセスポイントの問題かも知れないなどと、どんどん懸念される点が広がります。
DNSを外部のDNSに指定すればインターネットにアクセスできますが、これではLAN内部のサーバーへのアクセスが全くできません。
24時間近く悪戦苦闘し、何とか問題解決することができました。
DNSのConfigファイルであるnamed.confの設定で 「localnets」という表記が問題であることがわかりました。 localnetsはサーバーの繋がるLANのネットワークを意味していますが、これが認識されていないようです。 この「localnets」という表記を実際のLAN内のネットワークアドレス「192.168.1.0/24」という表記に変更することで問題解決できました。 結論から言えば、この一言なのですが、自分でもよくここまでたどり着けたと思います。 落雷停電の前は「localnets」という表記でも全く問題なく動作していましたので疑問は残ります。 一つだけ、もしかしたらと思うのは落雷停電の直前にAlmaLinuxのカーネルのアップデートがあったようです。
停電前は kernel-5.14.0-427.28.1.ek\k9_4.x86_64
新しいものは kernel-5.14.0-427.31.1.ek\k9_4.x86_64
停電前にカーネルがアップデートされても、新しいカーネルに切り替わるにはサーバーを再立ち上げしないと適用されませんので、そのまま古いカーネルのままで動作を続けていて、停電の後、再度立ち上がった時に新しいカーネルに切り替わります。 このカーネルのアップデートが何か影響しているのかも知れません。 詳細は不明ですが、最新版のカーネルではDNSのnamed.confに「localnets」という表記が使えないことは事実のようです。 localhostという表記は使用可能です。
参考まで私のnamed.confを下記に示しておきます。
21,22,23行目と64,65行目がそれにあたります。 もともとは「192.168.1.0/24」の部分が「localnets」になっており、それで全く問題なく動いていました。
なお、74行目にある /etc/named/named.kawauchi.homeip.mydns.jp.zone というファイルはこのあたりを参考に自分で作る必要があります。
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { #listen-on port 53 { 127.0.0.1; }; #listen-on-v6 port 53 { ::1; }; version "unknown"; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-transfer { none; }; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; #allow-query { localhost; }; allow-query { localhost; 192.168.1.0/24; }; allow-recursion { localhost; 192.168.1.0/24; }; allow-query-cache { localhost; 192.168.1.0/24; }; forwarders{ 8.8.8.8; 8.8.4.4; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; geoip-directory "/usr/share/GeoIP"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ include "/etc/crypto-policies/back-ends/bind.config"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; # print-time yes; # print-severity yes; # print-category yes; }; category lame-servers { null; }; }; # 内部向け設定開始 view "internal" { # match-clients { localnets; }; match-clients { localhost; 192.168.1.0/24; }; match-destinations { 192.168.1.0/24; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; include "/etc/named/named.kawauchi.homeip.mydns.jp.zone"; }; # 内部向け設定終了
同じことに悩める方のために、次のカーネルのアップデートでこのあたりが改善されることを祈ります。
Enigmaとの闘いは続く