最終回 NAT64でIPv6端末をIPv4サーバにつなげよう


A10ネットワークス株式会社
山村剛久
2012/5/29
これまでのIPv4アドレス在庫で「枯渇の日」を乗り切ったとしても、もう新たな割り当てはありません。この連載では、徐々に顕在化してくると思われるIPv4アドレス枯渇問題を乗り切り、段階的にIPv6対応を進めていく手助けとなるIPv6移行ソリューションを紹介します。(編集部)

一台二役を果たす「NAT64/DNS64」

 前回の記事では、SLB-PT(IPv6→IPv4)という手法を用いてIPv6端末からIPv4サーバにアクセスする方法を説明しました。意外と簡単にIPv4サーバをIPv6化できることを実感いただけたかと思います。

 ただSLB-PTの場合、IPv4サーバはSLB-PTをサポートしたロードバランサの配下に設置し、かつSLBにサーバのIPv4アドレスを設定しなければなりません。同時に、ロードバランサのVIPに設定するIPv6アドレスは、AAAAレコードとして設定する必要があります。こういった要因から、通信対象となるIPv4サーバも自組織の管理下に置く必要があります。

 では、自組織管理下のサーバではなく、「The Internet」そのものと通信したい場合はどうすればいいでしょうか。サーバの数は無数にあります。また、そのサーバもほとんどは他組織によって運営されており、アドレス自体が変わる可能性もあります。この場合は、SLB-PTで対応するには無理があります。

 このようなケースに適しているのが、NAT64/DNS64という手法です。「NAT64」はIPv6ネットワークとIPv4ネットワークの間に立ってNAT(IPv6→IPv4)を行い、同時に「DNS64」で、DNSによる名前解決に関するIPv4/IPv6の違いを吸収します。

 そこで今回も、A10ネットワークスの「AXシリーズ」を例に用い、NAT64/DNS64の実装方法について説明します。サンプルネットワーク構成は図1の通りです。図の左側がIPv6ネットワーク、右側がIPv4ネットワークと考えてください。

図1 サンプル構成図1

 図中の各構成要素の説明は、以下の通りです。

A: Ethernet18 / VLAN30 / IPv6:2001:db8:1:2::2/64 イントラネット側のAXインターフェイス(IPv6)
B: Ethernet17 / VLAN10 / IPv4:10.111.0.2 インターネット側のAXインターフェイス(IPv4)
C: Ethernet5 / VLAN20 / IPv4:10.20.20.2 / IPv6:2001:db8:1:1::2/64 DNSサーバ群へのAXインターフェイス(IPv4/IPv6)
D: 2001:db8:1:2::254 イントラネット側IPv6へのNextHopルータ(IPv6)
E: 10.111.0.254 インターネット側IPv4へのデフォルトルータ
NAT Pool F: 10.111.0.101-110&111-120 NAT64を行う際のIPv4プールアドレス群
NAT Pool G: 10.20.20.200-220 DNSサーバへアクセスする際のIPv4プールアドレス群
H: IPv6:2001:db8:1:1::22 IPv6 DNSサーバ
I: IPv4:10.20.20.22 IPv4 DNSサーバ
VIP J:2001:db8:1:2::100 DNS64を行う際にアクセスするVIP IPv6アドレス
K: 2001:db8:1:3::1 イントラネット内のIPv6端末
L: 10.20.20.23 Logサーバ1
M: 10.20.20.24 Logサーバ2

動作フロー

 では、図1の環境で、どのようにIPv6端末からIPv4サーバへのアクセスが可能になるのか、流れを追ってみましょう。

  1. IPv6端末はwww.example.comのアドレスを解決するため、IPv6パケットでDNSリクエストを送信します。www.example.comはIPv4サーバです。DNSクエリの送信先アドレスは、AXに設定されたIPv6 VIPです。

  2. AXは、AAAA(IPv6アドレスレコード)クエリをDNSサーバに送信します。DNSサーバはIPv6でもIPv4でも対応可能です。

  3. DNSサーバは、www.example.comのAAAAレコードを探します。

  4. www.example.comはIPv4サーバですから、AAAAレコードは存在しません。DNSクエリの結果は、「DNSアンサーがない」、または「エラー」になります。

  5. DNSサーバは、4.で受信したDNSレスポンスをAXに送信します。

  6. AXは、A(IPv4アドレスレコード) クエリをDNSサーバに送信します。

  7. DNSサーバは、www.example.comのAレコードを探します。

  8. www.example.comのAレコードが解決され、IPv4アドレス(ここでは192.168.0.5)が返ってきます。

  9. DNSサーバは、8.で受信したDNSレスポンスをAXに送信します。

  10. AXは、IPv4アドレスにIPv6プレフィックス(「64:ff9b::」、デフォルト)を付与し、さらにIPv4アドレス部分を16進数に変換し、「64:ff9b::c0a8:5」をIPv6端末に送信します。

  11. IPv6端末はwww.example.comに到達するために、宛先アドレス64:ff9b::c0a8:5にパケットを送信します。

  12. AXは、64:ff9b::c0a8:5宛のパケットを、IPv4アドレス192.168.0.5に変換し送信します。また、IPv4ネットワークへ出ていくパケットの送信元IPは、AXに設定されたIP NAT PoolのIPv4アドレスに置き換えられます。

  13. www.example.comは、AXに設定されたIP NAT PoolのIPv4アドレス宛にリプライのパケットを送信します。

  14. AXはセッションエントリを確認し、192.168.0.5からのパケットをIPv6にNAT変換して、IPv6端末へ送信します。

 このように、IPv6端末とIPv4サーバの間に立つAXが、DNSの名前解決を取り持ち、通信ステータスを保持してNATを行うことで、アクセスを可能にしています。

 さて、NAT64/DNS64を導入する場合も、前回紹介したSLB-PTと同様に、以下のような事柄について検討しておく必要があります。それぞれの対処方法に関しては、前回同様、次ページでお話ししたいと思います。

