# 2.21. DNSの設定

プロキシDNSおよび、DNSリゾルバ機能をサポートしています。

## 2.21.1. プロキシDNSの設定

プロキシDNSは、クライアント端末からの名前解決要求をルータが中継して代理応答する機能です。クライアント端末からの名前解決要求はUDPとTCPに、ルータからのDNSサーバーへの問い合わせはUDPのみに対応しています。512byteを超える応答パケットを中継可能です。

図 2.21.1 プロキシDNSの構成

以下にプロキシDNS登録のための設定および基本的な動作を説明します。

- グローバルコンフィグモード

  項目 | 説明
  --- | ---
  proxy-dns server | DNSサーバーのアドレス指定と優先度設定
  proxy-dns interface | IPCP/DHCPで取得したDNSサーバーの優先度設定
  proxy-dns ip/ipv6 max-sessions | 最大セッション数の設定
  proxy-dns ip/ipv6 query-interval | DNS要求パケット送信間隔の設定
  proxy-dns ip/ipv6 query-response | DNS応答パケット待ち時間の設定
  proxy-dns ip/ipv6 query-retries | DNS要求パケット再送回数
  proxy-dns ip/ipv6 access-list | DNSリゾルバのアクセス制限
  proxy-dns ip/ipv6 request | DNS要求パケット転送方法の設定

- インタフェースコンフィグモード

  項目 | 説明
  --- | ---
  proxy-dns ip/ipv6 enable | プロキシDNSの有効設定

- 表示コマンド

  項目 | 説明
  --- | ---
  show proxy-dns | プロキシDNS設定状態の表示

  リスト 2.21.1 設定例：プロキシDNSとDHCPを組み合わせた設定

      ip dhcp profile ge0.0
        assignable-range 192.168.0.1 192.168.0.10
        dns-server 192.168.0.254
      !
      interface GigaEthernet0.0
        ip address 192.168.0.254/24
        ip dhcp enable
        ip dhcp binding ge0.0
        proxy-dns ip enable
        no shutdown
      !
      interface GigaEthernet1.0
        ip address dhcp receive-default
        no shutdown

### 2.21.1.1. DNSサーバーの優先度の設定

複数のサーバーを登録した場合に優先度を設定することができます。優先度は、固定設定ではサーバー単位、動的設定では取得するインタフェース単位に設定することができ、数値の大きい方を優先します。

優先度が同じ場合は以下の順で優先されます。

- 固定的に登録したサーバーは動的に取得したサーバーより優先されます。

- 先に設定（取得）したサーバーが優先されます。

  リスト 2.21.2 設定例

      proxy-dns server 172.16.1.10 priority 50
      proxy-dns server 172.16.1.20 priority 40
      proxy-dns interface GigaEthernet0.0 priority 60
      proxy-dns interface GigaEthernet1.0 ignore

      この場合の優先度は以下のとおりとなります。
        (1)GigaEthernet0.0から取得したDNSサーバー
        (2)172.16.1.10
        (3)172.16.1.20

IPv4リゾルバからの要求、またはIPv6リゾルバからの要求を、IPv4サーバー、IPv6サーバーどちらのサーバーにもプロキシすることができます。IPv4サーバー、IPv6サーバーが混在している場合でも、サーバーの優先度にしたがって問い合わせを行います。同じ優先度の場合は、リゾルバと同じプロトコルのサーバーが優先されます。

### 2.21.1.2. DNSサーバーへの要求／応答の設定

DNSサーバーへの要求の応答時間、再送間隔、再送回数を設定することができます。

図 2.21.2 DNSのシーケンス

> リスト 2.21.3 設定例：送信回数3回、送信間隔2秒、応答時間20秒に設定

>     proxy-dns ip query-response 20
>     proxy-dns ip query-retries 3
>     proxy-dns ip query-interval 2
>     proxy-dns server 172.16.1.10

再送間隔の時間にDNSサーバーから応答がない場合再送を行います。複数のDNSサーバーが存在する場合は、次のDNSサーバーへ要求を送信します。設定した再送回数の送信を行い、次の再送周期を過ぎても応答がない場合、タイムアウトとなります。

応答時間を設定した場合、最初の送信から設定した応答時間を過ぎてもDNSサーバーから応答がない場合は、再送回数、再送間隔の時間が残っていてもタイムアウトとなります。先に再送によるタイムアウトが発生した場合は、その時点でタイムアウトとなり、応答時間は無視されます。

DNSサーバーからFailure受信時、複数のDNSサーバーが存在する場合は、再送間隔を待たずに次のDNSサーバーへ送信を行います。

