NAT46/DNS46 機能

$Date: 2021/04/20 06:24:37 $


概要

NAT46/DNS46 機能とは、IPv4 パケットを IPv6 パケットに変換して転送する機能です。

本来、IP バージョンが異なるネットワークにあるホスト同士では、通信ができません。しかし、本機能を利用すると、LAN が IPv4 ネットワーク、WAN が IPv6 ネットワークという構成において、LAN にある PC から WAN にあるサーバーへのアクセスが可能になります。

すでに IPv4 アドレスで構築された LAN を変更することなく、IPv6 アドレスで提供されているサービスを利用できます。

以降、特に断りがない限り以下の構成で説明します。

概要

注意事項


対応機種とファームウェアリビジョン

ヤマハ RT シリーズでは、以下の機種およびファームウェアで、NAT46/DNS46 機能をサポートしています。

機種 ファームウェア
RTX830 Rev.15.02.20 以降

用語定義

NAT46 エントリー

IPv6 ネットワークに存在するホストの IPv6 アドレスと、変換用にプールした IPv4 アドレスを対応づけた一つの組。

NAT46 テーブル

NAT46 エントリーをキャッシュし、管理するテーブル。


詳細

動作の流れ

本機能は、NAT46 機能と DNS46 機能で構成されます。動作の流れは以下のとおりです。

  1. PC は、DNS でサーバーの名前解決を行います。
    ルーターは、DNS46 機能を用いて DNS サーバーから受け取った IPv6 アドレスを IPv4 アドレスに変換します。
  2. PC は、名前解決で取得した IPv4 アドレス宛てに送信します。
    ルーターは、NAT46 機能で IPv4 パケットを IPv6 パケットに変換します。

DNS46 機能による名前解決

DNS46 機能は、AAAA レコードを A レコードに変換する機能です。動作は以下のとおりです。

  1. DNS46 機能は、PC から受け取った A レコードの問い合わせを AAAA レコードの問い合わせに変換して DNS サーバーに転送します。
  2. DNS46 機能は、DNS サーバーから AAAA レコードを受け取ります。
  3. DNS46 機能は、AAAA レコードから取得した IPv6 アドレスを、nat46 ip address pool コマンドで設定した IPv4 アドレスの 1 つと対応づけます。
  4. 対応づけた IPv4 アドレスを A レコードとして PC に返します。

DNS46 機能は、対応づけた IPv4 アドレスを A レコードとして DNS キャッシュに登録します。また、対応づけた IPv4 アドレス宛ての通信が発生したら、NAT46 機能によって、NAT46 テーブルにも登録します。

PTR レコードの問い合わせを中継する場合は、問い合わせる IPv4 アドレスを IPv6 アドレスに変換します。変換後の IPv6 アドレスには、A レコードを AAAA レコードに変換したときに、IPv4 アドレスに対応づけられたものを使用します。MX レコードなどの IP アドレスを含まないレコードの問い合わせを行う場合は、そのまま転送します。

フロー図

フロー図

NAT46 機能によるパケットの変換

NAT46 機能は、IPv4 パケットを IPv6 パケットに変換する機能です。動作は以下のとおりです。

  1. NAT46 機能は、PC から受け取った IPv4 パケットを IPv6 パケットに変換します。
  2. 1. で変換したパケットを、IPv6 ホストに転送します。

NAT46 機能では、IP ヘッダーを変換するインターフェースとしてトンネルインターフェースを使用します。

フロー図

フロー図

IP フィルターの動作

NAT46 機能を利用した転送において、IP フィルターは以下の順に機能します。

IP フィルターの動作

WAN のホストに IPv6 アドレス、LAN のホストに IPv4 アドレスが設定されている構成にて、以下のように IP フィルターを設定するとそれぞれのホストが持つ本来の IP アドレスを指定できます。

LAN から WAN へ転送するパケットに対して、送信元アドレス、宛先アドレスの両方を指定して IP フィルターを設定したい場合は、以下のように指定できます。

NAT46 変換した IPv6 アドレス

NAT46 機能では、WAN のIPv6 プレフィックス ( 96bit ) と LAN の IPv4 アドレス ( 32bit ) を結合して生成した IPv6 アドレスを使用します。
このため、プレフィックス長が /96 の IPv6 プレフィックスを使用する必要があります。
ルーターでは、RA または DHCPv6 で受け取った IPv6 プレフィックスから /96 の範囲を割り当てるように設定してください。

NAT46 変換した IPv6 アドレスを IPv6 フィルターなどで設定する場合は、以下のように IPv6 プレフィックスに続けて IPv4 アドレスを指定できます。

IPv6 アドレスの形式
   ( IPv6 プレフィックス ):( IPv4 アドレス )

例.
   IPv6 プレフィックス  2001:db8:abcd::/96
   IPv4 アドレス        192.168.100.2

   ipv6 filter 1 pass 2001:db8:abcd::192.168.100.2

なお、show config コマンドやログの表示などで、NAT46 変換した IPv6 アドレスを表示すると 8bit ごと ( ドットの区切りごと ) に 16 進数の 2 桁で表示されます。

ipv6 filter 1 pass 2001:db8:abcd::c0a8:6402
                          ↑    |    ↑
                          |         16 進数で表示した IPv4 アドレス ( 192.168.100.2 )
                         IPv6 プレフィックス ( 2001:db8:abcd::/96 )
     
   10 進数   16 進数
   192    -> c0
   168    -> a8
   100    -> 64
   2      -> 02

NAT46/DNS46 機能の設定例

