メインコンテンツへスキップ
見出し画像

TailscaleはVPNよりも安全? リモートデスクトップ用途で考えてみ

    最近、自宅や外出先のノートPCから、別のWindows PCへ安全にアクセスする方法を調べている。

    以前からPC間のファイル転送にはTailscaleを使っていたが、調べてみるとリモートデスクトップ(RDP)との相性もかなりよさそうだった。

    そこで気になったのが、

    Tailscaleは、普通のVPNより安全なのか?

    ということ。

    調べた結果、単純に「Tailscaleの方がVPNより安全」と言い切るのは少し違うと思った。

    自分なりには、

    TailscaleはVPNの一種だが、従来型VPNとは設計思想がかなり違う。特に、外部公開する入口を減らし、端末やユーザー単位で通信を制限しやすいところにメリットがある。

    と理解している。

    この記事は、そのあたりを整理しておくためのメモ。


    そもそもTailscaleもVPN

    最初に整理しておきたいのは、TailscaleとVPNを完全に別物として比較するのは少し違うということ。

    TailscaleはWireGuardをベースにしていて、Tailscaleのデータ通信はWireGuardで暗号化される。Tailscaleによれば、端末同士が直接接続できずDERPという中継サーバーを経由する場合も、DERPが扱うのはすでにWireGuardで暗号化されたパケットで、中身の平文データにはアクセスしない。 [tailscale.com], [tailscale.com]

    つまり、

    Tailscale
        ↓
    WireGuard
        ↓
    暗号化された端末間通信

    という構造になっている。

    では、昔からあるVPNと何が違うのか。


    従来型VPNとの違いは「入口」の考え方

    典型的なリモートアクセスVPNでは、社内や自宅のネットワークにVPNサーバーという入口を用意して、外部からそこへ接続する。

    イメージとしては、

    ノートPC
       │
     Internet
       │
       ▼
    VPNサーバー
       │
       ▼
    社内・自宅LAN
       │
       ├─ PC
       ├─ NAS
       └─ Server

    という形。

    一方、TailscaleはWireGuardをベースに、端末同士をメッシュ状につなぐネットワークを作る。さらに、SSOなどの認証やアクセス制御も組み合わせている。 [tailscale.com]

    自分の場合なら、

    ノートPC
        │
        │ Tailscale
        │
        └──────────┐
                   │
                   ▼
              Desktop PC

    という、かなり単純な構成にできる。
    ここが個人的にはTailscaleの分かりやすいところだった。


    「安全」と感じる一番の理由はポートを公開しなくてよいこと

    特に魅力を感じたのがRDPとの組み合わせ。

    Windowsのリモートデスクトップをインターネット越しに使おうとすると、「外からどうやってPCまで到達するか」が問題になる。

    昔ながらの考え方なら、

    Internet
        ↓
    ルーター
        ↓
    RDP
        ↓
    Windows PC

    となる。

    当然、外部から到達できるサービスを増やすほど、その入口について考えなければならない。

    Tailscaleの場合、公式にもRDP接続について、手動のポートフォワーディングやパブリックIPを用意せず、Tailscaleの暗号化ネットワーク内からWindows PCへ接続できると説明されている。 [tailscale.com]

    なので自分が考えているのは、

    外出先ノートPC
            │
            │ Tailscale
            ▼
       Desktop PC
            │
            └─ RDP

    という構成。

    RDPの3389番ポートをインターネットへ直接公開しない。

    自分にとっては、これがTailscaleを利用するかなり大きな理由になっている。


    「VPNに入れたら全部見える」から離れられる

    もう一つ大きいのがアクセス制御。

    TailscaleにはACLに加えてGrantsというアクセス制御の仕組みがあり、現在はGrantsが推奨されている。Grantsでは、誰・どの端末から、どのリソースへのアクセスを許すのかを明示でき、基本的には「明示的に許可したものだけ通す」というdeny-by-defaultの考え方になっている。 [tailscale.com], [tailscale.com]

    例えば自分の用途なら、考え方としては、

    Notebook
       │
       ├── RDP 3389 ──→ Desktop
       │
       └── SSH 22   ──→ Desktop
    
    それ以外
       ↓
    原則許可しない
    

    という方向へ寄せられる。

    従来型VPNでも適切なファイアウォール設定などを行えば細かく制御できるので、「従来型VPNではできない」わけではない。

    ただ、最小権限のネットワークを作るための仕組みがTailscale側に最初から用意されていることは、自分のような小規模環境では扱いやすいと感じる。


    では「Tailscaleの方がVPNより安全」なのか

    ここは少し慎重に考えたい。

    自分の現時点での答えは、

    必ず安全とは言えないが、安全なリモートアクセス環境を比較的作りやすい

    というもの。

    WireGuardによる暗号化だけで安全性が決まるわけではない。

    Tailscaleでは、

    • 端末間通信の暗号化

    • SSOなどを利用したIDベースの認証

    • Grantsによるアクセス制御

    • Device Approvalによる端末承認

    などを組み合わせられる。 [tailscale.com], [tailscale.com], [tailscale.com]

    つまり自分には、

    「ネットワークにつながったから信用する」のではなく、「誰が、どの端末から、どこへアクセスするか」を制限していく設計

    と理解すると分かりやすかった。


    リモートデスクトップとの相性がいい

    実際に使い道を考えてみて、一番魅力を感じているのがWindowsのリモートデスクトップ。

    例えば、外出先ではノートPCを使い、処理能力の高いDesktop PCは自宅などに置いておく。

    外出先
    Notebook PC
         │
         │ Tailscale
         ▼
    Desktop PC
         │
         ├─ Excel
         ├─ ブラウザ
         ├─ PowerShell
         └─ その他Windowsアプリ

    こうすると、ノートPC自体にすべての環境を構築しなくても、Desktop PCをいわば**「母艦」**のように使える。

    Tailscale公式にも、tailnet経由でRDPを使えば、離れたWindows PCをローカルネットワーク上にあるように扱って接続できると説明されている。なお、RDPの接続先になるWindowsにはProfessional、Enterprise、Education、Serverのいずれかのエディションが必要とされている。 [tailscale.com]


    RDPをインターネットに直接公開しなくて済む

    これは利便性以上に重要だと思っている。

    自分なら、

    Internet
         │
         ×
    RDPを直接公開しない

    として、

    Notebook
        │
        │ Tailscale
        ▼
    Desktop
        │
        ▼
       RDP

    としたい。

    つまりTailscaleをRDPへ到達する前のネットワーク上の壁として使うイメージ。

    ただし、ここで一つ勘違いしないようにしたい。

    Tailscaleにつながっていることと、Windowsへログインできることは別。

    ネットワークへのアクセス制御とWindows側の認証を重ねておく。

    自分としては、この多層構造が重要だと思っている。


    Tailscaleを入れただけでは十分ではない

    ここが今回調べていて一番重要だと感じたところ。

    最初は、

    Tailscaleを入れれば安全

    くらいに考えていた。

    実際にはそう単純ではない。

    例えばTailscaleへのログインに使っているアカウントが乗っ取られ、新しい端末をtailnetへ参加させられたらどうなるか、という問題が残る。

    そこでTailscale側の設定も強化した方がよさそうだ。


    1. Device Approvalを有効にする

    自分が特に重要だと思ったのがDevice Approval。

    Device Approvalを有効にすると、新しい端末は管理者が承認するまでtailnet上で通信できない。現在は全プランで利用できる。 [tailscale.com]

    つまり、

    新しいPC
       ↓
    Tailscaleへサインイン
       ↓
    未承認
       ↓
    通信できない

    となる。

    管理画面でその端末を確認して承認して初めて、

    管理者がApprove
          ↓
       tailnet参加
          ↓
        通信可能

    となる。 [tailscale.com]

    PC数台程度しか使わない個人環境なら、メリットに対して管理の手間も小さいように感じる。


    2. Tailscaleへのログイン元になるアカウントを強くする

    自分の場合は、TailscaleへのログインにGoogleアカウントを使っている。

    そこで大事になるのは、Tailscaleだけを見るのではなく、入口となるGoogleアカウントそのものをきちんと守ることだと考えている。

    個人的には、

    • 2段階認証

    • Passkey

    • 復旧手段の確保

    • 不要なログイン端末がないかの確認

    あたりは見直しておきたい。

    Tailscale公式のRDP手順でも、Apple、Google、MicrosoftなどのSSO Identity Providerを使ってサインインする構成になっている。 [tailscale.com]

    つまり、Tailscaleだけ強くしても上流のIDが弱ければ意味が薄くなる。


    3. Grantsで通信範囲を絞る

    さらに進めるならGrants。

    TailscaleのGrantsでは、source(アクセス元)、destination(アクセス先)、そこで許可するネットワーク/アプリケーション権限を定義できる。 [tailscale.com], [tailscale.com]

    例えば自分なら考え方として、

    Notebook → Desktop : RDP
    Notebook → Desktop : SSH

    のように、必要な通信を中心に絞っていきたい。

    大事なのは、

    「Tailscaleに参加している端末だから何でも許可」

    ではなく、

    「この端末から、このPCの、この用途だけ許可」

    へ近づけることだと思う。


    4. RDP側の認証も弱くしない

    TailscaleはRDPそのものの認証を置き換えるものではない。

    なので、

    Tailscale
       ↓
    RDP
       ↓
    Windowsの認証

    という多層構造として考えている。

    自分の環境ではWindows PCをMicrosoft Entra IDに参加させているので、RDP側の認証についても別途きちんと設定するつもり。

    ネットワークへ到達できることと、Windowsへのログインを許すことを分けて考える方が整理しやすい。


    自分なりの現在の構成案

    ここまで調べて、今のところ考えているのはこんな形。

    Googleアカウント
    2段階認証 / Passkey
            │
            ▼
         Tailscale
            │
            ├─ Device Approval
            │
            └─ Grants
            │
            ▼
        Notebook PC
            │
            │ 暗号化通信
            ▼
        Desktop PC
           /      \
         RDP      SSH
          │        │
     Windows     公開鍵など
     の認証     SSH側の認証

    Tailscaleを「それだけですべてを守る製品」と考えるより、

    外部から自分のPCへ到達する範囲をかなり限定するためのネットワーク層

    として考えると、自分にはしっくりくる。


    現時点での結論

    「TailscaleはVPNより安全なのか?」という最初の疑問に戻る。

    今の自分の理解では、

    Tailscaleだから自動的に安全、というわけではない。ただ、従来型のリモートアクセスVPNと比べて、外部公開を減らし、端末・ユーザー・アクセス先を限定した構成を作りやすい。

    というのが一番近い。

    特に自分が便利だと思ったのは、

    1. RDPをインターネットへ直接公開しなくてよい

    2. WireGuardベースで端末間通信が暗号化される [tailscale.com]

    3. Device Approvalで新規端末を承認制にできる [tailscale.com]

    4. Grantsで必要な通信だけに絞れる [tailscale.com]

    5. Windows側の認証と組み合わせて多層化できる

    というところ。

    逆に、

    「Tailscaleをインストールしたから、あとは何もしなくても安全」

    と考えるのは違いそうだ。

    自分の場合はまず、

    Googleアカウントの認証強化
    → Device Approval
    → Grantsによる必要最小限の通信
    → RDP側の認証

    という順番で見直していこうと考えている。

    Tailscaleそのものの「安全性」よりも、認証情報の一つが突破されたとしても、そこで全部が終わらないようにしておくことの方が重要なのかもしれない。

    今のところは、そんな理解に落ち着いている。


     
     
    仕事や個人活動の中で調べたこと・考えたことを忘備録として残しています。 テーマは固定せず、その時々で必要になったことを雑多に書いています。 ★内容は個人の理解・整理に基づくものです★

    あなたへのおすすめ