### 2.21.1.3. DNSリゾルバのアクセス制限

プロキシするDNSリゾルバのアクセス制限を行うことができます。

> リスト 2.21.4 設定例：192.168.0.0/24からの要求のみ許可

>     ip access-list resolver-acl permit ip src 192.168.0.0/24 dest any
>     !
>     proxy-dns ip access-list resolver-acl
>     proxy-dns server 10.0.0.1
>     !
>     interface GigaEthernet1.0
>       proxy-dns ip enable

### 2.21.1.4. DNS問い合わせ出力指定

プロキシDNS、DNSリゾルバともにIPv4のDNSサーバーへの問い合わせを指定したインタフェースから送信できます。インタフェースを指定する場合は「ip name-server」、「proxy-dns server」コマンドにオプションをつけて設定を行ってください。

なお、IPCP/DHCPで動的に取得したDNSサーバーへの問い合わせは、取得したインタフェースから送信されます（プロキシDNSも同様）。

## 2.21.2. DNSリゾルバの設定

DNSリゾルバは、DNSサーバーへDNS情報取得要求を出し、登録されているサーバーからDNS情報を取得する機能です。IPv4, IPv6ともに利用可能です。

DNSリゾルバは、ping, ping6, traceroute, traceroute6, telnet, ssh, nslookupで使用することができます。EDNS0と512byte以上の応答をサポートしています。TCPでの問い合わせはサポートしておりません。

図 2.21.3 DNSリゾルバの構成

DNSサーバーはDHCPv4やIPCP、DHCPv6-PDで自動取得されたものを使用しますが、自動で取得しない場合は以下の設定を行います。

- グローバルコンフィグモード

  項目 | 説明
  --- | ---
  ip/ipv6 name-server | DNSのIPv4/IPv6アドレスを固定的に設定
  dns transport-priority | DNS問い合わせのIPv4/IPv6優先設定

  リスト 2.21.5 設定例

      ip name-server 172.16.1.10
      ip name-server 172.16.1.20
      !
      interface GigaEthernet0.0
        ip address 192.168.0.254/24
        no shutdown
      !
      interface GigaEthernet1.0
        ip address 172.16.1.1/24
        no shutdown

DNSサーバーを複数設定している場合、設定順に問い合わせを行います。

IPv4とIPv6のどちらを優先して問い合わせるかをdns transport-priorityコマンドで設定できます。それぞれにおけるDNSの問い合わせ順番は以下となります。

- IPv4優先（dns transport-priority ip）の場合【デフォルト設定】

  - 固定で設定したIPv4のDNSサーバー（登録順）

  - 固定で設定したIPv6のDNSサーバー（登録順）

  - DHCPv4、IPCPで学習したDNSサーバー（学習順）

  - DHCPv6-PDで学習したDNSサーバー（学習順）

- IPv6優先（dns transport-priority ipv6）の場合

  - 固定で設定したIPv6のDNSサーバー（登録順）

  - 固定で設定したIPv4のDNSサーバー（登録順）

  - DHCPv6-PDで学習したDNSサーバー（学習順）

  - DHCPv4、IPCPで学習したDNSサーバー（学習順）

なお、一部の機能では、outgoing-interface（パケットの送信インタフェース）を設定できます。設定した場合、その機能におけるDNS問い合わせは、設定したインタフェースで学習したDNSサーバーを最優先に行います。outgoing-interfaceが存在しない機能に関しては上記の問い合わせ順にしたがいます。

下記がoutgoing-interface対応機能です。

> 機能 | コマンド
> --- | ---
> IKEv2 | ikev2 outgoing-interface
> NHRP | nhrp nhs [IPv4アドレス] nbma [ドメイン名] ipv4/ipv6
> NetMeister | nm outgoing-interface
> Tunnel | tunnel outgoing-interface
> ダイナミックDNS | outgoing-interface

## 2.21.3. FQDN指定対応

指定したFQDNの名前解決を行い、対応するアドレスを使用することができます。

FQDNに対して定期的に名前解決を行い、対応するアドレス情報の更新を行います。

対応している機能は以下になります。

- IKEv1/IPsec

  - ike policyのピア指定

  - ipsec auto-mapのピア指定

- IKEv2

  - IKEv2のピア指定（ikev2 peer-fqdn-ipv4/ikev2 peer-fqdn-ipv6）

- Tunnel

  - 宛先アドレス