検討事項1:MTU(Maximum Transfer Unit)に関連する考慮
検討事項2:L7ヘッダやそのペイロード(データ部分)のリライト(書き換え)
検討事項3:IPv4←→IPv6間の変換ログの保存

AXシリーズにおけるNAT64/DNS64の設定例

 では本題に入っていきましょう。

 まず、図1の場合のAXのコンフィグ例を示しました。ここでは設定の意味を分かりやすくするために、NAT64関係の設定をブルー、DNS64関係の設定をレッド、ロギング関係の設定をグリーンで色分けしています。

AXコンフィグ例


vlan 10						インターネット側
 tagged ethernet 17
 router-interface ve 10
!
vlan 20						DNSサーバのあるL2スイッチ側
 tagged ethernet 5
 router-interface ve 20
!
vlan 30						イントラネット側
 tagged ethernet 18
 router-interface ve 30
!
class-list c1					NAT64の設定……(1)
 2001:db8::/32 lsn-lid 1			NAT64の設定……(1)
!
interface ve 10					Interface ve10→インターネット接続
ip address 10.111.0.2 255.255.255.0
ip nat outside					NAT64の設定……(2)
!
interface ve 20					interface ve20→DNSサーバ群に接続
 ip address 10.20.20.2 255.255.255.0
ipv6 address 2001:db8:1:1::2/64
!
interface ve 30 				interface ve30→イントラネット接続
 ipv6 address 2001:db8:1:2::2/64 
 ipv6 nat inside 				NAT64の設定……(2)
!
ip route 0.0.0.0 /0 10.111.0.254 		IPv4のインターネット側へのデフォルトルート
!
ipv6 route 2001:db8:1:3::/64 2001:db8:1:2::254 	IPv6イントラネット側へのルート
!
ip nat pool p1 10.111.0.101 10.111.0.110 netmask /24 lsn	IPv4のNATプール(NAT64の設定)……(3)
ip nat pool p2 10.111.0.111 10.111.0.120 netmask /24 lsn	IPv4でNATプール(NAT64の設定)……(3)
ip nat pool source-nat-pool 10.20.20.200 10.20.20.220 netmask /24	DNSサーバへNATする際に利用(NAT64の設定)……(4)
ip nat pool-group pg1 p1 p2			p1とp2をグループ化(NAT64の設定)……(3)
!
ip nat lsn endpoint-independent-mapping enable 		(NAT64の設定)……(5)
ip nat lsn endpoint-independent-filtering enable 	(NAT64の設定)……(5)
ip nat lsn logging default-template nat64_logging	(LSN Loggingの設定)……(9)
!
nat64 prefix well-known 			(NAT64の設定)……(6)
nat64 alg ftp enable ……(6)
nat64 alg rtsp enable ……(6)
nat64 sip rtsp enable ……(6)
nat64 alg tftp enable ……(6)
nat64 inside source class-list c1		(NAT64の設定)……(1)/(6)
!
lsn-lid 1					(NAT64の設定)……(3)
 source-nat-pool pg1				(NAT64の設定)……(3)
!
slb server ipv6_22 2001:db8:1:1::22		IPv6 DNSサーバのアドレス(DNS64の設定)……(7)
   port 53  udp
slb server ipv4_22 10.20.20.22			IPv4 DNSサーバのアドレス(DNS64の設定)……(7)
   port 53  udp
!
slb service-group sg-dns64 udp			(DNS64の設定)……(8)
    member ipv4_22:53
    member ipv6_22:53
!
!
slb template dns dns-1				(DNS64の設定)……(8)
    dns64
