FreeBSDルーターでDS-Lite

前回はIPoE開通までだったので、今回はDual-Stack Lite (以下DS-Lite)でIPv4 over IPv6なトンネルを作成して名前通りデュアルスタックな状態にする。

先ずはIPv4のLANを作っておくこと。もちろん既に存在するなら新たに作る必要はない。

/etc/rc.conf (IPv4 LAN側アドレス設定部分のみ)
network_interfaces="lo0 em1"
ifconfig_em1="inet 192.168.0.1 netmask 255.255.255.0"

em1はLAN側のNIC。上では192.168.0.0/24なネットワークでルーターのLAN側IPアドレスを192.168.0.1とした。

次が本題。
IPv4 over IPv6なトンネルを作成する。
トンネルというからには「何処から」「何処に」が肝心。DS-Liteの設定ではこれが解ってないと話にならない。
ルーターの「WAN側IPv6アドレス」から相手先はISPの「Address Family Transition Router (AFTR)」となる。
で、So-netの場合はSo-netのAFTRというのは存在せず、So-netから依頼されてIPoE,DS-Liteの提供を行っているインターネットマルチフィードのTransixサービスのAFTRとなる。So-netは完全に丸投げしているので情報の取得もインターネットマルチフィード/Transixのウェブサイトからとなるのだけど、残念ながらそっけないというか何も知らない人はどうしろっていうの?っていう程度の情報しかない。
取り敢えず、「DS-Lite 接続確認機種情報」の「Cisco 1812J」向け説明ページを見るとAFTRの情報が載っている。

フレッツ回線を契約した方の地域のNTTから2つあるどちらか1つを好みで選ぶ。

  • NTT東日本エリア
    • 2404:8e00::feed:100
    • 2404:8e00::feed:101
  • NTT西日本エリア
    • 2404:8e01::feed:100
    • 2404:8e01::feed:101

2017年3月31日現在の情報 (変更される可能性があるので注意)

FreeBSDの場合はトンネルデバイスにはGIF (generic tunnel interface)を使用(作成)する。
そして、トンネルの入口/出口の指定を行い、GIFインターフェースを起動し、ルーティング(IPv4のデフォルトのルートがあるならば消して新たにトンネルデバイスのインターフェースに向ける)を行う。

手動だと以下。

# ifconfig gif0 create
# ifconfig gif0 inet6 tunnel  WAN側IPv6アドレス  AFTRのアドレス  prefixlen 128
# ifconfig gif0 up
# route delete default
# route add default -iface gif0
# sysctl net.inet.ip.forwarding=1

ここまでで一応DS-Lite自体は出来ている。
ただし、LAN内の端末全てで個別に手動で名前解決の設定を入れているのでなければ使えないなどトラブる筈。
LAN内の端末がIPv4とIPv6の両方で正常に名前解決できるようDHCP等の整備も忘れずに。(重要)

関連記事: FreeBSD mpd5でIPv6接続 (PPPoE) その3

正常に動いたら上で手動でやったのを設定ファイルに書く。
/etc/rc.conf

cloned_interfaces="gif0"
ipv6_ifconfig_gif0="tunnel  WAN側IPv6アドレス  AFTRのアドレス  prefixlen 128"
defaultrouter="-iface gif0"
gateway_enable="YES"

4行目は sysctl net.inet.ip.forwarding=1 と同じ。

GIF関係は/etc/rc.confへの設定の書き方がFreeBSD10から完全に変わってて、しかも古い書き方は受け付けてくれないみたい。なまじ古い書き方の方を覚えていたもんだから今回ここでどエラく躓いた。手動コマンド打ちの方は(以前とコマンドが変わってないから)上手くいったが/etc/rc.confに書くと動いてくれないの何で?みたいな。簡単だからと高を括ってたら大失敗。

とはいえ、既にIPv4なLANがあれば設定4行追加でいけるというのだから簡単は簡単。
ファイアウォールで悩むかもだけど。

システムを再起動して正常に動くことを確認。

ipv6 test
http://ipv6-test.com/speedtest/でテストしてみる。
当然だけどIPv4, IPv6の両方がテスト出来なければおかしい。また、上の画像のようにISPの項目の表示名がTransixとかMf-native6*のようになる筈。ここがSo-netとかになってたらPPPoEで繋がってる。

IPoE, DS-Liteと同時に従来のPPPoEのIPv4,IPv6も使えるのでDS-Liteにしたら外から自宅のネットワークに繋げなくなるのが困るという場合でも大丈夫。もちろん設定は必要。

あと、DS-LiteはISPでNATをやってると聞くと、LAN内で自分でIPv4アドレス勝手に割り振るんじゃなくてISPから与えられたIPアドレスを使わなきゃならないんじゃないかと思っちゃたりする?けど、上みたいな感じなので既にLANで環境がある場合も一安心。