各機能から要求時、および定期的にFQDNの名前解決を行います。名前解決した情報はFQDNデータベースに記録されます。名前解決が一度も成功していない状態では、FQDNに対応したアドレスが分からないため、FQDNを使用した通信等を行うことができません。一度名前解決が成功した後は、定期的な解決に失敗した場合でも、解決済みのアドレスを使用し続けます。

定期的な更新については、更新周期とリトライ回数、タイムアウト時間を設定できます。一度も名前解決が成功していない時の名前解決周期と一度名前解決が成功した後の名前解決周期は別の値を設定することができます。複数サーバー設定時は、タイムアウト時間をサーバー台数分で等分した間隔で名前解決を行います。

設定は以下のとおりです。

- グローバルコンフィグモード

  項目 | 説明
  --- | ---
  dns fqdn-database initial-interval | アドレス更新周期（名前解決前）
  dns fqdn-database update-interval | アドレス更新周期（名前解決後）
  dns fqdn-database resolver retry | 名前解決のリトライ回数
  dns fqdn-database resolver timeout | 名前解決のタイムアウト時間

- 表示コマンド

  項目 | 説明
  --- | ---
  show dns fqdn-database | FQDNデータベースの表示

  リスト 2.21.6 設定例1

      一度も名前解決していない時の更新周期を50秒、
      名前解決後の更新周期を24時間（86400秒）に設定

      dns fqdn-database initial-interval 50
      dns fqdn-database update-interval 86400

  リスト 2.21.7 設定例2

      名前解決できない場合、20秒間隔で3回までリトライを行う
      （初回を含めて4回送信を行います）

      dns fqdn-database resolver retry count 3
      dns fqdn-database resolver timeout 20

      上記設定でサーバーが2台の場合、10秒（20秒の1/2）間応答がない場合、
      次のサーバーに送信します。

## 2.21.4. DNSサーバーアクセス振り分け

指定したドメインの名前解決サーバーのアクセスを指定することができます。

複数のISPを使い分ける場合などに指定したドメインを利用したいISPのDNSサーバーへのアクセスの振り分けを行います。

図 2.21.4 DNSサーバーアクセス振り分けの構成

> リスト 2.21.8 設定例

>     example.comドメインへのDNS問い合わせをISP2のDNSサーバーへ、
>     それ以外のDNS問い合わせをISP1のDNSサーバーへ行う。

>     ip route default GigaEthernet0.0
>     ip route 172.16.1.0/24 GigaEthernet1.0
>     proxy-dns interface GigaEthernet1.0 url-list isp2 priority 200
>     !
>     url-list isp2 permit domain *example.com
>     !
>     ip dhcp profile gigaethernet2.0
>       assignable-range 192.168.0.1 192.168.0.10
>       dns-server 192.168.0.254
>     !
>     interface GigaEthernet0.0
>       ip address 10.1.1.1/24
>       no shutdown
>     !
>     interface GigaEthernet1.0
>       ip address 172.16.1.1/24
>       no shutdown
>     !
>     interface GigaEthernet2.0
>       ip address 192.168.0.254/24
>       ip dhcp enable
>       ip dhcp binding gigaethernet2.0
>       proxy-dns ip enable
>       no shutdown

## 2.21.5. ローカルDNSサーバー

クライアント端末から指定したドメインの名前解決要求を、外部サーバーにアクセスする代わりにルータが指定したIPアドレスレコードで名前解決応答を行うことができます。

ルータが名前解決要求を受信し、ルータが応答するか外部サーバーに問い合わせるかを振り分けるため、プロキシDNSの併用が必要となります。

> リスト 2.21.9 設定例

>     example.comドメインへのDNS問い合わせをルータがAレコード（192.168.0.200）で応答し、
>     それ以外のDNS問い合わせを外部DNSサーバーへ行う。

>     ip route default GigaEthernet0.0
>     !
>     dns host example.com ip 192.168.0.200
>     !
>     ip dhcp profile gigaethernet2.0
>       assignable-range 192.168.0.1 192.168.0.10
>       dns-server 192.168.0.254
>     !
>     interface GigaEthernet0.0
>       ip address 10.1.1.1/24
>       no shutdown
>     !
>     interface GigaEthernet2.0
>       ip address 192.168.0.254/24
>       ip dhcp enable
>       ip dhcp binding gigaethernet2.0
>       proxy-dns ip enable
>       no shutdown

注釈

- IPv4アドレスでの登録レコードは、名前解決要求のQuery TypeがAまたはANYの場合に適用します。

- IPv6アドレスでの登録レコードは、名前解決要求のQuery TypeがAAAAまたはANYの場合に適用します。それ以外のQuery Typeの場合は、外部サーバーへ問い合わせを行います。