2024-05-14

Tailscale という P2P メッシュ型 VPN(2024-05-19 一部追記)

 

 

 我が家における VPN クロニクル 

2016年10月

Raspberry Pi3 B に OpenVPN をセットアップし、Tailscale の Subnets & Exit Node 相当の位置づけで使用していました。

 

 

2019年4月

Wireguard の存在を知り OpenVPN に代えて Raspberry Pi3 B に Wireguard VPN を再構築しました。

 

Wireguard はほかの VPN 方式のような Client - Server 型ではなく Peer to Peer 方式です。

 

なお Tailscale サービスは P2P 方式ゆえに成り立っています。

 

 

2019年8月

Wireguard の IPv6 化をしました(接続は IPv4)。

 

 

2020年4月

VDSL から光ファイバーに回線環境が変わる。

 

 

2021年2月

@nifty(Nojima)の "不"公平制御を嫌って楽天ひかりに乗り換えました。

 

Wireguard は PPPoE とクロスパス併用環境で、PPPoE で接続して利用していました。

 

 

2021年4月

Wireguard と Rakuten Casa のために IPv6 でポート開放し、Wireguard は IPv6 接続に変更し、完全 IPv6 化をしました。

もちろん IPv4 通信もできます。

 

 

2022年2月

楽天ひかり から en ひかり に事業者変更をしました。

 

単純にコストダウンのためで、楽天ひかり に不満があったわけではありません。

 

en ひかり は PPPoE 併用は追加料金発生なので不使用です。

 

Wireguard はすでに IPv6 化していたので何ら問題なく接続です。

 

 

2023年5月

Tailscale を導入し、自前の Wireguard はお役御免となりました。

 

それにしても Tailscale は衝撃的で、ワタシが Wireguard を知った 2019年には、すでに Tailscale Inc. がカナダに設立されています。

 

この発想をしたヒト(たち?)は凄い。

尊敬に値します。

 

 

現 在(2024年5月)

自前の Wireguard 接続環境から Tailscale に代えており、また Asterisk も使わなくなったので Raspberry Pi3 B は遊休です。

 

Tailscale の Subnets & Exit Node は GL.iNet AXT1800 または GL.iNet A1300 に設定してあります

 

メインルーターは GL.iNet MT2500A から YAMAHA RTX830 に戻しています

 

GL.iNet MT2500A は現在遊休です。

 



 

 

 

 Tailscale は P2P メッシュ型 VPN 

Tailscale は同じアカウントでログインした機器間でインターネット空間を越えて VPN 通信できます。

 

(ほかのアカウントに招待し、ほかのアカウント所有者がこれを受諾した場合もインターネット空間を越えて VPN 通信できます。)

 

 

 

デバイスに Tailscale をインストールして初めて登録するとShared Address(100.64.0.0/10)がランダムに割り当てられ、登録削除するまでこのアドレスは変わりません。

 

  Shared Address は Carrier Grade NAT 向けに制定されたアドレス体系

 

Tailscale の調整サーバーがアカウントに紐付いた Shared Address を割り当てますが(初回登録時)、このアドレスはアカウントごとなので、1アカウントあたり 419 万アドレスあり、枯渇することはありません。

  

 

ユーザーから見てほかのサービス(キャリアサービスなど)とのアドレス競合が発生し、不具合の原因になることを防止のため、最近のアップデートで任意アドレスに変更できる機能が加わりました(2023年12月)。

 

 

任意といっても Shared Address の中の任意アドレスで、変更するにはいったんログオフし、管理画面から "Edit machine IP for ~~" から変更します。


変更後、再ログインで新しいアドレスが有効になります。

 

ーーーーー

 

 

 

 

事例ですが、例えば Mac と スマホに Tailscale をインストール・登録してログインしておけば、スマホから Mac のフォルダやファイルにアクセスすることが可能になったり、ssh でログインすることが可能になったりします。

 

これは P2P VPN でお互いのデバイスが通信できるからです。

 

 

このとき Mac 側は Samba 共有設定や ssh 受け入れ許可がされている必要があります。

 

NAS やほかの機器へも同様にアクセスできます。

 

 

【P2P VPN アクセス事例】

下図は Mac mini M1 に外部からスマホでアクセスしたときの画面コピーです。

 

Mac mini M1 のディスクや特定のフォルダが表示されています(アクセスできている)。

 

通知領域の表示で 4G 接続されているのがわかります。

 

4G 接続ではローカルネットワークにはアクセスできませんが、鍵マークが表示されており Tailscale にログインしている状態を示しています。

 

 

このとき Mac mini M1 も Tailscale にログインしており、「Allow Local Network Access:オン」の状態です。

 

 

ローカルネットワーク内の Mac mini M1 に割り当てられた Tailscale アドレス(例えば 100.011.012.013)でアクセスできています。 

 


 

 

 

 

 

Tailscale が特徴的なのは P2P メッシュ型 VPN を構成できる点で、複数の拠点間をインターネット空間を越えてつなぐ(通信する)ことができる点です。

 

 

