当ブログをご覧のみなさまこんにちは。さくらインターネット研究所の大久保です。
前回に引き続き、今回もLinuxで6rdを使う方法について紹介します。
これまでは、IPv6アドレスにIPv4アドレス全部を埋め込む設定となっていましたが、Linuxの6rdの実装ではIPv4アドレスの一部をIPv6アドレスに埋め込むことができます。全部ではなく一部とすることで、6rdクライアントが使えるIPv6アドレス空間を増やすことができます。
試験ネットワーク環境
ここでは以下のようなネットワークを試験的に構築して動作確認を行います。
6rd空間として2403:3a00::/32を割り当て、設置した6rd Border Relayにインターネットからルーティングされています。またIPv4ネットワークを介してUbuntu10.10のマシンとFedora14のマシンが接続されています。これらを6rd経由でIPv6インターネットに接続してみます。
アドレスフォーマットは下記のようになります。
6rdプレフィックス | 2403:3a00::/32 (*1) |
IPv4プレフィックス | 61.211.0.0/16 (*2) 下位16bitのみをIPv6アドレスに埋め込む |
Border Relayアドレス | 61.211.224.125 |
委譲空間 | /48 (32+16) |
例えば、61.211.224.119の割り当てられたUbuntu10.10の6rdクライアントの場合、2403:3a00::/32にIPv4アドレスの下16bit(224.119の部分)を埋め込み、2403:3a00:e077::/48の空間を利用することができます。
※ 補足事項
- (*1) 2403:3a00::/32
近い将来、弊社大阪エリアでのIPv6サービス提供用に取得したアドレスですが、現在準備中ということで、サービス提供開始まで一時的に6rdテスト用に利用しています。 - (*2) 61.211.0.0/16
弊社で割り振りを受けている空間は 61.211.224.0/20 のみですが、説明を簡略化するためここでは/16で説明しています。61.211.0.0/16内のIPアドレスを使用している他社さんのネットワークからアクセスできてしまいますので、本来はIPv4アドレスブロックに合わせて/20とした方が良いです。
Ubuntu10.10の設定
- IPv6アドレスの算出
まずは、6rdクライアントとして使用するIPv6アドレスを算出します。以下のようにIPv4アドレスの下位2オクテットを引数として指定します。# printf "2403:3a00:%02x%02x::1\n" 224 119 2403:3a00:e077::1
- /etc/network/interfaces ファイルの編集
viでファイルを開き、以下の内容を追加します。# vi /etc/network/interfaces auto tun6rd iface tun6rd inet6 v4tunnel address 2403:3a00:e077::1 netmask 32 gateway ::61.211.224.125 local 61.211.224.119 endpoint any ttl 64 up ip tunnel 6rd dev tun6rd 6rd-prefix 2403:3a00::/32 6rd-relay_prefix 61.211.0.0/16 up ip link set mtu 1280 dev tun6rd
6rd-relay_prefixオプションを指定することで、IPv4アドレスの全部ではなく一部(この場合は下16bit)をIPv6アドレスに埋め込むことができます。
- 再起動
設定を反映させるために一度再起動します。# reboot
- 設定反映を確認
正しく設定できると以下のようになります。# ifconfig tun6rd tun6rd Link encap:IPv6-in-IPv4 inet6アドレス: ::61.211.224.119/128 範囲:Compat inet6アドレス: 2403:3a00:e077::1/32 範囲:グローバル UP RUNNING NOARP MTU:1280 メトリック:1 RXパケット:10 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:10 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:1040 (1.0 KB) TXバイト:1040 (1.0 KB) # ip tunnel show sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 6rd-prefix 2002::/16 tun6rd: ipv6/ip remote any local 61.211.224.119 ttl 64 6rd-prefix 2403:3a00::/32 6rd-relay_prefix 61.211.0.0/16 # ip -6 route show | grep default default via ::61.211.224.125 dev tun6rd metric 1024 mtu 1280 advmss 1220 hoplimit 0
Fedora14の設定
- IPv6アドレスの算出
Ubuntuと同様に6rdクライアントとして使用するIPv6アドレスを算出します。# printf "2403:3a00:%02x%02x::1\n" 224 124 2403:3a00:e07c::1
- /etc/sysconfig/network-scripts/ifcfg-sit1 ファイルの作成
viでファイルを開き、以下の内容を入力します。# vi /etc/sysconfig/network-scripts/ifcfg-sit1 DEVICE=sit1 IPV6INIT=yes IPV6_MTU=1280 IPV6_DEFAULTGW=::61.211.224.125 IPV6TUNNELIPV4=any IPV6TUNNELIPV4LOCAL=61.211.224.124 IPV6ADDR=2403:3a00:e07c::1/32
- /etc/rc.local ファイルの編集
以下の内容を追記します。# vi /etc/rc.local ip tunnel 6rd dev sit1 6rd-prefix 2403:3a00::/32 6rd-relay_prefix 61.211.0.0/16
- 再起動
設定を反映させるために一度再起動します。# reboot
- 設定反映を確認
正しく設定できると以下のようになります。$ ifconfig sit1 sit1 Link encap:IPv6-in-IPv4 inet6 addr: 2403:3a00:e07c::1/32 Scope:Global inet6 addr: ::61.211.224.124/128 Scope:Compat UP RUNNING NOARP MTU:1280 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:624 (624.0 b) TX bytes:624 (624.0 b) $ ip tunnel show sit0: ipv6/ip remote any local any ttl 64 nopmtudisc 6rd-prefix 2002::/16 sit1: ipv6/ip remote any local 61.211.224.124 ttl 64 6rd-prefix 2403:3a00::/32 6rd-relay_prefix 61.211.0.0/16 $ ip -6 route show | grep default default via ::61.211.224.125 dev sit1 metric 1 mtu 1280 advmss 1220 hoplimit 0
通信テスト
6rdドメイン内での通信ができるか、IPv6インターネット向けの通信ができるかを確認します。
- Ubuntu10.10→Fedora14
# ping6 2403:3a00:e07c::1 PING 2403:3a00:e07c::1(2403:3a00:e07c::1) 56 data bytes 64 bytes from 2403:3a00:e07c::1: icmp_seq=1 ttl=64 time=2.07 ms 64 bytes from 2403:3a00:e07c::1: icmp_seq=2 ttl=64 time=0.508 ms 64 bytes from 2403:3a00:e07c::1: icmp_seq=3 ttl=64 time=0.370 ms
- Ubuntu10.10→Border Relay
# ping6 2403:3a00:e07d::1 PING 2403:3a00:e07d::1(2403:3a00:e07d::1) 56 data bytes 64 bytes from 2403:3a00:e07d::1: icmp_seq=1 ttl=64 time=1.64 ms 64 bytes from 2403:3a00:e07d::1: icmp_seq=2 ttl=64 time=0.312 ms 64 bytes from 2403:3a00:e07d::1: icmp_seq=3 ttl=64 time=0.591 ms
- Ubuntu10.10→IPv6インターネット向け
# ping6 www.iij.ad.jp PING www.iij.ad.jp(2001:240:bb42:b000::1:80) 56 data bytes 64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=1 ttl=55 time=1.71 ms 64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=2 ttl=55 time=1.77 ms 64 bytes from 2001:240:bb42:b000::1:80: icmp_seq=3 ttl=55 time=1.79 ms
問題なく通信できていることが確認できます。
まとめ
今回は、Linuxの6rdの実装において、IPv4アドレスの一部をIPv6アドレスに埋め込む方法について説明しました。この方式の場合、6rdクライアントが使えるIPv6アドレス空間を増やせる一方、6rd Border Relayも含めてIPv4アドレスの先頭部分が同じネットワークでしか使えませんので、適用箇所は十分検討が必要です。
これまでサーバ系OSでの設定方法について説明してきましたが、CiscoルータのIOSでも6rdがサポートされていますので、次回はそちらの設定方法について解説したいと思います。
[…] This post was mentioned on Twitter by 横田真俊, katsyoshi and Naoto MATSUMOTO, 鷲北 賢. 鷲北 賢 said: さくらインターネット研究所ブログ 6rdによるIPv6接続(Linux編その2) http://research.sakura.ad.jp/2011/02/02/tunnel […]