以前VyOS 1.4でIPv6 IPsec VPNを構築する で書いたIPv6を利用したIPsec VPNがいつの間にか切断されることがあり、今回VyOSの設定変更でVPNを安定化する事が出来たので紹介したいと思います。
実家とのVPNがたまに切れるので/etc/swanctl/swanctl.confみたらproposals何も入っていなかったのでとりあえず設定入れた。大体
— spg (@spg_games) April 21, 2025
ESPと同じproposalにしてmodpも合えば改善されるんじゃないかなぁ。
てか今時のVyOSの設定生成、全然追えていない...https://t.co/AB9Xms665y
背景
自宅と実家のネットワークをIPv6 VPNでつないでいます。
というのも昨今のFTTHではLAN配線方式のケースもあり、IPv4については
- あらかじめ決められたレンジ帯でローカルIPアドレスが割り当てられる
- 上位ルータの設定変更が出来ない
と結構制約もあり、片側のネットワーク環境のみがLAN配線方式であればもう片方のNW環境に対して接続しに行く、という事も出来るものの両環境がLAN配線方式になってしまうと相互にVPN接続が出来ません。
このためLAN配線方式でも直接インターネットにE2Eで接続出来るIPv6を活用してVPNをつなぐアプローチが冒頭紹介した記事の内容でした。
しかし利用しているとどうもVPNが切断状態になり、原因を調べました。
原因
あー、これ自宅側のIPv6が上位でフィルタかかっていて自発通信じゃないと許可されない感じだ。
— spg (@spg_games) May 2, 2025
IPsecはこちらから通信しているから辛うじてつながりはするものの、外部からICMPv6届かないからフィルタされているなーこれ。
あんま過去こーいう設定のところ見たことないけど...ドコモ光検討かなぁ。
原因は上記の通り上位ルータでのFWによる遮断で、ESPパケットが遮断され通信出来ない状態でした。
IKE SAはUDP 500, 4500で定期的なkeep-aliveの通信が発生しているため、確立されている状態でした。
解決方法(結論)
ping定期的に打っても疎通出来なくなったから、force-udp-encapsulation設定しておいた。とりあえずこれでESPパケットは流れなくなって、定期的にIKEでもUDP 4500で上位ルータこえて疎通しているっぽいから、しばらく様子見。
— spg (@spg_games) June 22, 2025
結論としてはStrongswanの設定でencap = yes
の設定があり、
VyOSで以下コマンドを両環境で設定する事でVPNトラフィックをESPではなくencapしたUDP 4500で通信をさせ、上位ルータのファイアウォールで遮断されずにVPNが安定化しました。
# Workaround
configure
set vpn ipsec site-to-site peer $branch force-udp-encapsulation
commit
save
IPv6のフィルタ事情
今回force-udp-encapsulation
の設定でVPNが安定化しましたが、あくまで上記設定は上位ルータのFWによって遮断されたため設定を行ったものであり、上位ルータで遮断されることがなければ不要な設定です。
参考までに自分が分かる範囲でIPv6の上位ルータでのフィルタ動作をまとめました。
通信事業者 | インターネット始点からの通信を遮断するか | |
---|---|---|
マンション | auひかり マンション タイプE | 遮断するがICMPv6 Echo Request については許可 |
へーベルメゾン | ギガプライズ | 遮断しない |
シャーメゾン | UNひかり | 遮断する |
※物件や設備によっては異なっている場合があると思います
こうしてみると自宅サーバでWebサーバを公開したり、自宅にVPN接続する場合にはギガプライズのフィルタなしがありがたいのですが、一方で自動的に割り当てられるIPv6アドレスがフィルタ無しでインターネットに公開される点は注意が必要です。
自分からすればそんなのOS側で設定すれば良いし(そもそもIPv6で直接アクセス出来る想定で遮断設定がデフォルトのケースが多い)自宅サーバを公開出来る選択肢が取れるメリットの方が大きいと思ってしまいますが、IoTなどで接続される機器やあまりNW知識が無い人に対してインターネットサービスを提供する観点になればフィルタ設定するのが通信事業者の考えだよなとも思います。
IPv6アドレス自体数の多さからスキャン難度(ホストの特定)に対していろいろと議論はありますが、
実際問題ESXiのvmk0(VMkernel NIC)とかがデフォルト設定がIPv6有効でhost clientに外部アクセスがセットアップ後出来てしまうとかはまずいと思うので、安全に倒すのであれば上位側でフィルタされていた方が良いなとも思います。どのみちASMなどの管理はちゃんとしっかりしないといけないですね。(個人的にESXiのVMkernel NICのデフォルト設定がIPv6有効設定はvExpertコミュニティでこれやばくね・・・?と言おうと思ったぐらい。)
まとめ
今回IPv6 IPsec VPNで上位ルータのフィルタによって接続が不安定化した事象について、VyOSのforce-udp-encapsulation
によるencapしたUDP 4500に設定変更する解決方法を紹介しました。
VyOSは片側がESPパケット、もう片方がUDP 4500で通信してrekey失敗するなども見かけたりするので、割とencap強制するこの設定は色々な場面で活用出来るかもしれません。(上位ルータでESP通さないケースなど)
またIPv6のフィルタについても通信事業者によって設定ポリシーが若干異なり、この部分もIPv6 IPsec VPNを構築する上で気を付ける必要があります。自宅は賃貸の無料インターネットを使っているのですが、IPv6を利用した外からの通信を受け付けないので別途小型ONUでドコモ光の契約も良いのかなーと思いました🤔
参考になれば幸いです。