IIJのブロードバンドサービス、IIJmioひかりや、IIJmio FiberAccess/NFでは、IPoEによるIPv6接続、およびDS-Lite(RFC6333)によるIPv4接続がご利用頂けます。

ここではDS-Liteに対応したブロードバンドルータの代わりに、Raspberry Piを使う方法をご紹介します。Raspberry Piはコンピュータの学習や電子工作での利用を想定して開発されたワンボードコンピュータです。SDカードにLinuxをインストールすることができ、一般的なLinuxホストのように扱うこともできます。

Raspberry Piはこの種のワンボードコンピュータの中では格段に扱いやすいものですが、ご利用にはある程度コンピュータやLinuxの知識が必要になります。本記事では設定例を紹介いたしますが、この設定で確実に動作することを保証するものではない点、あらかじめご了承ください。Raspberry Piやその設定方法についてのお問い合わせにはお答えできません。

ここで紹介する設定例はRaspberry Pi以外のLinuxにも適用できると思われます。

Raspberry Pi
Raspberry Pi

設定方法

用意するもの

  • Raspberry Pi本体と、電源、キーボード、モニタなど
  • USB Ethernetアダプタ
  • OSをインストールしたSDカード

今回は、2016.03.18にリリースされたNOOBS1.9.0を利用してインストールしたRaspbianを利用します。インストールを行い、OSが起動する状態にします。

ネットワーク構成

Raspberry Pi本体にはEthernetポートが一つあります(eth0)。今回はeth0をIIJmioひかりのHGW(ホームゲートウェイ)・ONUに接続します。また、用意したUSB EthernetアダプタをRaspberry PiのUSBポートに取り付けます(eth1)。eth1にはスイッチングハブなどを取り付け、自宅内で利用するパソコンに接続します。(eth1)

事前確認

Raspberry PiをHGWに接続し、IPv6が利用できるかどうかを確認します。

このときに、IPIP6トンネルの接続先ホスト名、gw.transix.jpのIPv6アドレスを確認しておきます。

# ping6 -c2 gw.transix.jp
PING gw.transix.jp(2404:8e00::feed:100) 56 data bytes
64 bytes from 2404:8e00::feed:100: icmp_seq=1 ttl=58 time=5.00 ms
64 bytes from 2404:8e00::feed:100: icmp_seq=2 ttl=58 time=4.39 ms

--- gw.transix.jp ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 4.396/4.699/5.003/0.311 ms

パッケージのインストール

以下のパッケージをインストールします。

# aptitude install isc-dhcp-server
# aptitude install ebtables bridge-utils

/etc/modulesに以下の行を追加し、起動時にkernel moduleを読み込むようにします。

ip6_tunnel

DHCPクライアントの停止

Raspbianでは標準でDHCPクライアントが動作しているので、停止します。

# systemctl stop dhcpcd.service
# systemctl disable dhcpcd.service

インターフェース設定の変更・IPv6ブリッジの設定・IPv4ルーティングの設定

eth1に適当なIPv4アドレスを割り当てます。また、IPv6 bridgeのためにbr0インターフェースを追加します。

/etc/network/interfacesに以下の行を追加。

auto eth0
iface eth0 inet manual

auto eth1
iface eth1 inet static
 address 192.168.2.1
 netmask 255.255.255.0

auto br0
iface br0 inet manual
 bridge_ports eth0 eth1

br0でIPv6以外をブリッジしないようにフィルタを書きます。

/etc/network/if-up.d/000bridgeを作成します。

#!/bin/sh

[ "$IFACE" != "br0" ] && exit 0;

ebtables -t broute -P BROUTING DROP
ebtables -t broute -I BROUTING -p IPv6 -j ACCEPT

exit 0

IPv4をインターフェース間でルーティングできるようにします。

/etc/sysctl.d/local.conf作成

net.ipv4.ip_forward=1

DHCPサーバ設定

LAN内でRaspberryPiがDHCPサーバになるための設定を行います。

/etc/dhcp/dhcpd.conf修正

subnet 192.168.2.0 netmask 255.255.255.0 {
  option routers 192.168.2.1;
  option subnet-mask 255.255.255.0;
  option domain-name-servers 210.130.0.1;
  range 192.168.2.8 192.168.2.64;
}

/etc/default/isc-dhcp-serverの以下の行を編集し、eth1でのみDHCPサーバとして動作するようにします。

INTERFACES="eth1"

■IPIP6トンネル

トンネルの接続は以下のスクリプトで行います。REMOTEには、事前に確認しておいたgw.transix.jpのIPv6アドレスを指定してください。

#!/bin/sh

REMOTE='2404:8e00::feed:100'
LOCAL=`ip addr show br0 |grep 'mngtmpaddr' | awk '{print $2}'  | awk -F/ '{print $1}'`
echo $LOCAL

# IPIP6 tunnel linkup
ip -6 tunnel add ip6tnl1 mode ip4ip6 remote $REMOTE local $LOCAL dev br0
ip link set dev ip6tnl1 up

# IPv4 routing
route delete default
route add default dev ip6tnl1

接続後の様子

インターフェースの状況 (参考)

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether b8:27:eb:**:**:95 brd ff:ff:ff:ff:ff:ff
3: ip6tnl0@NONE:  mtu 1452 qdisc noop state DOWN group default 
    link/tunnel6 :: brd ::
4: eth1:  mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:22:cf:**:**:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.1/24 brd 192.168.2.255 scope global eth1
       valid_lft forever preferred_lft forever
5: br0:  mtu 1500 qdisc noqueue state UP group default 
    link/ether 00:22:cf:**:**:e2 brd ff:ff:ff:ff:ff:ff
    inet6 2409:10:****:0:222:cfff:****:60e2/64 scope global mngtmpaddr dynamic 
       valid_lft 13783sec preferred_lft 11983sec
    inet6 fe80::222:cfff:****:60e2/64 scope link 
       valid_lft forever preferred_lft forever
6: ip6tnl1@br0:  mtu 1452 qdisc noqueue state UNKNOWN group default 
    link/tunnel6 2409:10:****:0:222:cfff:****:60e2 peer 2404:8e00::feed:100
    inet6 fe80::184d:73ff:****:867a/64 scope link 
       valid_lft forever preferred_lft forever

スループット

厳密な測定ではありませんが、Raspberry Pi B+利用時で概ね以下のスループットが出ました。この状況でCPU Useageは100%となっています。

  • IPv4(IPIP6 tunnel): 30Mbps
  • IPv6(bridge): 50Mbps

よりCPU性能の高い、Raspberry Pi 2、Raspberry Pi3を使用することで、スループットを向上できる可能性があります。