フレッツのv6網の網内同士で通信したい。
フレッツのv6オプションを申し込んだら、フレッツ網内(広域イーサネット)内部での通信ができるようになる。しかも追加料金無し!
これはいいオモチャになりそうだとずっと思っていて、ようやく一通りをLinuxルータで扱えるようになったのでメモとして残します。
フレッツのIPv6オプション
このオプションが有ると、インターネットを経由せずに通信が可能です。
初期ONに切れてる人もいるようですが、私個人としてはデフォルト有効は素晴らしいのではないか、などと思ってる。ISP経由しなくても隣近所の一般のご家庭と通信ができるようになる。しかも無料で。NTT東西がNTT法で縛り付けられた結果で生まれた謎のインターネット、それが広域イーサネットです。
NTTでフレッツ・v6オプションを契約している人は切れた方がいい(デフォルト設定でのセキュリティは皆無) - Qiita
設定例
今回はどちらの拠点間もLinuxルーターで構成することにした。
## mode ipip6 ## 拠点1ルーター ip -6 tunnel del tun1 mode ip4ip6 remote 2001:a2xx:xxxx:a300:b2be:xxxx:xxx7 local 2001:a25xx:3xxx:3700:xxxx:xxxx:c53b ip -6 tunnel add tun1 mode ip4ip6 remote 2001:a2xx:xxxx:a300:b2be:xxxx:xxx7 local 2001:a25xx:3xxx:3700:xxxx:xxxx:c53b ip link set tun1 up ip addr add 172.16.1.2/30 dev tun1 ip route add 192.168.2.0/24 via 172.16.1.1 dev tun1 iptables -I INPUT -i tun1 -j ACCEPT iptables -I FORWARD -i tun1 -j ACCEPT iptables -I OUTPUT -o tun1 -j ACCEPT iptables -I FORWARD -o tun1 -j ACCEPT
ローカル側とリモート側の違いは remote と local だけなので、同じ設定をリモートとローカルを入れ替えて通すだけ
## 拠点2ルーター ip -6 tunnel del tun1 mode ip4ip6 local 2001:a2xx:xxxx:a300:b2be:xxxx:xxx7 remote 2001:a25xx:3xxx:3700:xxxx:xxxx:c53b ip -6 tunnel add tun1 mode ip4ip6 local 2001:a2xx:xxxx:a300:b2be:xxxx:xxx7 remote 2001:a25xx:3xxx:3700:xxxx:xxxx:c53b ### 以下IP以外はヤッてることが同じ ip link set tun1 up ip addr add 172.16.1.2/30 dev tun1 ip route add 192.168.1.0/24 via 172.16.1.1 dev tun1 iptables -I INPUT -i tun1 -j ACCEPT iptables -I FORWARD -i tun1 -j ACCEPT iptables -I OUTPUT -o tun1 -j ACCEPT iptables -I FORWARD -o tun1 -j ACCEPT
上記設定に必要なもの
modprobe ip6_tunnel
パケットのフォワーディングをできるような設定(ルーターに使ってるなら最初から入れてるはず)
$ sysctl net.ipv4.conf.all.forwarding net.ipv4.conf.all.forwarding = 1
rp_filter はオフ
$ sysctl net.ipv4.conf.tun1.rp_filter net.ipv4.conf.tun1.rp_filter = 0
greの場合。
ipip6(ip4ip6) のところが、grev6 になる。
ip -6 tunnel del tun1 ip -6 tunnel add tun1 mode grev6 local 2001:a2xx:xxxx:a300:b2be:xxxx:xxx7 remote 2001:a25xx:3xxx:3700:xxxx:xxxx:c53b
GRE のパケットを許可する
iptables -A INPUT -p gre -j ACCEPT iptables -A OUTPUT -p gre -j ACCEPT
拠点間通信の速度
Linux ルータの限界が200Mbps 程度なのでそれまで出てた。速度上限がわからない。上限が見えないなんて、サイヤ人みたいだな。
フレッツのv6オプションについて知っておくこと。
広域イーサネットでIPv6で通信ができる。IPv6は自動的に払い出される。そして半固定。NTT側からRAで払い出される。
ひかり電話契約の有無で、取得方法が異なる。ひかり電話なしの場合、RAで取得する。ひかり電話契約があるとNTTのHGWからDHCPv6-PDで払い出される。*1
いずれの場合もv6 対応したOSを挿すだけでv6が使えるようになる。
v6広域イーサネットを経由してインターネットに出ていくにIPoEを使うには契約が必要。だが、インターネットに出ていかないならISP契約が必要ない!でも通信はできる。あとはわかるな。
IPv6があるとフォールバックする
IPoE契約してないPPPoEのISP(IPv4)のまま、v6を有効にするとインターネットつながらない「壊れたv6インターネット」になってしまう。そのためインターネット接続開始時に遅延を感じてしまう。
これは、IPv6通信が失敗するまでIPv4を通信をしないv6優先のためで、iOSなどはSafariでページを開く際にこのフォールバックが発生し体感でモタツキを感じてしまう。
フォールバックによる遅延防止→IPv6 をLAN内部に展開しない
拠点間通信にv6を使うのであれば、ルーターだけIPv6を受け取ってLAN内部はv4で運用すれば良いわけです。つまりLAN内部へフレッツIPv6のパケットを通さなければ問題は解決する。
iptables(ip6tables) で v6 のLAN内部へFORWARDを止めてしまえばいい。
今回はルーターだけにv6 アドレスを持って拠点間通信させる予定。なので ipt6ables のINPUTでルーター(CPU)側にだけパケットを通せば、フォールバック問題は見て見ぬふりができる。
v6 インターネットへLANを公開しない
ip6tables でRA/DHCPv6 などICMPパケットを止めてしまえるので、LAN内部の各種機器がフレッツv6 アドレスを受け取らずにすみ、LANがインターネットに公開されることもなくなる。
ひかり電話ありの場合は、HGWで設定ができる。
ひかり電話なしの場合は、ip6tables で止めてしまえばいい。ググってもパススルーとか対応機器を用意しましょうとかあれこれ書いてあるけど、自由なソフトウェアで構成できないルーターはちょっと・・・