mioひかりのIPoE・DS-LiteオプションをFreeBSDで利用する
先日mioひかりでもIPoEオプションが追加され、IPoE経由でインターネットに接続できるようになりましたので、これを家のFreeBSDルーターでも使ってみることにしました。
まずはIPv6(IPoE)にてインターネットに接続されている必要がありますので、IPv6の設定を行います。通常自宅向けルーターはWAN側のポートと、LAN側のポートがあると思いますので、WAN側にはONUを、LAN側はローカルのネットワークを接続します。(IPoEで複数台でIPv6でインターネットに接続する場合、ハブでONUとLAN側端末をフラットに接続しても、それぞれにRouter AdvertisementでIPアドレスが降られますのでこれでも使えます。) 今回はまだよくあるPPPoEルーターのままの接続です。
# /etc/rc.conf
ipv6_network_interfaces="lo0 re0 em0"
ipv6_activate_all_interfaces="YES"
ip6addrctl_policy="ipv6_prefer"
ifconfig_re0_ipv6="inet6 accept_rtadv"
rtsold_enable="YES"
# /etc/sysctl.conf (要らないかも)
net.inet6.ip6.accept_rtadv=1
# 再起動後
# ifconfig
re0: ...
inet6 2409:10:8680...
ルーターマシン上、re0(reゼロ)がWAN側、em0がLAN側のインターフェースです。これで再起動(または# /etc/netstart)すると、IPv6のアドレスが降ってきますのでインターネットに接続できるようになるはず。(それでもだめな場合ファイヤーウォール設定を一旦オフにしてみてください。)
$ ping6 google.com
PING6(56=40+8+8 bytes) 2409:10:8680:... → 2404:6800:4004:800::200e
16 bytes from 2404:6800:4004:800::200e, icmp_seq=0 hlim=55 time=2.908 ms
次にDS-LiteでIPv4のインターネットに接続できるようにします。ルーターマシンで、以下を実行します。IPv6-to-IPv6のトンネルを作成後、ルーターのデフォルトゲートウェイをトンネルインターフェース(gif0)に向けます。(これでIPv6のトンネル内にIPv4のパケットも流れるらしい)
# ifconfig gif0 create
# ifconfig gif0 inet6 tunnel <re0のIPv6アドレス> 2404:8e00::feed:100 prefixlen 128
# ifconfig gif0 up
# sysctl net.inet.ip.forwarding=1
# route add default -interface gif0
ルーターマシンからIPv4でインターネットに接続できるようになります。また、ルーターマシンにぶら下がっているLAN内の端末からも同様にIPv4でインターネットに接続できるようになります。(LAN内の端末のIPv4デフォルトゲートウェイはルーターマシンになっているはず)
設定を保存します。
# /etc/rc.conf
cloned_interfaces="gif0"
ipv6_ifconfig_gif0="tunnel <re0のIPv6アドレス> 2404:8e00::feed:100 prefixlen 128"
defaultrouter="-interface gif0"
gateway_enable="YES"
# /etc/sysctl.conf
net.inet.ip.forwarding=1
IPoE(DS-Lite)経由だとこんな感じで高速で安定するようになりました。
ただ、IPoE(DS-Lite)の制約として、IPv4のアドレスはプライベートアドレスになるため、外に向けてサービスを提供できなくなります。(PPPoEはグローバルIPアドレス) NATの中にあるので、マンションの共有インターネットのような状態です。したがって、外部に向けてサービス(VPNサーバーやWebサーバーなど)を提供したい場合は従来通りPPPoE接続を使用し、かつルーティングを設定する必要がありますので、次はそれについて説明しようと思います。
※冷静に考えるとこのオプションが800円/月なのでちょっと高いですね… 500円くらいになって欲しい。
実行環境
FreeBSD 10.1-RELEASE-p30 #0 r296428
参考サイト