これが Tailscale の基本的機能です。

 

この基本的機能をより便利にし、拡張した機能がいくつか用意されています。

 

MagicDNS や Funnel / Tailscale SSH / TailDrop などがありますがここでは割愛します。 



 

 

ーーーーー

この記事では Route traffic 機能としての Subnet Router と Exit Node について触れてみたいと思います。



 Subnet Router 

Subnet Router は Tailscale ネットワーク(Tailnet といいます)のトラフィックを物理サブネットに中継する機能です。

 

Subnet Router 設定できるデバイスは Linux / macOS / Windows / tvOS です。

 

 

Subnet Router とするデバイスにインストールされた Tailscale に、Subnets として物理サブネットを設定すると、Tailnet 内のデバイスから物理サブネット内の機器にアクセスができるようになります。

 

物理サブネットとはローカルネットワークのことで、プライベート IP アドレス(例えば 192.168.xxx.0/24 など)が割り当てられたサブネットをいいます。

 


 

 

物理サブネット内の機器にアクセスするとき、アクセス対象機器が Tailscale に登録されている必要はありません。

 

対象機器に割り当てた 192.168.xxx.101 などを指定してアクセスします。

 

アクセス対象機器が Tailscale にログインしていれば Tailnet アドレス(100.011.012.013 など)でもアクセスできます。

 

 

 



 

上図では gl-a1300 に Subnets  Exit Node 表示されており、これらの機能が設定・有効化されていることを示しています。

 

 

Tailnet 内のデバイス(Tailscale にログインしたデバイスのことで、例えばスマホ)が、物理サブネット内の機器にアクセスできるということです。

 

 

 

 

 Exit Node 

Tailnet 内の特定のデバイス(Exit Node 設定されたデバイス)を介して、Tailnet 内のすべてのインターネット・トラフィックをルーティングします。

 

Exit Node 設定できるのは Linux / macOS / Windows / tvOS と、Android です。 

 

Android は Exit Node 設定はできますが Subnets 設定はできません。

 

 

Tailnet 内のデバイスは Exit Node を介してセキュアに(Tailscale VPN を使って)インターネットにアクセスできます。

 

 [Tailnet デバイス]⇦⇨[Exit Node]⇦⇨[インターネット]

 

という経路でインターネットアクセスしますが ⇦⇨ 箇所は Tailscale VPN ですからセキュアです。

 

⇦⇨ 箇所のセキュリティは自局のルーターに依存します。

 


これは例えば Free WiFi を安全に使いたいときの手段になります。

 

 [Tailnet デバイス][Free WiFi][Exit Node]⇦⇨[インターネット]

 

 

 

 

【Android 機を Exit Node とした事例】

Android 機として UMIDIGI S5 Pro を Exit Node 設定した事例です。

 

[図-1]で[Stop running exit node]とあるのは、すでに UMIFDIGI S5 Pro を Exit Node 設定・有効化していることを示しています。

 

図-1

 

 


次に示す[図-2]は自局 IP アドレスを表示してくれるサイトにアクセスしたときのもので、このときの自局アドレスは 133.32.135.114 です。

 

 [AQUOS sense6]⇦[ルーター(133.32.135.114)]⇨[インターネット]

 

 

スマホは AQUOS sense6 で WiFi 接続中なので物理サブネット内にあります(通知領域の表示で WiFi 接続中であることがわかる)。

 

図-2
 

 

 

[図-3]は UMIDIGI S5 Pro に設定した Exit Node 経由で AQUOS sense6 から自局 IP アドレスを表示してくれるサイトにアクセスしたときのもので、133.32.135.114 は自局アドレスです。

 

 [AQUOS sense6]⇦[楽天モバイル:4G]⇨[Exit Node:UMIDIGI S5 Pro]⇦[ルーター(133.32.135.114)][インターネット] 

 

 

Exit Node を GL.iNet A1300 にした場合、上記の経路のうち[Exit Node:UMIDIGI S5 Pro][Exit Node:GL.iNet A1300に置き換わります。


 

下図は通知領域に 4G 接続と鍵マークがあり、Exit Node 経由であることが見てとれます。

 

4G 接続中ですが、WiFi 接続中と同じ自局アドレス・133.32.135.114 になっているのがおわかりいただけます。

 

図-3

 

以上のように Android 機の Exit Node が機能していることが確認できます。

 

 

 

 

ちなみに 4G 接続時のアドレスは 133.106.134.153 で、これは楽天モバイルのインターネット出口アドレスです(図-4)。


 [AQUOS sense6]⇦[楽天モバイル:4G]⇨[楽天モバイル IMS(133.106.134.153)]⇦⇨[インターネット]

 

図-4

 

 

スマホにはクラスA のプライベート IP(10.aaa.bbb.ccc)が割り当てられています(楽天モバイルの場合)。

 


 


 

 

 

 

 

0 件のコメント: