最終回 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サーバへのアクセスが可能になるのか、流れを追ってみましょう。
- IPv6端末はwww.example.comのアドレスを解決するため、IPv6パケットでDNSリクエストを送信します。www.example.comはIPv4サーバです。DNSクエリの送信先アドレスは、AXに設定されたIPv6 VIPです。
- AXは、AAAA(IPv6アドレスレコード)クエリをDNSサーバに送信します。DNSサーバはIPv6でもIPv4でも対応可能です。
- DNSサーバは、www.example.comのAAAAレコードを探します。
- www.example.comはIPv4サーバですから、AAAAレコードは存在しません。DNSクエリの結果は、「DNSアンサーがない」、または「エラー」になります。
- DNSサーバは、4.で受信したDNSレスポンスをAXに送信します。
- AXは、A(IPv4アドレスレコード) クエリをDNSサーバに送信します。
- DNSサーバは、www.example.comのAレコードを探します。
- www.example.comのAレコードが解決され、IPv4アドレス(ここでは192.168.0.5)が返ってきます。
- DNSサーバは、8.で受信したDNSレスポンスをAXに送信します。
- AXは、IPv4アドレスにIPv6プレフィックス(「64:ff9b::」、デフォルト)を付与し、さらにIPv4アドレス部分を16進数に変換し、「64:ff9b::c0a8:5」をIPv6端末に送信します。
- IPv6端末はwww.example.comに到達するために、宛先アドレス64:ff9b::c0a8:5にパケットを送信します。
- AXは、64:ff9b::c0a8:5宛のパケットを、IPv4アドレス192.168.0.5に変換し送信します。また、IPv4ネットワークへ出ていくパケットの送信元IPは、AXに設定されたIP NAT PoolのIPv4アドレスに置き換えられます。
- www.example.comは、AXに設定されたIP NAT PoolのIPv4アドレス宛にリプライのパケットを送信します。
- 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総合インデックス」 |
- 完全HTTPS化のメリットと極意を大規模Webサービス――ピクシブ、クックパッド、ヤフーの事例から探る (2017/7/13)
2017年6月21日、ピクシブのオフィスで、同社主催の「大規模HTTPS導入Night」が開催された。大規模Webサービスで完全HTTPS化を行うに当たっての技術的、および非技術的な悩みや成果をテーマに、ヤフー、クックパッド、ピクシブの3社が、それぞれの事例について語り合った - ソラコムは、あなたの気が付かないうちに、少しずつ「次」へ進んでいる (2017/7/6)
ソラコムは、「トランスポート技術への非依存」度を高めている。当初はIoT用格安SIMというイメージもあったが、徐々に脱皮しようとしている。パブリッククラウドと同様、付加サービスでユーザーをつかんでいるからだ - Cisco SystemsのIntent-based Networkingは、どうネットワークエンジニアの仕事を変えるか (2017/7/4)
Cisco Systemsは2017年6月、同社イベントCisco Live 2017で、「THE NETWORK. INTUITIVE.」あるいは「Intent-based Networking」といった言葉を使い、ネットワークの構築・運用、そしてネットワークエンジニアの仕事を変えていくと説明した。これはどういうことなのだろうか - ifconfig 〜(IP)ネットワーク環境の確認/設定を行う (2017/7/3)
ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。
|
|