FreeBSD 13 での IPv6 tunneling

IPv6アドレスをVPNでつないだ先のネットワークに gif tunnel で伸ばしているのだが、FreeBSD13になったらこれまでの設定で急に繋がらなくなった。 /etc/rc.conf での設定としてはこんな感じ(だった)。

network_interfaces="gif0"
ifconfig_gif3="create tunnel srcIPv4 destIPv4"
static_routes="ipv6"
route_ipv6="-inet6 default -ifp gif0 ::1"
ifconfig_em0_ipv6="IPv6アドレス"

これで gif0 にトンネルができ、

route add -inet6 default -ifp gif0 ::1

で外界と通信できた。がFreeBSD13にしたら来ない。ん?

ping6 -w -I gif0 ff02::1
ping6: illegal option -- w

えええ、なんでえ、man ping6 と。うっ、ないし。 よく見ると ping と統合されて -w オプションなくなっとる。 -y になった? じゃこうか。

ping -6 -y -I gif0 ff02::1
ping6: connect() ssend: Network is unreachable

うげー。分からん。ping(8) の man で ff02::1 検索して発見。 こうでした。

ping -6y ff02::1%gif0
ping: UDP connect: Can't assign requested address

てことで、色々調べた結果 gif にリンクローカルアドレスが ついてないことがわかり、対処としてrc.conf書き換えた。 古い変数がいかんかったのとgifデバイスへの static route は fe80::1%GIFデバイス と書かないとだめらしい。てことで:

cloned_interfaces="gif0"
ifconfig_gif3="tunnel srcIPv4 destIPv4"
static_routes="ipv6"
route_ipv6="-inet6 default fe80::1%gif0"

はい来ました来ました。