!
slb virtual-server vip-100 2001:db8:1:2::100	(DNS64の設定)……(8)
   port 53  dns-udp
      source-nat pool source-nat-pool……(4)
      service-group sg-dns64
      template dns dns-1

slb server log1 10.20.20.23			(ログサーバの設定)……(9)
    port 514  udp
slb server log2 10.20.20.24			(ログサーバの設定)……(9)
    port 514  udp
!
slb service-group log:514 udp			(ログサーバのサービスグループの設定)……(9)
     member log1:514
     member log2:514

ip nat template logging nat64_logging		(ログテンプレートの設定)……(9)
  facility local5
  log port-mappings both
  log sessions
  include-destination
  service-group log:514
  severity informational
!

 各行の設定の意味は、以下の通りです。

(1)NAT64でNATさせるIPv6アドレスのリストを設定する
(2)NAT64でNATする際のInsideとOutsideのインターフェイスを指定する
(3)NAT64の際に使用するIPv4のプールアドレスを指定する
(4)DNSサーバへNATしてアクセスする際に利用するIPv4のプールアドレスを指定する
(5)LSN関連の設定を追加する
(6)NAT64関連の設定を追加する(ALGの有効化など)
(7)DNSサーバのアドレスを追加する
(8)DNS64関連の設定を追加する
(9)ログ関連の設定を追加する

 DNS64において一番重要な点は、AレコードとAAAAレコードの変換ロジックの部分です。どのように変換を行っているかというと、次のように至ってシンプルなロジックとなります。

 ご存じの通り、IPv4アドレス(Aレコード)の長さは32ビットです。一方IPv6アドレス(AAAAレコード)は128ビットで、その差は96ビットあります。そこで、先頭の96ビットに「64:ff9b::/96」(AXシリーズのデフォルト設定)のプレフィックスを挿入し、後半32ビットに、Aレコードで教えてもらったIPv4アドレスを充当し(表記上は16進数に変換)、IPv6アドレスを生成しています。

 こうして生成したIPv6アドレスを、名前解決を要求したIPv6端末に返すことで、IPv6端末は擬似的に生成された目的のサーバのIPv6アドレスを知ることができます。

 この後の通信は、どのように行われるのでしょうか。

 NAT64を提供するAXシリーズに、上記のようにして生成されたIPv6アドレス宛のパケットが到達すると、AXシリーズは該当IPv6アドレスのうち後半32ビットだけを抜き出して、それをIPv4のあて先アドレスとして利用をします。これにより、NATされたパケットは目的のIPv4サーバに到達できます。NATされた際のソースアドレスには、上記の設定の「ip nat pool p1」と「p2」で指定したプールから払い出されたIPv4アドレスを使用します。

 なお今回の例では、AXシリーズがNAT64機能だけでなくDNS64機能も提供していますが、InfobloxのようなDNS64をサポートしたアプライアンスと組み合わせることも可能です(ちなみにInfobloxは、A10ネットワークスのテクニカルパートナーです)。

 ここまでの設定で、NAT64/DNS64が動作し、IPv6とIPv4の間で通信できる環境となりました。

最終回 NAT64でIPv6端末をIPv4サーバにつなげよう
一台二役を果たす「NAT64/DNS64」
AXシリーズにおけるNAT64/DNS64の設定例
  フラグメンテーションのサポート
HTTPならばリンク先のリライトは原則不要に
NAT64セッションログの保存
当面続く「移行期」への備えを
「Master of IP Network総合インデックス」

@IT Special

- PR -

TechTargetジャパン

Master of IP Network フォーラム 新着記事
  • ガートナーが示す、IoTプラットフォーム導入のためのヒントとは (2017/4/6)
     企業の経営判断の中心はERPからIoTへと移行しようとしている。P&Gと米国の大手機器メーカーの事例とともに、「IoTをどう生かすべきか」のヒントをガートナーのイベントから探る
  • シスコのSD-WANが、分かりにくいのはなぜか (2017/2/27)
     シスコシステムズは、SD-WANに対してどのようなスタンスをとっているのか。結論から言えば、同社の既存技術の適用形態としてSD-WANを捉えており、一方で即座に活用できるソリューションを求める人々には、「Cisco Meraki」を推進するということになる
  • ネットワークの疎通を確認するには?〜ping/traceroute〜 (2017/1/30)
     マシンのネットワーク設定を行い、外部のネットワークやサーバとつながるかどうかを確認する際には、実際にネットワーク・アプリケーションを使う前に、「ping」「traceroute(tracert)」などのコマンドを用いる方法が有効だ
  • ping 〜ネットワークの疎通を確認する (2017/1/23)
     pingは、ネットワーク疎通を確認したいホストに対してIPパケットを発行し、そのパケットが正しく届いて返答が行われるかを確認するためのコマンドだ
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Master of IP Network 記事ランキング

本日 月間
ソリューションFLASH