前提条件
気持ち
長居する施設にフリーWi-Fiがあると使いたくなるが、最近はhttpsなサービスがほとんどとはいえ盗聴などがこわい。
TailscaleのExit Nodeを使えば通信を暗号化できるが、いちいち切り替えるのが面倒であり、有効化するのを忘れたりすると意味が無い。
だからと言って常に有効にするのも癪に触る。自分は自宅のWi-Fiや携帯回線を信頼しているので、これらに接続しているときにExit Node使うのは無駄でしかない。
自動的に有効化&無効化したい!
ショートカット
iPhone/iPadで使える仕組みとして「ショートカット」というものがあり、結構いろいろなことができる。色々なアプリなどが「アクション」というショートカットの部品になるものを提供しており、利用者はこれを組み立ててショートカットを作成する。
Tailscaleもアクションを提供していて1、「Get Status」「Ping Device」「Send File」などなど。この中に「Use Exit Node」「Stop Using Exit Node」というものがあり、Exit Nodeを使用するかどうかをショートカットから操作することができる。
ショートカットAppには「オートメーション」という機能があって、ある事柄が起こったとき自動的にショートカットを実行することができる。設定できる事柄の中には、「Wi-Fiネットワークに接続したとき」と 「Wi-Fiネットワークから接続解除されたとき」があり、これと前述のアクションを組み合わせると愉快なものが作れ…ました(ました編集)。
設計
状況に応じてExit Nodeの使用を切り替えるショートカットを作成する。動作はこんな感じ。ショートカットが起動されたとき、Wi-Fiネットワークに接続しているかどうかを確認する。Wi-Fiネットワークに接続していないか、信頼しているWi-Fiネットワークに接続している場合はExit Nodeの使用をやめる。そうでない場合、信頼できないWi-Fiネットワークに接続している場合はExit Nodeの使用を開始する。
文章だとややこしいので、テーブルにするとこんな感じ(あんま変わらないか?)。
Wi-Fi接続なし | 信頼できるWi-Fi接続 | 信頼できないWi-Fi接続 |
---|---|---|
Exit Nodeを使用しない(携帯回線を想定) | Exit Nodeを使用しない | Exit Nodeを使用する |
このアクションを、前述のオートメーションで「Wi-Fiネットワークに接続したとき」と「Wi-Fiネットワークから接続解除されたとき」に実行するように設定する。
ネットワーク接続が変わるタイミングに実行することで、ネットワークの状況に応じてExit Nodeを使用するかどうかを切り替えてくれるようになる。うれしい!
試したこと(失敗)
最初、Wi-Fi接続時と切断時で別々のショートカットを作成していた。接続時に信頼できるWi-Fiネトワークかを判定して、信頼できないものであったら接続する。切断時は単にExit Nodeの使用をやめるだけ。これでも動きそうだが、うまくいかないことが多かった。
具体的には、信頼しているネットワークから信頼していないネットワークに移動したとき、Exit Nodeの使用を始めた直後にやめてしまう。といった感じ。推測だけど、オートメーションで実行されるのは必ずしも順番通りではないのでは?と思った。
接続/切断後にショートカットが実行されること自体は間違いないので、両方で同じショートカットを実行&ショートカット側で状況を判定して動作を変えることで解決した。Foo↑
実装
がんばる。
完成品
https://www.icloud.com/shortcuts/9f8dc1eaad164f45be98944f287da961