フリーWi-FiでTailscaleのExit Nodeに自動接続するショートカット

前提条件

  • iPhone/iPad
  • 常時稼働しているTailscaleのExit Nodeを持っている

気持ち

長居する施設にフリー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