苦手を補い合う関係

今の個人用金盾越えシステムは、複数プロトコルで同時にVPNトンネルを張って、実際どれを使うかは手動で切り替えるというしくみにしています。

これまでの経験からすると、金盾は地域ごとに挙動がちがうように見えていて、全プロトコルが通るときには最強の安定性を誇るZeroTierが、四川省や上海ではほとんど使い物にならないみたいなことがあったりします。つまり、どこでも安定して使える万能プロトコルは今のところなさそうです。

なので、各回線の通信品質を自動で計測して、いい回線に自動で切り替えるみたいなことってできひんかなあ。

ChatGPTへのお願い文

現在ミニPCを旅先用モバイルルータとして使っていて、実家にあるサーバに4つのプロトコルで同時にVPNトンネルを張っています。

旅先用ルータではOpenWrtでルート制御をしているのですが、4つのうち最も通信品質のいいVPNトンネルをデフォルトルートにするしくみを構築したいと思っているのですが、どうやって実現するのがいいでしょうか?

通信品質をどうやって測るかと、その通信品質から自動で判別してデフォルトルートを切り替えるスクリプトを考えてほしいです。

▼前提
デフォルトルートを切り替えるスクリプトはすでにあります。
VPNトンネル1用:route1.sh
VPNトンネル2用:route2.sh
VPNトンネル3用:route3.sh
VPNトンネル4用:route4.sh

デフォルトルートがどう設定されていても、OpenWrt上では
VPNトンネル1:ping -c 3 -I 192.168.1.1 1.1.1.1
VPNトンネル2:ping -c 3 -I 192.168.1.5 1.1.1.1
VPNトンネル3:ping -c 3 -I 192.168.1.9 1.1.1.1
VPNトンネル4:ping -c 3 -I 192.168.1.13 1.1.1.1
のように送信元を固定した通信を行えば、どのトンネルを通すかが制御できます。

旅先用モバイルルータも実家サーバも、Proxmox VE環境で構築しています。


IPアドレス周りは、ここで公開するためにちょっと実際とは変えています。

プロトコルは本当は5種類(ZeroTier・SoftEther・OpenConnect・VLESS・TrustTunnel)なんですが、VLESSはpingなどを通さなくて通信品質の計測がむずかしそうなのではずしています。
(VLESSは厳密にはVPNではなくプロキシなので。)
—2026.01.31追記

pingでなくcurlで通信品質を計測する方式を採用することにしたので、VLESSも切り替え対象に含めることができるようになりました。

—追記ここまで

苦手を補い合う関係

さっきのお願い文から何往復もやりとりをして、いい感じのしくみができあがりました。ChatGPTさんいわく「業務用回線切替ロジックとして通用するレベル」だそうです。

実際某大きな会社含めこれまで自分が運用管理してきた業務用回線でも、ここまでのことはやってなかったので、まさに道楽。

これまでAIをあれこれシステム構築に使ってみて、今のAIはプログラムとかスクリプトを書くのはそれなりに得意だと思ったんですが、

デフォルトルートがどう設定されていても、OpenWrt上では VPNトンネル1:ping -c 3 -I 192.168.1.1 1.1.1.1 VPNトンネル2:ping -c 3 -I 192.168.1.5 1.1.1.1 VPNトンネル3:ping -c 3 -I 192.168.1.9 1.1.1.1 VPNトンネル4:ping -c 3 -I 192.168.1.13 1.1.1.1 のように送信元を固定した通信を行えば、どのトンネルを通すかが制御できます。
今回自分でこんなふうにお膳立てしておいたみたいな基盤設計については、AIはまだそこまで得意ではないように思います。世の中にそんなにサンプルがないからかな?

なので基盤やさん+AIのタッグはけっこう相性がいいんじゃないかと最近思っています。