
自宅サーバーの公開・アクセス方法の検討 ➜ Tailscale + Pangolin が良さそう
こんにちは、Noboです。
前回までの内容で『至高の自宅サーバー』のインフラ部分の構築が一旦完了しましたので、今後はアプリケーションの構築をしていくことになります。
まず、一番最初に考えておきたいのは、「自宅サーバーの公開方法」です。
自宅サーバーのアプリケーションは、自宅の外からもアクセス可能にすることで利便性が上がりますが、大切なデータを守るために安全なアクセス方法を使う必要があります。
今回は、どのようなアクセス方法があるかをリストアップして、それぞれのメリット・デメリットを比較してみます。今後いくつかのアクセス方法を適用していくことになりますが、そのための事前検討です。
(2/8追記:Twingateを候補に入れ忘れていたので追記しました。)
安全に自宅サーバーにアクセスしたい
自宅サーバーを稼働させる理由の一つに、お好みのアプリケーションをホストするという目的があります。アプリケーションは、基本的にサーバー以外の端末からネットワーク経由でアクセスされ、利用されることになります。
その時に大切なのは、必要な端末へ安全なアクセスを提供しつつ、それ以外からはアクセスできないような仕組みを作ることです。そうすることで、悪意のある不正アクセス・ウィルス・マルウェア・ランサムウェア等から、大切なデータを守ることが出来ます。
自宅サーバーに求める要素は人によって異なりますが、リモートアクセスに関する要望をいくつかのパターンに分けて、対応方法を考えてみます。
LAN内からしかアクセスしない
➜ 公開しないのが一番の対策リモートアクセスするのは自分だけ
➜ VPN等の制限があるアクセス家族・友人への公開や、外部サービスとの連携が必要
➜ URLを知る方への公開不特定多数への公開が必要
➜ 自宅サーバーでは非推奨。クラウドサービス等の利用を推奨します。
パターンとしてはそれほど複雑ではないですが、アプリケーションによって必要な対応も変わってきます。各アプリケーション毎に上記公開方法を柔軟に組み合わせて対応する必要がありそうです。
公開アクセスの必要性
上記の中で難しいのが3番目の対応です。限られたユーザーや外部サービスとの連携のために、URLベースで誰でもアクセスできる環境の提供が必要です。基本的に自分しか使わない場合でも、機能有効化やサービス連携のために、外部への公開が前提となっているケースがあります。
メディアサーバーのChrome Cast機能を使いたい(Jellyfin等)
外部からWebhook等でPush型連携が必要(n8n等)
家族/知人だけにサービスを公開したい(immich等)
大切なデータを守るためにセキュリティを強固にしたいところですが、利便性とのトレードオフで一部アクセスは許容する必要があります。そのあたりの匙加減を、アプリケーション環境を構築する際にしっかりと考えておく必要があります。
既製品NASの公開サービスは危険です!
話が逸れますが、メジャーな家庭用NAS製品は、独自のリモートアクセスの方法を提供しています。最近はどうか知りませんが、SynologyやQNAPのQuickConnectやmyQnapCloud等のサービスは使用するドメインが割れているので、ドメインサーチ等でIPを特定され、使用しているアプリやポート等も絞られるためにランサムウェアの餌食になったりしていました。
私はQNAPも利用していますが、後述のTailscaleでアクセスするようにしていたので、ランサムウェアの被害は受けなかったのかなとも思います。既製品のNASを自宅サーバーとして利用されている方は、利便性は高いかもしれませんが危険度も高いので、メーカー提供のアクセスの仕組みは使わないようにしたほうが無難です。ネットに自宅サーバーを晒してはいけません!
考慮するべきポイント
リモートアクセス検討の際に押さえておくべきポイントをいくつか挙げてみます。
提供形態
クラウド形態はサービスに依存します。セルフホストは自己管理です。セットアップやメンテナンスの容易さ
疲れない程度に簡単なものが好ましい。メンテナンス対応も重要。ルーター・ポート側の対応が不要
セキュリティ目的以外にも、DS-Lite接続などの環境も考慮したい。セキュリティ対応の技術
ベースとするプロトコルや暗号化の仕組みでしっかり保護したい。転送速度等の制限が無いか
外部サービスの場合は制限がある場合があるのが注意点。外部公開対応(HTTPS証明書対応)
サービス連携や機能利用のために、公開アクセスが可能かどうか。セルフホスト可能か
外部に依存しない場合は全て自己責任となる。利便性とのトレードオフ。運用費用
基本的に無償の範囲で考えたいと思います。
リモートアクセス方法の候補
大昔であれば、自宅サーバーの公開といえば「ルーターでポートを開放」+「DDNSでアクセス先を指定」という組み合わせが普通でしたが、今の時代セキュリティの観点からもそのような構成は全く推奨できません。
サーバーへのアクセス方法はいくつかありますが、どれを採用するかを比較検討したいと思います。以下簡単に特徴と所感をまとめました。
1.Tailscale
WireGuardベースの商用メッシュVPNサービス。中央コーディネーションサーバーで認証・NAT越えを管理し、デバイス間はP2P接続します。
提供形態: クラウドサービス
設定/管理: 非常に簡単
ポート開放: 不要
利用技術: WireGuard暗号化、MFA対応で安全性高い
転送速度: P2P直接接続で低遅延/リレーサーバー経由で帯域制限アリ
外部公開: Tailscale Funnelで既定3ポートのみ公開可能
セルフホスト: 不可(Headscaleで対応)
運用費用: 無償(デバイス100台、ユーザー3名共有まで)
個人的所感: 自宅サーバーの必須サービスだが、メディア系の利用やリアルタイム性が必要なアプリケーションには弱い
2.Headscale
Tailscaleのオープンソース互換実装で、コーディネーションサーバーをセルフホストできます。Tailscaleクライアントと互換性がある点がメリット。
提供形態: セルフホスト
設定/管理: 難易度高い・要メンテナンス
ポート開放: DERPサーバー用に必要(またはネット上に別途設置)
利用技術: WireGuard暗号化対応
転送速度 : P2P直接接続で低遅延、基本的に制限無し
外部公開: 基本不可(方法はあるが構築が大変です)
セルフホスト: 可能(外部への依存は無いが、自己管理)
運用費用: 完全無償
個人的所感: Tailscaleのベンダーロックインを避けるためのプロジェクトですが、少々難易度が高いと思われます。(試したことないけど)
3.NetBird(クラウド/セルフホスト)
WireGuardベースのオープンソースメッシュVPN。クラウド版はTailscaleとほぼ同じです。セルフホスト版は完全に自由です。
提供形態: クラウドサービスとセルフホストの両方に対応
設定/管理: クラウド版は簡単。セルフホスト版はやや複雑。
ポート開放: 不要
利用技術: WireGuard暗号化、MFAも対応可能で安全性高い
転送速度: P2P直接接続で低遅延(リレー形式は帯域制限アリ)
外部公開: 基本的に不可(=高い安全性)
セルフホスト: 可能
運用費用: セルフホストは無料/クラウドは5ユーザーまで無料
個人的所感: Tailscaleの代替。セルフホストだと外部公開できない。Tailscaleがダメになった時に乗り換える先の候補。
4.Twingate
Tailscaleと似たゼロトラストのサービスです。VPNの代替として、企業やチームが安全にリモートアクセスできるようにするクラウドサービスです。
提供形態: クラウドサービス
設定/管理: 普通
ポート開放: 不要
利用技術: Twingate独自の暗号化トンネル、ゼロトラストベース
転送速度: 非常に高速
外部公開: 基本的に不可(=高い安全性)
セルフホスト: 不可(Twingateのサービスに依存)
運用費用: 5ユーザーまでは無料で利用可能
個人的所感: 非公開アクセス専用と考えた場合は、Tailscaleよりもセキュアで柔軟性があります。
5.Cloudflare Tunnel
Cloudflareのエッジネットワークを経由して、自宅サーバーをインターネットに公開するサービスです。
提供形態: クラウドサービス
設定/管理: やや複雑。Tunnelやルーティングの理解が必要
ポート開放: 不要
利用技術: Cloudflareによる強力なアクセス保護を提供
転送速度: Cloudflare経由のため遅延アリ/帯域制限アリ
外部公開: 可能(というかそのためのサービス)
セルフホスト: Cloudflareサービスに完全に依存
運用費用: Tunnel利用は無償だが、自分のドメインが必要
個人的所感: 定番の方法ですが、遅延やトラフィックの制限があるのと、ドメインを維持する費用もあり私は使わないです。
6.Pangolin(クラウド/セルフホスト)
プライベートサーバー内のサービスを安全に外部公開するための、Cloudflare Tunnel代替となるオープンソースの自己ホスト型リバースプロキシです。
クラウド版はCloudflare Tunnelとほぼ同じです(ドメインは無くてもOK)、下記はPangolinが本領を発揮するセルフホスト版についてです。
提供形態: クラウドサービスとセルフホストの両方に対応
設定/管理: やや複雑。メンテナンス対応も必要
ポート開放: 必要(外部STUNサーバーがあれば不要)
利用技術: WireGuard暗号化。自分で全て管理が必要
転送速度: 理論上、最高のパフォーマンスを提供
外部公開: 基本的に不可(=高い安全性)
セルフホスト: 可能(外部STUNサーバーが必要)
運用費用: 外部STUNサーバーとドメインが必要(DDNSでもOK)
個人的所感: セルフホスト版の制限の無いCloudflare Tunnel的なもの。メディア系のサーバーや、リモートデスクトップ系はこちらを利用したい。クラウドサービスの無料枠を活用して費用を掛けないことも可能。
7.mTLS (Mutual TLS)
相互TLS認証。クライアントとサーバーの両方が証明書を使って互いを認証する仕組みです。VPNサービスではなく、認証・暗号化のプロトコルです。
提供形態: サーバー上の認証方式の設定です。
設定/管理: 非常に複雑・PKI(公開鍵基盤)知識が必要
ポート開放: 必要。VPNとの組み合わせ推奨
利用技術: 最も強固な証明書ベース認証
転送速度: TLS処理のオーバーヘッド分は考慮が必要
外部公開: 可能(HTTPS前提・証明書管理が必要)
セルフホスト: 可能
運用費用: 完全無料だが、技術要件が高い
個人的所感: 最強だがネットワーク層の保護はされない。VPNじゃダメですか?
8.SoftEther
オープンソースVPNソフトウェア。OpenVPN、L2TP/IPsec、WireGuard、Microsoft SSTP、SoftEther VPNプロトコルなど多様なプロトコルに対応。
提供形態: 基本はセルフホスト前提(オープンサーバー利用も可)
設定/管理: やや複雑。サーバー側の設定に知識が必要
ポート開放: 通常必要。NAT traversal機能を使うことも可能。
利用技術: お好みのプロトコルを利用可能
転送速度: 高速な通信が可能
外部公開: 不可(=高い安全性)
セルフホスト: 可能。全て自己管理
運用費用: 完全無料
個人的所感: ちょっと毛色が異なりますが、LANの延長のようなネットワークが必要な場合はSoftEtherもアリかもしれません。
他にも、リバースProxyサーバーを使った公開方法や、SSHトンネリングなどアクセス方法は多々あります。興味がある方はいろいろ調べてみて下さい。
様々な観点での比較
とりあえず上記の候補を目的別のランキングにしてみます。
使いやすさTop3
クラウドサービスは使いやすいのでオススメです。
プライバシーTop3
セルフホストがプライバシーの観点では最強です。
費用比較Top3
PangolinやHeadscaleは外部にサーバーが必要であったり、Cloudflare Tunnelはドメイン分の費用が掛かる点に注意です。
パフォーマンスTop3
技術的要件以外にもサービスに依存した制限が無いことが重要です。
『至高の自宅サーバー』へのアクセス方法
長々と書きましたが、私は次のように構成したいと考えています。
基本的にはTailscaleで対応
自宅サーバーに必要な必要な機能を網羅しつつ、簡単で無償という素晴らしいサービスです。基本的にはTailscaleがあれば大抵のことは解決できます。
特に素晴らしいのはTailscale Funnelですね。特定の3ポートに限られますが、証明書も対応した外部公開が簡単にできるのでリバースProxy等の面倒な設定をする必要がありません。自宅サーバーのアプリを一般に向けて公開する場合に、Cloudflare TunnelもリバースProxyサーバーも要りません。
圧倒的に簡単: アプリをインストールしてログインするだけ
ポート開放不要: ルーター設定なし
強固なセキュリティ: WireGuard暗号化、MFAにも対応
高速: P2P直接接続で低遅延
マルチプラットフォーム: すべての主要OSに対応
無料プランが充実: 個人利用なら十分(100デバイス、3ユーザー)
NAT越えが完璧: どんな環境でも接続可能
外部公開に対応:Tailscale Funnelで外部公開も可能
便利機能: MagicDNS、Exit Node、Subnet Router、Taildropなど
管理が楽: Web UIで全デバイス管理
サポート充実: ドキュメント、コミュニティが豊富
大量トラフィックや応答性にはPangolinで対応
私の環境では、Tailscaleは全てP2Pで接続されているので速度は問題無い筈なのですが、Funnel機能経由の場合はリレーサーバー(DERP)を経由するため、遅延や転送速度や転送量の制限が有ります。TailscaleでChrome Cast機能を使うにはFunnelが必要ですが、転送量/速度の制限は厳しいところです。リモートデスクトップ系も利用に支障がある遅延が目立ちます。最強Tailscaleさんも完璧ではありませんでした。
ということで、Tailscaleの欠点を補うことを現在計画中です。
大量のトラフィックが発生したり、応答性が大切なアプリについては違うルートでネットワークを使える方法としてPangolinを何とか上手くで使えないか画策中です。ここ数日、その実験をしていて執筆が遅れてしまいました。
Pangolinは、Cloudflare Tunnelの各種制限が無いセルフホスト版といったようなもので、エンタープライズ向けのサービスを提供しつつも個人ユーザーにコミュニティ版を無償利用しているという、私好みの体勢で開発を進められている製品です。PrivateなサーバーをPublicに向けて安全に公開するという自宅サーバーの永遠の課題に必要なソリューションとなります。
現在、Oracle CloudのAlways Free枠をつかって無料のDDNSと組み合わせることで、Pangolinで高速で制限の無い安全なアクセス手段を無償で実現しようとしています。ファイル転送系やメディアサーバー関係、リモートデスクトップ/アプリケーション等は全部Pangolinに載せてしまおうと考えです。
Tailscaleだと、外部公開可能なFunnelは3ポートに限定されるため、それ以上のアプリケーションを公開する必要がある場合はPangolinを検討すると良いかも知れません。
複数ルートによる冗長性が必要
サーバーへのアクセスは、いくつか複数の手段で可能にしておくことが、メンテナンスや障害復旧時のためにも重要と考えています。
万が一、リモートからアクセスできなくなった時の回避策や、原因を確認して修正するためにも別のアクセス手段を用意しましょう。
私の場合は、常時起動の2台のNASを使って複数ルートを確保しています。ポートは一切開けていません。意外と重宝しているのは、Windows VMへのChrome Remote Desktopです。これは簡単なので使えるようにしておくと良いかも知れません。
自宅サーバーは、物理的に2台稼働させておく(Raspberry Piでも可)
稼働するOSも、VM等で複数稼働させておく(WindowsとLinux等)
各OS上で、複数のリモートアクセスを確保する(Tailscale以外も)
例:2つのサーバー上にWindowsとLinuxを稼働させ、Chrome Remote Desktopと、Tailscale経由の2つのアクセスが可能にしておく。
以前、TailscaleのNever expire設定を失念していたため突然遠距離からTailscaleが不通になったことがありますが、Chrome Remote Desktop経由でWindowsからLAN内に入ることで問題を回避できたことがあります。
ハードウェアを含めて冗長構成を取っておくことは大切です。片方はRaspberry PiベースのVNCサーバーでも良いので、何らかの回避ルートを稼働させておくことをオススメします。