はじめに
ラボは学内にないため、ラボのネットワーク環境からはIP認証で学術ジャーナルにアクセスする手段がない。しかも、学術ジャーナルへのアクセスが必要になる頻度はかなり高い。
というわけで、解決策はVPN経由でアクセスするしかない。ただし、これにもいくつか問題がある。
- 必要なときだけVPNに接続する方式だと、長い目で見ればかなりの時間を無駄にすることになる。
- ずっとVPNに接続したままにすると、ネットワークを切り替えるたびに再接続が必要になる。しかもVPNの接続自体が不安定で帯域も細く、体感はかなり悪い。
- VPNがすべてのトラフィックを引き受けるため、VPNが不要なリソースへのアクセスまで遠回りになる。加えて、ローカルネットワーク内のリソースには接続できなくなってしまう。
そこで少しだけ時間をかけて、「Surge + Snell v5 + frp + Subnet ポリシーグループ」という構成を考え出し、この問題をシームレスに解決できるようにした。
前提条件
簡単に言うと、全体の流れは以下のとおりだ。
- 学内ネットワーク環境にある24時間稼働のサーバーに、Snell v5プロキシを立てる。
- 学内ネットワークはNAT越えが非常に難しいので、手間を省くためにfrpでSnell v5プロキシをパブリックIPを持つサーバーまでトンネリングする。
- Surge for MacをインストールしたMacBookで簡単なルールを書き、Subnetポリシーグループ経由で快適にネットを使う。
もしこの構成を試してみたいなら、以下が必要だ。
- 学内ネットワーク上で24時間稼働するPC/サーバー
- macOSを使っていて、Surge for Macを購入していること
- frpでNAT越えをするための、安定したパブリックIP付きサーバー
実例
具体的なデプロイは非常に簡単なので、ここでは割愛する。問題があればコメント欄で聞いてほしい。
シームレスに使えるようにするカギは、Subnetポリシーグループを作ることだ。私の場合は、以下のようなポリシーにしている。
- 学内ネットワーク(SSID: eduroam / ShanghaiTech / Jayden)に接続しているときは、このポリシーグループのトラフィックを直接接続にする。この場合は学内プロキシを経由して遠回りすることはない。
- 上記以外の場合は、このポリシーグループのトラフィックをすべて学内プロキシ経由にする。

Subnet ポリシーグループ
あとは関連ドメイン、たとえばpnas.org(PNAS)、nature.com(Nature)、cell.com(Cell)、science.com(Science)などを上記のSubnetポリシーグループに割り当てればいい。
ドメイン以外にも、学内の一部のIPをこのSubnetポリシーグループに割り当てれば、学内リソースへのアクセスも実現できる。

学内ネットワーク環境でのアクセスが必要なリソース
おわりに
その後、VLESSにもリバースプロキシ機能が追加された。ただ、この構成はもう長いこと安定して使えているので、今さら乗り換える気はない。興味がある人は試してみてほしい。
あと、frpを動かすパブリックIPサーバーは、中国本土向けの回線がしっかりしている必要もある。そうでないと、使っていても何とも言えない感じになる。
以前、香港にあるサーバーを試したことがある。物理的な距離が近い分、理論上はもっとシームレスに使えるはずだと思っていた。ところが実際には回線の質がいまいちで、ときどきかなりカクつくことがあった。
その後、回線品質の高いアメリカのサーバーに変えたところ、かなり安定している。
frpには実はほかの代替手段もある。ただ、もう弄る気力がなかったので、結局frpをそのまま使い続けている。
もし同じような悩みを抱えているなら、この記事が少しでも役に立てばうれしい。