概要
非常に便利なルータ越えアプリです。ドメイン、ルータの設定無しでルータ越えが出来ます。
インストールと実行
raspberry-piサイド
インストールは簡単。下記をターミナルで実行。
インストール後Tailscaleを有効化するために sudo tailscale up を実行します。
実行すると、ターミナルに https://login.tailscale.com/a/xxxxxx のようなURLが表示されます。 このURLにアクセスするとTailscaleログイン画面(下記1)が表示されます。
- 今回はGoogleアカウントでログインしました。
- ログインが完了するとこの画面になります。ここで「Connect」をクリック。
- この画面が表示されるとRaspberry Piをネットワークに追加され作業完了です。
これでRaspberry PIの設定は終了。
スマホサイド
PlayストアからTailscaleをインストールします。
- PlayストアからTailscaleをインストール
- Tailscaleを立ち上げるとこの画面が表示されますが”OK"をクリック。
- 設定が始まります。
- ログイン画面。Raspberry PIと同じアカウントでログインして下さい。
- ログインが完了するとこの画面が表示されます。Connectボタンを押して接続。
- 接続完了。
- 現在の登録状態です。
動作の確認
Raspberry PI、スマホ各々下記の操作を行って下さい。
Raspberry PI
Tailscaleインストール時にサービス(tailscaled)が自動起動設定になっています。
スマホ
手順は以下の通り。
- スマホをRaspberry PIのルータの外から接続する設定にする(スマホのWiFiをオフにして4Gにする)。
- 次に Tailscale を上げて Connect していることを確認
- ブラウザを上げてRaspberry PIにアクセス。URLは Tailscale から割り当てられた 100.xxx.xxx.xxxを使用します。
- PCからアクセス用 URL は "https://login.tailscale.com/admin/machines" にアクセスすると確認出来ます。
Raspberry PIにつなぎたいので rasp-1 の値、赤枠の部分がそのURLです。
- 今回は見守りカメラにつないでみました。 サーバへのアクセスはブラウザの URL欄に "https://100.124.170.127:443" と入力する事になります。
- Chromeでは問題無く繋がったのですが、Firefoxではダメでした。下記はChromeの画面。問題無く繋がり Streaming 出来ます。
動作の説明
多分こんな仕組みになっているんだと思います。
- Raspberry PI、スマホ、Taiscaleサーバ は共にルータが有るとする。Raspberry PI、スマホは Taiscale をインストール済み。
- Raspberry PIが sudo tailscale up を実行
- Raspberry PI
- 公開鍵(初回のみ公開鍵と秘密鍵を作製し保存)をTailscaleサーバに送る。図のオレンジのライン。
- Tailscaleサーバ
- Raspberry PIから公開鍵と Raspberry PI のグローバルIPを受け取る。
- Raspberry PIにリクエスト完了を送信。図の黒のライン。
- 以降 Raspberry PI は有る間隔で Tailscaleサーバに接続確認を行う。
- Raspberry PI
- スマホ側から接続要求が有ると、Tailscaleサーバは以下の操作を行う。
- Raspberry PIに対し定期的に行っている接続確認の返答に下記を加える。
- スマホのグローバルIPアドレス。
- スマホへのリクエストのタイミング。
- スマホには下記を返答する。
- Raspberry PIのグローバルIPと公開鍵
- Raspberry PIへのリクエストのタイミング。
- Raspberry PIに対し定期的に行っている接続確認の返答に下記を加える。
- Raspberry PI と スマホのリクエストがレスポンスに変わる仕組み(ルータ越えの仕組み)。
- Raspberry PI:教えられたタイミングでスマホに対して”空”のリクエストを行う。
- スマホ:教えられたタイミングでRaspberry PIに対して”公認鍵”を持ってリクエストを行う。
- お互いのルータが相手のリクエストをレスポンスと判断する仕組み。
- 信号自体にリクエスト、レスポンスの区別は無くルーターは下記で判断する。
- 送信元と送信先のペア(IPアドレス)
- プロトコルとポート番号
- 通信を送ってから一定時間内(タイムアウト前)に戻ってきたか
- 上記1,2は各自 "Tailscaleサーバ" より得ているので、3の条件を満たせば 各々のリクエストが相手のルータにレスポンスと判断される。
- Tailscaleサーバが絶妙なタイミングをRaspberry PI と スマホに指示していると思われる。
- ルータを越えた各データはインストールされているTailscaleアプリが処理する。
- 一度ルータを越えればその後の通信はRaspberry PI と スマホ間で行われる。 Tailscaleサーバはこの通信に全く関与しない。
MagicDNS
Tailscaleには ”MagicDNS” と呼ばれる DNS機能が有ります。この機能を使うとネットワーク内のデバイスと IPアドレスではなく マシン名(ホスト名)で簡単に接続できるようになります。マシン名は "https://login.tailscale.com/admin/machines" にアクセスすると確認出来ます。
赤矢印がマシン名です。Raspberry PIは "rasp-1" と登録されていました。いままでは Raspberry PIにIPアドレス(100.124.170.127)を使って接続していましたが、これが MagicDNS を使うと "https://rasp-1:433" で接続出来るという事。試してみると確かに繋がりました。もうIPアドレス(100.124.170.127) を覚える必要がなくなりました。
マシン名と同じ行の右端にある3個のドット(上図青い点線の部分)をクリックすると 追加機能のメニューが表示されます。追加機能として名前の変更、削除等が有ります。
もし MagicDNS が機能しない場合は、上部に有る "DNS" タブ(オレンジの丸)をクリックして下さい。 表示されたページに MagicDNS を設定する項目が有ります。 MagicDNS 有効とセットすれば使用出来るようになります。
最後に
非常に便利な "Tailscale” ですが、さらに公式な証明書と鍵を "Tailscale” が発行してくれる事が分かりました。これらを”見守りカメラ”で 使用しているサーバに適用して見ました。 "Tailscaleと見守りカメラ"で詳細を説明しています。参照下さい。