Top > ipv6ルーターを作る(6rd編)

キーワード IPv6 Linux 6rd さくら sit トンネル ルーター radvd


IPv6特集記事:


必要な環境

  • カーネルが6rdに対応しているLinuxサーバ
  • IPv4グローバルIP
  • 6rd接続先(今回は「さくらの6rdトライアル」を利用します)
  • radvd

6rd対応カーネルか調べる

まずはカーネルが6rdプロトコルを扱えるかを調べる.

# ip tunnel help 2>&1 |grep 6rd

これで6rdを含む行が出力されれば, 次のステップへ進める.

6rdは新しいプロトコルなので, 古めのKernelには機能を含んでいない. (6rdはkernel2.6.33以降でマージされた)
CentOS5,CentOS6は対応ておらず, 6rdがマージされることもないため, パッチをあてたKernelに載せ替えなければならない.

ここから6rd対応カーネルとiproute2の最新版を入手し導入する.

# wget http://enog.jp/~masakazu/6rd/kernel-2.6.18-xxx.x.x.el5.6rd.x86_64.rpm
# wget http://enog.jp/~masakazu/6rd/iproute-2.6.18-xx.6rd.x86_64.rpm
# rpm -ivh kernel-2.6.18-xxx.x.x.el5.6rd.x86_64.rpm
# rpm -Uvh iproute-2.6.18-xx.6rd.x86_64.rpm

再起動後, 確認コマンドを再度実行し, 下記のように6rdが含まれていれば成功だ.

# ip tunnel help 2>&1 |grep 6rd
Usage: ip tunnel { add | change | del | show | 6rd } [ NAME ]
          [ 6rd-prefix ADDR ] [ 6rd-relay_prefix ADDR ] [ 6rd-reset ]

トンネルデバイス(sit)とルーティングを設定する

環境情報

  • 自分のIPv4アドレス: 210.188.224.10
  • 自分のIPv6プレフィックス: 2001:e41:d2bc:e00a::1/32
  • 6rdゲートウェイ: 61.211.224.125

自分のIPv6プレフィックスは,

# printf "2001:e41:%02x%02x:%02x%02x::1\n" 210 188 224 10
2001:e41:d2bc:e00a::1

このように, 自分のIPv4アドレスを16進に変換し, IPv6プレフィックスの第三/第四オクテットに埋め込んだものになる.

IPv4が1.1.1.1の場合, IPv6プレフィックス = 2001:e41:0101:0101::1/32 になる
IPv4が10.10.10.10の場合, IPv6プレフィックス = 2001:e41:0a0a:0a0a::1/32 になる.

ifcfg-sit1 を作成

# vi /etc/sysconfig/network-scrits/ifcfg-sit1
DEVICE=sit1
IPV6INIT=yes
IPV6_MTU=1280
IPV6_DEFAULTGW=::61.211.224.125
IPV6TUNNELIPV4=any
IPV6TUNNELIPV4LOCAL=210.188.224.10
IPV6ADDR=2001:e41:d2bc:e00a::1/32
# echo 'ip tunnel 6rd dev sit1 6rd-prefix 2001:e41::/32' >> /etc/rc.local

ifcfg-eth1 を編集

ルーターとして動かすので, eth1にもIPv6プレフィックスを追加する.

# vi /etc/sysconfig/network-scritps/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.53
NETMASK=255.255.255.0
HWADDR=00:0c:29:8d:26:82

IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6ADDR=2001:e41:d2bc:e00a::1/64
MTU=1280

下の4行が追加した内容になっている.

再起動とテスト

# reboot

再起動すれば

# ping6 ipv6.google.com -c1
PING ipv6.google.com(2404:6800:8001::93) 56 data bytes
64 bytes from 2404:6800:8001::93: icmp_seq=0 ttl=56 time=31.6 ms

--- ipv6.google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 31.689/31.689/31.689/0.000 ms, pipe 2

このようにIPv6通信が出来るはずだ.

ルーターとして動かすためのカーネルパラメータ設定

# vi /etc/sysctl.conf
# for using radvd
net.ipv6.conf.all.accept_ra = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.all.forwarding = 1
# echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra
# echo 0 > /proc/sys/net/ipv6/conf/all/accept_redirects
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

radvdを導入・設定する

IPv6アドレスをLAN内に再配布するには radvd を使う.

# yum -y install radvd
# vi /etc/radvd.conf
interface eth1
{
        AdvSendAdvert on;
        MinRtrAdvInterval 30;
        MaxRtrAdvInterval 100;
        AdvLinkMTU 1280;
        prefix 2001:e41:d2bc:e00a::/64
        {
                AdvOnLink on;
                AdvAutonomous on;
                AdvRouterAddr off;
        };

};
# /etc/init.d/radvd start
# chkconfig radvd on

さくらの6rdトライアルの問題点

  • MTU小さい
    • LAN側NIC(eth1)で MTU=1280 にして回避
  • 無通信がしばらく続くと通信できなくなる(ルーティングが消える?)
    • crontabに * * * * * /bin/ping6 2001:e40:100:215::1 -c 1 > /dev/null 2>&1 で定時通信させる.
      • 2001:e40:100:215::1 は # traceroute6 ipv6.google.com で2Hop目のIPを指定

参考サイト:



新規 編集 添付 名前変更 バックアップ   ホーム バックアップ リンク元   最終更新のRSS