手当たり次第に書くんだ

飽きっぽいのは本能

VyOS DNS forwarding 設定 – 内部ネットワークの名前解決を設計する

VyOS の DNS forwarding は、内部ネットワークの端末から見た名前解決の入口をルーター側に置くための機能です。端末には VyOS の内部向けアドレスを DNS サーバーとして配り、VyOS が上流 DNS や内部 DNS サーバーへ問い合わせを転送します。

DNS forwarding では、単に上流 DNS を指定するだけでは足りません。どのアドレスで待ち受けるか、どのネットワークから問い合わせを受けるか、内部ドメインをどこへ転送するか、上流へどの送信元で問い合わせるかを分けて考えます。

この記事では、VyOS 1.5 系で読むことを前提に、DNS forwarding を内部ネットワークの名前解決基盤として使う場合の設計、設定例、確認手順をまとめます。ドメイン名と IP アドレスは公開用の例です。

この記事の結論

  • DNS forwarding は内部端末向けの名前解決入口である
  • listen-address と allow-from を分けて設定する
  • 内部ドメインだけ内部 DNS へ転送する構成にすると責務を分けやすい
  • DHCP で配る DNS サーバーと VyOS の待受アドレスを合わせる
  • DNS の問題は Firewall、経路、NTP、上流 DNS も含めて確認する

DNS forwarding の役割

DNS forwarding は、VyOS 自身が内部端末から DNS 問い合わせを受け、必要に応じて上流 DNS や内部 DNS サーバーへ転送する構成です。VyOS がすべての DNS ゾーンを持つのではなく、内部端末から見た問い合わせ先を集約する役割として扱います。

要素役割見ること
listen-addressDNS を待ち受けるアドレス内部端末から到達できるか
allow-from問い合わせ元の許可範囲外部や不要なセグメントを許可していないか
name-server通常問い合わせの上流 DNSIPv4 / IPv6 の到達性
domain forwarding特定ドメインの転送先内部 DNS へ向けるドメイン
source-address上流へ問い合わせる送信元Firewall や経路制御との整合

待ち受けアドレスと許可範囲

listen-address は VyOS が DNS 問い合わせを受けるアドレスです。allow-from は問い合わせを受け付ける送信元ネットワークです。この 2 つを分けることで、意図しないネットワークからの問い合わせを避けやすくなります。

configure
set service dns forwarding listen-address '10.0.255.53'
set service dns forwarding listen-address 'fd00::53'
set service dns forwarding allow-from '10.0.0.0/8'
set service dns forwarding allow-from '172.16.0.0/12'
set service dns forwarding allow-from '192.168.0.0/16'
set service dns forwarding allow-from 'fd00::/8'
commit
save

DNS forwarding は内部向けサービスとして扱います。外部から広く問い合わせを受ける構成にすると、意図しない DNS リレーや負荷の原因になります。Firewall だけでなく、DNS forwarding 側でも問い合わせ元を絞ります。

内部ドメインだけ転送する

内部ドメインを使っている場合、すべての問い合わせを外部 DNS へ流すのではなく、特定ドメインだけ内部 DNS サーバーへ転送します。これにより、内部名と外部名の解決先を分けられます。

configure
set service dns forwarding domain core.example.internal name-server '10.0.10.53'
set service dns forwarding domain core.example.internal name-server 'fd00::10:53'
set service dns forwarding domain mgmt.example.internal name-server '10.0.10.53'
set service dns forwarding domain mgmt.example.internal name-server 'fd00::10:53'
commit
save

この構成では、VyOS は内部端末に対する DNS の入口であり、内部ドメインの権威サーバーではありません。内部ドメインのゾーン管理は別の内部 DNS サーバーに任せると、役割が分かりやすくなります。

上流 DNS と送信元アドレス

通常のインターネット向け名前解決は、上流 DNS へ転送します。複数の上流 DNS を指定する場合も、どの送信元アドレスで問い合わせるかを明示しておくと、Firewall や経路制御と合わせて追いやすくなります。

configure
set service dns forwarding name-server '203.0.113.53'
set service dns forwarding name-server '2001:db8::53'
set service dns forwarding source-address '10.0.255.53'
set service dns forwarding source-address 'fd00::53'
set service dns forwarding dnssec 'validate'
commit
save

DNSSEC 検証を有効にする場合、時刻同期や上流 DNS との疎通も前提になります。DNS の問題に見えて、実際には NTP、Firewall、経路制御、上流 DNS 側の応答が原因になることもあります。

DHCP と組み合わせる

内部端末へ VyOS の DNS forwarding を使わせる場合、DHCP で配る name-server も合わせます。DHCP はアドレス配布、DNS forwarding は名前解決の入口です。両方を合わせることで、端末側の設定を単純にできます。

configure
set service dhcp-server shared-network-name INSIDE option name-server '10.0.255.53'
set service dhcp-server shared-network-name INSIDE option ntp-server '10.0.255.123'
commit
save

IPv6 の端末へ DNS サーバーを配る場合は、SLAAC、RA、DHCPv6 のどれで通知するかも確認します。IPv4 DHCP だけを見ていると、IPv6 側の名前解決だけ別経路になっていることがあります。

Firewall で守る

DNS forwarding 側の allow-from だけでなく、Firewall でも内部側からの DNS 問い合わせだけを許可します。外部側から VyOS の DNS へ到達できる構成にしないことが基本です。

configure
set firewall ipv4 name TRUST-LOCAL rule 530 action 'accept'
set firewall ipv4 name TRUST-LOCAL rule 530 protocol 'tcp_udp'
set firewall ipv4 name TRUST-LOCAL rule 530 destination port '53'
set firewall ipv6 name TRUST-LOCAL-V6 rule 530 action 'accept'
set firewall ipv6 name TRUST-LOCAL-V6 rule 530 protocol 'tcp_udp'
set firewall ipv6 name TRUST-LOCAL-V6 rule 530 destination port '53'
commit
save

確認する

確認では、VyOS が DNS を待ち受けていること、内部端末から問い合わせられること、内部ドメインと外部ドメインの転送先が意図通りであることを分けて見ます。

show configuration commands | match 'service dns forwarding'
show dns forwarding statistics
nslookup host.core.example.internal 10.0.255.53
nslookup www.example.com 10.0.255.53

内部名だけ失敗する場合は domain forwarding、外部名だけ失敗する場合は上流 DNS と経路、どちらも失敗する場合は listen-address、allow-from、Firewall を確認します。

よくあるつまずき

症状見る場所考え方
内部端末から問い合わせられないlisten-address / allow-from待受と許可元を分けて確認する
内部ドメインだけ解決できないdomain forwarding対象ドメインと内部 DNS の到達性を見る
外部ドメインだけ解決できない上流 DNS / 経路 / FirewallVyOS から上流へ出られるか確認する
DNSSEC 有効時だけ失敗するNTP / 上流 DNS時刻同期と検証応答を見る
IPv6 端末だけ別の挙動になるRA / DHCPv6IPv6 側の DNS 通知を確認する

まとめ

VyOS の DNS forwarding は、内部ネットワークの名前解決をルーター側で受けるための機能です。待受アドレス、許可範囲、内部ドメインの転送先、上流 DNS、送信元アドレス、DHCP との連携を合わせて考えると、名前解決の経路が読みやすくなります。

DNS は障害時に原因が見えにくい領域です。VyOS は問い合わせの入口、内部 DNS はゾーン管理、上流 DNS は外部名解決という役割に分けることで、後から切り分けやすくなります。

関連する記事
VyOS DNS forwarding 設定 – 内部ネットワークの名前解決を設計する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る