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本体と、電源、キーボード、モニタなど
- 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アドレスを確認しておきます。
1 2 3 4 5 6 7 8 |
# 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 |
パッケージのインストール
以下のパッケージをインストールします。
1 2 |
# aptitude install isc-dhcp-server # aptitude install ebtables bridge-utils |
/etc/modules
に以下の行を追加し、起動時にkernel moduleを読み込むようにします。
1 |
ip6_tunnel |
DHCPクライアントの停止
Raspbianでは標準でDHCPクライアントが動作しているので、停止します。
1 2 |
# systemctl stop dhcpcd.service # systemctl disable dhcpcd.service |
インターフェース設定の変更・IPv6ブリッジの設定・IPv4ルーティングの設定
eth1に適当なIPv4アドレスを割り当てます。また、IPv6 bridgeのためにbr0インターフェースを追加します。
/etc/network/interfaces
に以下の行を追加。
1 2 3 4 5 6 7 8 9 10 11 |
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
を作成します。
1 2 3 4 5 6 7 8 |
#!/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
作成
1 |
net.ipv4.ip_forward=1 |
DHCPサーバ設定
LAN内でRaspberryPiがDHCPサーバになるための設定を行います。
/etc/dhcp/dhcpd.conf
修正
1 2 3 4 5 6 |
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サーバとして動作するようにします。
1 |
INTERFACES="eth1" |
■IPIP6トンネル
トンネルの接続は以下のスクリプトで行います。REMOTE
には、事前に確認しておいたgw.transix.jp
のIPv6アドレスを指定してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
1: lo: <loopback ,UP,LOWER_UP> 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: <broadcast ,MULTICAST,UP,LOWER_UP> 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: <noarp> mtu 1452 qdisc noop state DOWN group default link/tunnel6 :: brd :: 4: eth1: <broadcast ,MULTICAST,UP,LOWER_UP> 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: </broadcast><broadcast ,MULTICAST,UP,LOWER_UP> 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: <pointopoint ,NOARP,UP,LOWER_UP> 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 </pointopoint></broadcast></noarp></broadcast></loopback> |
スループット
厳密な測定ではありませんが、Raspberry Pi B+利用時で概ね以下のスループットが出ました。この状況でCPU Useageは100%となっています。
- IPv4(IPIP6 tunnel): 30Mbps
- IPv6(bridge): 50Mbps
よりCPU性能の高い、Raspberry Pi 2、Raspberry Pi3を使用することで、スループットを向上できる可能性があります。