ホーム » 技術 » ネットワーク » 6rdによるIPv6接続(Linux編その2)

SAKURA Internet Inc.

アーカイブ

6rdによるIPv6接続(Linux編その2)

当ブログをご覧のみなさまこんにちは。さくらインターネット研究所の大久保です。

前回に引き続き、今回も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の設定

  1. IPv6アドレスの算出
    まずは、6rdクライアントとして使用するIPv6アドレスを算出します。以下のようにIPv4アドレスの下位2オクテットを引数として指定します。

    # printf "2403:3a00:%02x%02x::1\n" 224 119
    2403:3a00:e077::1
    
  2. /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アドレスに埋め込むことができます。

  3. 再起動
    設定を反映させるために一度再起動します。

    # reboot
    
  4. 設定反映を確認
    正しく設定できると以下のようになります。

    # 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の設定

  1. IPv6アドレスの算出
    Ubuntuと同様に6rdクライアントとして使用するIPv6アドレスを算出します。

    # printf "2403:3a00:%02x%02x::1\n" 224 124
    2403:3a00:e07c::1
    
  2. /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
    
  3. /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
    
  4. 再起動
    設定を反映させるために一度再起動します。

    # reboot
    
  5. 設定反映を確認
    正しく設定できると以下のようになります。

    $ 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がサポートされていますので、次回はそちらの設定方法について解説したいと思います。


1件のコメント

コメントは停止中です。