MAP-E (続)
前回の記事 ( MAP-Eあれこれ - Motoyuki's blog ) の続き。
MAP-EでのIPv4固定アドレスサービス
MAP-Eは複数ユーザで1つのIPv4アドレスの共有を可能にする仕組みですが、 1ユーザで1~8つの固定IPv4アドレスを提供するプロバイダもあります。 この場合、MAP-Eはポート変換を行わない単なるIPv4 over IPv6トンネルとして機能します。
つまり、IPv4 over IPv6トンネルのユーザ側 MAP CE (Customer Edge) と、 プロバイダ側 MAP BR (Border Relay) の2つのIPv6アドレスがわかれば FreeBSDの gif(1) が使えるはずです。
MAP CEのIPv6アドレスはIPv6 prefixなどから計算されますが、 この部分はRFC 7597の非公開のInternet draftに基づいているため、ネットを検索すると https://ipv4.web.fc2.com/map-e.html のサイトを参照しろという記事を多く見かけるわけですが、
OCN光 IPoE 固定IPv4アドレスサービスの場合
筆者はOCN光 IPoE IP8を契約してルータとしてYAMAHA NVR700-Wを利用していますが、
ルータの
show status tunnel
コマンドで得られるMAP CEのIPv6アドレスと、
https://ipv4.web.fc2.com/map-e.html
のサイトで計算されるアドレスが異なるわけです。
ということで前回の記事 ( MAP-Eあれこれ - Motoyuki's blog ) に戻って Internet draft に基づいて MAP CE のアドレスを計算すると(draftの Example 4そのまま)、
IPv6 prefixが
xxxx:xxxx:xxxx:xxxx::/56
IPv4固定アドレスが
192.0.2.1 (0xc0000201)
の場合、MAP CEのIPv6アドレスは
xxxx:xxxx:xxxx:xxxx:00c0:0002:0100:0000
となります。この値はYAMAHAのルータと同じでした。
OCN光IPoE IP8ではプロバイダ側からの説明にMAP BRアドレスの情報があるので、 これでMAP-EのIPv4 over IPv6トンネルの両端のIPv6アドレスがわかったことになります。
アドレス解決システム
NTTのフレッツ網ではIPv6 prefixは固定ではなく、メンテナンスなどの際に変わることがあります。 IPv6 prefixの変更がすぐにOCN側に通知されないという話で、IPv6 prefixが変わったときに 固定IPv4アドレスがしばらく使えなくなるようです(参考: ONU を交換したら MAP-E の固定 IPv4 が固定されなくなってしまった話 #Network - Qiita )。
この問題のために「アドレス解決システム」が用意されていて、
http(s)://[アドレス解決システムのURL]?hostname=[アドレス解決用ホスト名]
にアクセスすることでOCN側が変更を知ることができるということです。 YAMAHAのルータではLuaスクリプトでこの処理を行うようになっています。
アドレス解決システムのURLやアドレス解決用ホスト名、このURLにアクセスするための Basic認証のユーザ名とパスワードはOCN側からの説明に情報があります。
ひかり電話問題
ひかり電話対応については先人の知恵をお借りすることにします。
フレッツ光 ひかり電話を使いながら、IPoEのIPv6を自前ルータで直収する方法 - notokenの覚書
これで、FreeBSDでMAP-Eルータをつくるための情報が揃った、はずです。
MAP-Eあれこれ
NTTフレッツ網のIPoE接続で使われるMAP-Eトンネルのインターフェース識別子、 小川晃通氏らによる「徹底解説v6プラス」 https://www.jpix.ad.jp/files/v6plus-ebook.pdf では
この節で解説しているインターフェース識別子は、MAP-E の RFC である RFC 7597 に書いてある内容です。 v6 プラスでは、RFC になる前の提案文書である Internet Draft (draft-ietf-softwire-map)に記載されているインターフェース識別子を採用しています。 (中略) v6 プラスが採用している Internet Draft のバージョンは非公開であるため、本書では v6 プラスで利用しているインターフェース識別子の具体的なフォーマットを割愛しています。
とある。非公開なせいか、非公開情報をもとに自動的に計算してくれるサイト https://ipv4.web.fc2.com/map-e.html がよく利用されている。
検索してでてくる「IPv6家庭用ルータガイドライン 第3.0版」 https://www.jaipa.or.jp/guideline/pdf/v6hgw_Guideline_3.0.pdf をみると
国内サービスでは、RFC7597 ではなく draft-ietf-softwire-map-03 が使用されている。
とあるので、使用されているdraftの具体的なバージョンもわかった。
IETF自身がdraft-ietf-softwire-map-03を公開しているし、正式版 RFC7597との差分もわかる。 datatracker.ietf.org
IETF自身がdraftを公開しているのだから、 インターフェース識別子の具体的なフォーマットを解説した「徹底解説v6プラス」の改訂版が欲しいところ。
今日のところはここまで。
FreeBSD: setfibで複数の経路表を使う
FreeBSDではsetfib(1)を使って複数の経路を使い分けることができる。 FIBの仕組みについては下記の記事で許さんが解説されているので参照していただくとして、 FreeBSD 14.2ではまったので記録しておく。
FreeBSDにおけるFIB [Share FreeBSD based information]
インターフェースへの経路
net.add_addr_allfibsのデフォルトは0に変わっているので、/boot/loader.confで
net.fibs="2" net.add_addr_allfibs="1"
と書かないとFIBが0以外の場合にインターフェースへの経路が自動的に追加されない。
net.add_addr_allfibsを1に設定しても、
% netstat -rn4 -F 1 Routing tables (fib: 1) Internet: Destination Gateway Flags Netif Expire 127.0.0.1 link#3 UH lo0 172.26.xxx.0/24 link#2 U re1 192.168.xx.0/24 link#1 U re0
と自分のアドレスへの経路が追加されない。このため、/etc/rc.confで
static_routes="re0 re1" route_re0="-host 192.168.xx.x -iface lo0 -fib 1" route_re1="-host 172.26.xxx.xx -iface lo0 -fib 1"
と明示的に設定する必要がある。
% netstat -rn4 -F 1 Routing tables (fib: 1) Internet: Destination Gateway Flags Netif Expire 127.0.0.1 link#3 UH lo0 172.26.xxx.0/24 link#2 U re1 172.26.xxx.xx link#3 UHS lo0 192.168.xx.0/24 link#1 U re0 192.168.xx.x link#3 UHS lo0
default route設定がエラーになる
FIBが0以外の場合のdefault routeは/etc/rc.confで
defaultrouter_fib1="172.26.xxx.1"
とすればいいはずだが、route(8)が Invalid argument のエラーで設定できないことがある。
# route add default 172.26.xxx.1 -fib 1 add net default: gateway 172.26.xxx.1 fib 1: Invalid argument
同様の問題はFreeBSD bugzillaなどでもいくつか報告がある。
- Solved - FreeBSD 14 and route in non-zero FIB | The FreeBSD Forums
- 282744 – setfib does not add the default gateway to the second routing table.
- 255264 – Unable to add default route for fib
私が試した範囲では、 default routeを設定しようとしたインターフェースのstatusがactiveではないときにこの問題が発生した。 適当なswitchなどにつないでactiveにすれば大丈夫らしい。
# route add default 172.26.xxx.1 -fib 1 add net default: gateway 172.26.xxx.1 fib 1
ネットワークに接続しない状態で設定を試していたので、 これに気付くまで無駄な時間をかなり費やしてしまいました...。
FreeBSD: setfibで複数の経路表を使う
FreeBSDではsetfib(1)を使って複数の経路を使い分けることができる。 FIBの仕組みについては下記の記事で許さんが解説されているので参照していただくとして、 FreeBSD 14.2ではまったので記録しておく。
インターフェースへの経路
net.add_addr_allfibsのデフォルトは0に変わっているので、/boot/loader.confで
net.fibs="2" net.add_addr_allfibs="1"
と書かないとFIBが0以外の場合にインターフェースへの経路が自動的に追加されない。
net.add_addr_allfibsを1に設定しても、
% netstat -rn4 -F 1 Routing tables (fib: 1) Internet: Destination Gateway Flags Netif Expire 127.0.0.1 link#3 UH lo0 172.26.xxx.0/24 link#2 U re1 192.168.xx.0/24 link#1 U re0
と自分のアドレスへの経路が追加されない。このため、/etc/rc.confで
static_routes="re0 re1" route_re0="-host 192.168.xx.x -iface lo0 -fib 1" route_re1="-host 172.26.xxx.xx -iface lo0 -fib 1"
と明示的に設定する必要がある。
% netstat -rn4 -F 1 Routing tables (fib: 1) Internet: Destination Gateway Flags Netif Expire 127.0.0.1 link#3 UH lo0 172.26.xxx.0/24 link#2 U re1 172.26.xxx.xx link#3 UHS lo0 192.168.xx.0/24 link#1 U re0 192.168.xx.x link#3 UHS lo0
default route設定がエラーになる
FIBが0以外の場合のdefault routeは/etc/rc.confで
defaultrouter_fib1="172.26.xxx.1"
とすればいいはずだが、route(8)が Invalid argument のエラーで設定できないことがある。
# route add default 172.26.xxx.1 -fib 1 add net default: gateway 172.26.xxx.1 fib 1: Invalid argument
同様の問題はFreeBSD bugzillaなどでもいくつか報告がある。
- Solved - FreeBSD 14 and route in non-zero FIB | The FreeBSD Forums
- 282744 – setfib does not add the default gateway to the second routing table.
- 255264 – Unable to add default route for fib
私が試した範囲では、 default routeを設定しようとしたインターフェースのstatusがactiveではないときにこの問題が発生した。 適当なswitchなどにつないでactiveにすれば大丈夫らしい。
# route add default 172.26.xxx.1 -fib 1 add net default: gateway 172.26.xxx.1 fib 1
ネットワークに接続しない状態で設定を試していたので、 これに気付くまで無駄な時間をかなり費やしてしまいました...。
Aruba Instant On の不具合
不具合
しばらく前に自宅ネットワークのスイッチ (以下 SW) と無線LANアクセスポイント (以下 AP) をHPEの Aruba Instant On に入れ替えた。 スマートホンのアプリを使ってリモートから自宅ネットワークの状況の確認やメンテができるので 便利に使っていたのだけど、先月半ば頃からおかしな挙動がでてきた。
- 外部への接続が遮断されて復活するときに SW - AP - 別のAP - SW というループが発生することがある。 他のAPを上流とするAPは有線 port が機能しない仕様なので、本来であれば起きるはずがない現象。
- 1日に数回 SW や AP が offline になって通信できなくなる。数分程度で復活する。
SW や AP が offline になるという現象は他でも起きているようで、 Aruba Instant On offline で検索 するといくつか出てくる。でも「サポートに連絡」だけで解決方法の情報はない。
解決
ふと、家の SW や AP のうち最初に使い始めた AP を別な場所に異動させようと思って一時的に外したところ 問題が解決してしまった。
考察
HPE Aruba の無線 LAN アクセスポイントには Aruba Instant On と仮想コントローラ対応の Aruba Instant AP (unified AP とも言う) という二つの製品ラインがある。 この二つは少なくとも一部の製品についてはハードウェアはほぼ共通で、 Instant On の AP である AP11 をファームウェア書き換えで unified AP として使うことが可能。 システム的にも似通ったものと想像できる。 v2n.hatenablog.com
後者の仮想コントローラ型 AP システムの場合、
- 最初に 1 つの AP を設定する。この AP が仮想コントローラとして機能する。
- 仮想コントローラの AP と同一の有線ネットワークに AP を追加すると自動的に無線クラスタに AP が追加される。
- 仮想コントローラの AP が電源オフなどで offline になった場合、他の AP が自動的に仮想コントローラを引き継ぐ。
という動作になる。 追加した AP は broadcast で仮想コントーラの AP を見つけてそこから情報をもらって自動的に設定していると 考えられる。
Aruba Instant On も同じようなシステムと考えると、
- 最初に設定した AP がコントローラとして動作していた。
- 何らかの理由でコントローラの AP の動作がおかしくなった。
- AP を再起動しても不具合は解消されなかったので、 AP 内部の不揮発性メモリに記録された情報がおかしくなった可能性が考えられる。
- 不具合の原因となった AP を Instant On のクラスタから外すことで、他の SW か AP がコントローラを引き継いだ。
- 新しいコントローラには不具合の原因までは引き継がれなかったので問題は解決した。
というシナリオだろうか。あくまでも想像レベルだけど。
ただ、 (不具合が解消した際に) コントローラの役割を引き継いだ AP なり SW を調べる方法がない (Instant AP のシステムであれば仮想コントローラに指定した IP アドレスをどの AP が持っているか調べればいい)。
zfs replace
実家に置いてあるサーバは6TBのハードディスク4台でFreeBSDのzfsでraidzを組んでいるのですが、
しばらく前から1台がエラーを出すようになっていたので同容量の新しいディスクを買って入れ替えました。
hot swapには対応していないハードなので電源落として入れ替えてから zpool replace するだけですが、
resilverに3日近くかかるのか…。
AMD Turion II Neo N54L Dual-Core という大昔の遅いCPU(むかし流行したHP Microserver)なのが原因ですかね。
motoyuki% zpool status -v
pool: zdata
state: DEGRADED
status: One or more devices is currently being resilvered. The pool will
continue to function, possibly in a degraded state.
action: Wait for the resilver to complete.
scan: resilver in progress since Tue Nov 1 23:09:18 2022
1.98T scanned at 62.1M/s, 1.49T issued at 46.7M/s, 9.94T total
363G resilvered, 14.94% done, 2 days 04:46:54 to go
config:
NAME STATE READ WRITE CKSUM
zdata DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
diskid/DISK-WD-WX61D68AARTA ONLINE 0 0 0
replacing-1 DEGRADED 0 0 0
15225623215183088814 UNAVAIL 0 0 0 was /dev/diskid/DISK-WD-WX51D583K0PC
ada2 ONLINE 0 0 0 (resilvering)
diskid/DISK-WD-WX51D68AP748 ONLINE 0 0 0
diskid/DISK-WD-WX61D686F8F2 ONLINE 0 0 0
errors: No known data errors