NAT46/DNS46 機能の設定例を示します。ルーター全体の設定は、「設定例」を参照してください。

構成図

構成図

CONFIG

ip route 172.16.0.0/24 gateway tunnel 1 ------------ a
ipv6 prefix 1 ra-prefix@lan2::1:0:1/96 ------------- b
ipv6 lan2 address ra-prefix@lan2::1/64
ipv6 lan2 dhcp service client ir=on
tunnel select 1
  tunnel translation nat46 ------------------------- c
  nat46 ip address pool 172.16.0.2-172.16.0.254 ---- d
  nat46 ipv6 prefix 1 ------------------------------ e
  ip tunnel mtu 1480 ------------------------------- f
  ipv6 tunnel mtu 1500 ----------------------------- f
  tunnel enable 1
dns server dhcp lan2 nat46=1 ----------------------- g
  1. NAT46 機能で処理するパケットの経路として、トンネルインターフェースを設定します。
  2. IPv6 プレフィックスを設定します。LAN1 から受信した IPv4 送信元アドレスを IPv6 送信元アドレスに変換する際に使用します。IPv6 プレフィックスのプレフィックス長は、/96 にする必要があります。ここでは、RA で受け取った /64 のプレフィックスから、/96 の範囲を割り当てています。
  3. トンネルインターフェースを NAT46 変換に使用する設定をします。
  4. DNS サーバーから得た IPv6 アドレスと対応づける IPv4 アドレスを設定します。
  5. b. で設定した IPv6 プレフィックスを NAT46 機能で使用する設定をします。
  6. トンネルインターフェースの MTU を設定します。
  7. DNS46 変換に用いる DNS サーバーを設定します。

トンネル情報

NAT46 機能を設定したトンネルインターフェースの情報は、show status tunnel コマンドで確認します。show status tunnel コマンドでは、以下の情報が表示されます。

# トンネルUP時
show status tunnel
TUNNEL[1]:
説明:
  インターフェースの種類:NAT46
  トンネルインタフェースは接続されています
  開始: 2020/07/13 13:22:07
  通信時間: 38分31秒
  受信: (IPv6->IPv4) 0 パケット [0 オクテット]
  送信: (IPv4->IPv6) 0 パケット [0 オクテット]
  IPv6プレフィックス
    2001:db8:abcd::/96
  IPv4アドレスの範囲
    172.16.0.2-172.16.0.254
    10個使用中
  有効なNAT46エントリーの個数
    動的エントリー : 15
    静的エントリー : 1
# トンネルDOWN時(UPしたことがない場合)
show status tunnel
TUNNEL[1]:
説明:
  インターフェースの種類:NAT46
  トンネルインタフェースは一度も接続されていません
# トンネルDOWN時(UPしたことがある場合)
show status tunnel
TUNNEL[1]:
説明:
  インターフェースの種類:NAT46
  トンネルインタフェースは接続されていません
  開始: 2020/07/13 13:22:07  終了: 2020/07/13 14:00:38
  通信時間: 38分31秒
  受信: (IPv6->IPv4) 0 パケット [0 オクテット]
  送信: (IPv4->IPv6) 0 パケット [0 オクテット]

NAT46 エントリーの情報は、show status nat46 table コマンドで確認します。show status nat46 table コマンドでは、以下の情報が表示されます。

show status nat46 table 
IPv6 プレフィックス
  2001:db8:abcd::/96
IPv4 アドレスの範囲
  172.16.0.2-172.16.0.254
有効なNAT46エントリーの個数
  動的エントリー : 15
  静的エントリー : 1

-------------------------------- 静的エントリー --------------------------------
No.   ホスト   IPv4 アドレス   IPv6 アドレス                           TTL(秒)
1     ローカル 192.168.100.2   2001:db8:abcd::c0a8:6402                100
      リモート 172.16.0.1      2001:db8:1234::1

-------------------------------- 動的エントリー --------------------------------
No.   ホスト   IPv4 アドレス   IPv6 アドレス                           TTL(秒)
1     ローカル 192.168.100.2   2001:db8:abcd::c0a8:6402                100
      リモート 172.16.0.2      2001:db8:1234::2
2     ローカル 192.168.100.2   2001:db8:abcd::c0a8:6402                50
      リモート 172.16.0.3      2001:db8:1234::3
3     ローカル 192.168.100.3   2001:db8:abcd::c0a8:6403                20
      リモート 172.16.0.3      2001:db8:1234::3
  :               :                              :                      :

設定・操作方法

コマンド

設定例


SYSLOGメッセージ一覧

本機能において出力されるSYSLOGメッセージの一覧を以下に示します。

レベル出力メッセージ意味
DEBUG[NAT46] Translate error (IPv4 to IPv6). The packet need to fragment, could not fragment due to DF bit (mtu=XXX).NAT46 変換 ( IPv4 アドレスから IPv6 アドレスへの変換 ) に失敗した。IP ヘッダーの DF ビットが原因でフラグメント化できなかった。
[NAT46] Translate error (IPv6 to IPv4). Segments left in the routing extension header is not 0.NAT46 変換 ( IPv6 アドレスから IPv4 アドレスへの変換 ) に失敗した。IPv6 ルーティングヘッダーの残りセグメントが 0 ではない。
[NAT46] Prefix is updated to PREFIX/PREFIX_LEN.NAT46 変換で使用する IPv6 プレフィックスが更新された。
[NAT46] IPv4 address is exhausted.NAT46 変換で使用する IPv4 アドレスプールを使い果たした。