JANOG 31 MAP-E クラウドテストラボに SEIL/x86 を提供しました

記事一覧

明日 1月24日(木) と 1月25日(金) の2日間、JANOG 31 ミーティングが開催されます。

今回の JANOG 31 の一環で「MAP-E クラウドテストラボ(http://www.janog.gr.jp/wp/softwire-wg/?page_id=180)」が JANOG Softwire WG の方々によって提供されています。 このテストラボは「実際に MAP-E (*1) の動作している装置を触ってみたい」という参加者向けに構築されました。

その MAP-E に対応した実装の一つとして、 SEIL/x86 に MAP-E を試験実装したファームウェアを提供しています。MAP-E クラウドテストラボは、「さくらのクラウド」を利用しており、そのプラットフォーム上で SEIL/x86 が動作しています。

本記事では MAP-E クラウドテストラボで SEIl/x86 MAP-E 実装の動作を試してみる方法を簡単にご紹介します。

この画像は JANOG Softwire WG のウェブサイトから引用させていただいております。

引用元: http://www.janog.gr.jp/wp/softwire-wg/?page_id=180

参加申し込みをする

まず MAP-E クラウドテストラボ(http://www.janog.gr.jp/wp/softwire-wg/?page_id=180) のページの「利用条件」を確認して、参加申し込みを行ってください。するとテストサーバと MAP-E CE/BR にログインできるアカウント情報がメールで送付されてきます。

MAP-E クラウドテストラボに接続する

ここでは MAP-E を通して、Web ページの取得が行えることと、telnet を利用して、MAP-E CE の NAPT セッションを確認する方法についてご紹介します。

簡単な流れとしては以下の手順です。なお実験に際しては、実験用のサーバの端末と MAP-E CE の端末を開いておくことをお勧めします。

まずは、踏み台サーバにログインします。

$ ssh user@133.242.63.165

その後にテストサーバ、MAP-E CE#2 にそれぞれログインします。

 # 踏み台サーバからテストサーバにログイン
 [user@sv-mgmt ~]$ ssh user@192.168.255.12
 # 踏み台サーバから MAP-E CE#2 (SEIL/x86) にログイン
 [user@sv-mgmt ~]$ ssh user@192.168.255.22

MAP-E 越しに通信してみる

それではテストサーバから wget コマンドを利用して HTTP を接続してみます。

ここでは IPv4 の HTTP 通信を強制するため、"-4" オプションを付けています。

 [user@sv2 ~]$ wget -4 http://www.iij.ad.jp/index.html
 --2013-01-22 15:05:52--  http://www.iij.ad.jp/index.html
 www.iij.ad.jp をDNSに問いあわせています... 210.130.137.80
 www.iij.ad.jp|210.130.137.80|:80 に接続しています... 接続しました。
 HTTP による接続要求を送信しました、応答を待っています... 200 OK
 ... (省略)

index.html ファイルが問題なく取得できました。

このコマンドを実行することで IPv4 による HTTP の通信が行えることは確認できましたが、これだけでは通常の IPv4 インターネット接続との違いがわからないため、次に MAP-E CE#2 で生成された TCP の NAPT セッションを確認してみます。

テストサーバから前述のサーバの 80 番ポートに対し、telnet コマンドで TCP 接続を行います。こちらも IPv4 で接続させるため、ホスト名ではなく IPv4 アドレスで指定しています。 (*2)

 [user@sv2 ~]$ host www.iij.ad.jp
 www.iij.ad.jp has address 210.130.137.80
 www.iij.ad.jp has IPv6 address 2001:240:bb42:b000::1:80

 [user@sv2 ~]$ telnet 210.130.137.80 80 
 Trying 210.130.137.80...
 Connected to 210.130.137.80.
 Escape character is '^]'.

接続ができた後はテストサーバ側の端末はそのままにしておき、MAP-E CE#2 上で show status frd コマンドを実行してみます。

 mape-ce2> show status frd
 Forwarding Status:
     Interface:                  frd0
     Mode:                       CE (mesh)
     CE IPv6 Address:            2001:e40:10c:2200:85:f23f:b200:200
     CE Shared IPv4 Address:     133.242.63.178
     EA-bits:                    34 (0x22)
     Available Ports:
         Number of ports:        3840
         Port-set ID:            0x2
         Bit representation:     |xxxx|0010|yyyyyyyy|  (xxx>=1, yyy>=0)
         Port-set-1:             4608 - 4863
         Port-set-2:             8704 - 8959
         Port-set-3:             12800 - 13055
         ...                     ...
         Port-set-15:            61952 - 62207
 
 Default Mapping Rule:
     BR IPv6 Address:            2001:e40:10c::cafe
 
 Mapping Rule #0 (Basic Mapping Rule):
     Rule IPv6 prefix:           2001:e40:10c::/48
     Rule IPv4 prefix:           133.242.63.176/28
     Rule EA-bits length:        8
     Sharing ratio:              16
     PSID offset:                4
     Used:                       227
 
 Port Number Usage:
     Top 10 Assigned Port Numbers:
         133.242.63.178:61984(TCP) assigned to 1 sessions
     Summary:
         1 TCP port numbers assigned to 1 sessions
         0 UDP port numbers assigned to 0 sessions
         0 ICMP ID assigned to 0 sessionss
         Total 1 sessions

「Port Number Usage:」の項を見ると実際に MAP 用の NAPT セッションが生成されていることが確認できるかと思います。これで MAP-E を通して IPv4 の通信が行われていることが確認できます。

show status frd の読み方

さて、MAP-E CE#2 に NAPT セッションが生成されていることが確認できました。

133.242.63.178:61984(TCP) assigned to 1 sessions

まず、IP アドレス 133.242.63.178 は MAP-E のルールから生成された共有アドレスです。

このことは

この行は、IP アドレス 133.242.63.178 の TCP ポート番号 61984 が 1つの NAPT セッションにアサインされたことを表しています。この IP アドレスとポート番号のアサイン方法が MAP-E プロトコルの重要な点です。

CE Shared IPv4 Address:     133.242.63.178

から確認できます。そしてこのアドレスはルール(Mapping Rule #0) とこの MAP-E CE の IPv6 アドレスから決まります。

今回の MAP-E 実験ネットワークではルールはひとつだけ定義されています:

 Mapping Rule #0 (Basic Mapping Rule):
     Rule IPv6 prefix:           2001:e40:10c::/48
     Rule IPv4 prefix:           133.242.63.176/28
     Rule EA-bits length:        8
     Sharing ratio:              16
     PSID offset:                4

このルールを MAP-E CE#2 の IPv6 アドレス

CE IPv6 Address:            2001:e40:10c:2200:85:f23f:b200:200

と比較します。

MAP-E では Rule IPv6 prefix の後の数ビットを EA-bits と呼び、MAP-E CE の 識別子として使います。

今回は Rule IPv6 prefix が 48 ビット長で Rule EA-bits length が 8 ビットのため、CE IPv6 Address (=2001:e40:10c:2200:85:f23f:b200:200) の 49ビット目から56ビット目が EA-bits にあたり、すなわち EA-bits = 0x22、10進数で 34 となります。

このことは

EA-bits:                    34 (0x22)

で確認できます。

そして EA-bits の上位数ビットと Rule IPv4 prefix から Shared IPv4 Address が決まります。今回は Rule IPv4 prefix が /28 ですから、EA-bit の上位4ビット分を持ってきて、

133.242.63.176 + 0x2 = 133.242.63.178

が Shared IPv4 Address となります。

CE Shared IPv4 Address:     133.242.63.178

そして EA-bits の残りの下位 4ビット(0x2)は PSID (Port-set ID) と呼ばれ、NAPT のために使えるポート番号の算出に使われます。

Port-set ID:            0x2

ルールの PSID offset が 4 ですから、16ビットのポート番号のうち、PSID は上位から 4ビット分オフセットしたところに置かれます。Bit representation の表示で上位から 5-8 ビット目が PSID のビットパターン(0x2 = 0b0010)で固定されていることを確認してみてください。

Bit representation:     |xxxx|0010|yyyyyyyy|  (xxx>=1, yyy>=0)

さきほど作られた HTTP の NAPT セッションのポート番号 61984 は 16 進数と 2進数でそれぞれ 0xf220 と 0b1111001000100000 と書けて

 Bit representation | xxxx | 0010 | yyyy yyyy |  
                    | 1111 | 0010 | 0010 0000 | (= 0xf220 = 61984)

と書けて、Bit representation に合致していることがわかります。

最後に

この記事では、SEIL を例とした MAP-E クラウドテストラボでの簡単な利用方法をご紹介しました。他にも様々な実験を行えると思います。

なお今回の JANOG 31 では、ブースの出展を行っています。新サービス (*3) の展示を行っていますので、ぜひお越しください。*1: Mapping of Address and Port(MAP)-Encapsulation の略. MAP の仕様には、過去に Encapsulation 方式(MAP-E)の他に Translation 方式(MAP-T)も規定されていました。現在の draft からは MAP-E, MAP-T という名称は削除されています。今回は Encapsulation 方式の試験を行うことを目的としているため、MAP-E と表記しています。MAP の詳細な仕様は、こちらの draft を参照してください. (http://tools.ietf.org/html/draft-ietf-softwire-map-02)

*2: Linux の telnet コマンドは、IPv4 で接続をするための "-4" オプションが用意されていないため、IPv4 アドレスを直接指定するようにしています。

*3: http://www.iij.ad.jp/news/pressrelease/2013/0122.html

© Internet Initiative Japan Inc.