毎朝、満員電車に揺られること1時間。
つり革につかまりながら
「ああ、この移動時間がなければ、あと1時間は寝られたのに」
と考えるのが、私の日課になりつつあります。
2025年12月現在、世の中はAIだのメタバースだのと騒がしいですが、結局のところ、私たち働く主婦が求めているのは
「自宅のコタツから、会社のデスクトップPCをサクサク操作したい」
という、極めて現実的な願いだったりしますよね。
もちろん、会社からはVPNが支給されていたり、NTTのシン・テレワークシステムのようなツールが用意されていたりするでしょう。
でも、正直に言っちゃっていいですか?
遅いんです。
カクカクするんです。
エクセル方眼紙のセルを一つ移動するのに一呼吸置くあのもどかしさ、分かります?
そこで今回は、そんな悩みを根本から解決する
「Headscale(ヘッドスケール)」
のお話です。
これ、単なる便利ツールじゃありません。
「デジタル主権」を自分の手に取り戻す、ちょっとした革命なんです。
夫や義理の両親には「また変なこと始めた」なんて顔をされますが、息子がマイクラで巨大建築を作っている横で、母は自前の最強VPNサーバーを構築する。
なんだかワクワクしませんか?
この記事では、話題のメッシュVPN「Tailscale」の脳みそ部分を自作し、
完全無料・無制限・超高速なリモートワーク環境
を手に入れる方法を、余すところなく、かつ主婦目線で分かりやすく解説します。
スポンサーリンク
Tailscaleの使い方完全攻略!VPNの「常識」を破壊したゼロコンフィグ革命とは?【2025年決定版】
NTTシン・テレワークシステムとは?評判と無料でリモート接続の使い方を完全解説!【2025年決定版】
CloudflareZeroTrustとは?評判と無料でリモート接続の使い方を完全解説【2025年決定版】
なぜ今、Headscaleなのか?デジタル主権を取り戻す戦い

そもそも、「VPNなんて難しそう」と思っていませんか?
確かに一昔前までは、専門知識を持った「情シス」の人たちが、高い機材を買って構築するものでした。
でも今は違います。
Tailscaleの革命と、その「アキレス腱」
ここ数年で一気に普及した「Tailscale」というサービスをご存じでしょうか。
これは「メッシュVPN」という技術を使っていて、難しいルーターの設定やポート開放なんて一切不要で、離れた場所にあるPC同士を繋げることができる魔法のようなツールです。
従来型のVPNが「ハブ&スポーク型」と言って、一度本社の中央サーバーを経由してから目的地に向かう(だから遠回りで遅い)のに対し、TailscaleはPC同士が直接通信(P2P)します。
だからめちゃくちゃ速い。
「じゃあTailscaleを使えばいいじゃない」
と思いますよね。
確かに便利なんです。
でも、ここには一つ大きな落とし穴があります。
それは
「コントロールプレーン」と呼ばれる管理機能(誰がどこにいるかという電話帳のようなもの)を、Tailscale社という一企業に握られている
ということ。
便利さと引き換えに、ネットワークの構成情報を預けているわけです。
しかも、無料プランには接続台数やユーザー数の制限があります。
SOHOや小規模オフィス、あるいは私のようにガジェットが増えすぎた家庭では、いつ課金対象になるかビクビクしなければなりません。
Headscaleという選択肢
そこで登場するのがHeadscaleです。
これは、Tailscaleのコントロールプレーンをリバースエンジニアリングして、オープンソースで公開してくれたもの。
つまり、「電話帳」をTailscale社のサーバーではなく、自分たちが用意したサーバーで管理できるんです。
これによって得られるメリットは計り知れません。
- 完全なるデータ主権
誰がいつ接続したか、どんなデバイスがあるか。
この情報はすべて、あなただけのものです。
巨大テック企業にデータを渡す必要はありません。 - コストの劇的な削減
Tailscaleの有料プランなら月額数ドルかかる機能が、サーバー代の実費(無料枠を使えば0円!)だけで使えます。 - 無制限のスケーラビリティ
デバイス数もユーザー数も無制限。
会社のPC、自宅のPC、夫のスマホ、息子のタブレット、実家の見守りカメラ……
全部繋いでもタダです。
NTTのシン・テレワークシステムも素晴らしいですが、あれはあくまで「画面転送」。
パラパラ漫画を見ているようなものです。
対してHeadscaleは、自宅と会社を極太のLANケーブルで直結するようなもの。
RDP(リモートデスクトップ)はもちろん、ファイル共有もSSHも、まるで隣にPCがあるかのような速度で動きます。
スポンサーリンク
導入前の準備要塞を築くためのインフラ設計

さて、ここからがいよいよ本番。
まずは「城」を築くための土地と材料を揃えましょう。
難しそうに聞こえるかもしれませんが、買い物リストを作るのと同じです。
サーバー環境:Oracle Cloudという名の「宝の山」
Headscaleを動かすには、インターネット上で24時間動いているサーバーが必要です。
自宅の古いPCでもいいんですが、電気代もかかるし、何よりルーターの設定が面倒。
ここはクラウド(VPS)を借りるのが正解です。
私のおすすめは、断然
Oracle Cloud Infrastructure (OCI) の「Always Free(恒久無料枠)」
です。
「オラクル? データベースの会社でしょ? 高そう」
と思ったあなた。
その感覚は正しいけれど、実はOCIには太っ腹すぎる無料枠があるんです。
特に「Ampere A1 Compute(ARMインスタンス)」というプランは、4つのCPUコアと24GBのメモリがずっと無料で使えます。
Headscaleを動かすにはオーバースペックすぎて笑っちゃうレベルですが、これを使わない手はありません。
しかも、固定のグローバルIPアドレスがもらえます。
これが地味に嬉しい。
自宅サーバーだとIPが変わるたびに設定し直したりDDNSを使ったりと手間がかかりますが、OCIならその心配も無用です。
ドメインとDNS:あなただけの住所
HeadscaleはセキュリティのためにHTTPS(暗号化通信)を使います。
そのためには「ドメイン(インターネット上の住所)」が必要です。
- ドメイン
お名前.comやGoogle Domainsなどで独自ドメインを持っているなら、サブドメイン(例:vpn.yourname.com)を作りましょう。
持っていなければ、DuckDNSなどの無料サービスでもOKです。 - DNS設定
取得したドメインが、先ほどのOracle CloudのIPアドレスを指すように「Aレコード」を設定します。
認証基盤:Microsoft Entra ID (旧Azure AD)
「認証」というと難しそうですが、要は「家の鍵」です。
Headscale自体にはユーザー管理機能があまりないので、外部の強力な鍵を使わせてもらいます。
ここで使うのがMicrosoft Entra ID(旧Azure AD)。
なんとこれも無料プランで十分。
会社でMicrosoft 365を使っているなら話は早いですし、個人のマイクロソフトアカウントでも使えます。
これを使うことで、VPNに接続するときに
「多要素認証(MFA)」
を求めることができます。
スマホのアプリで「承認」ボタンを押さないと繋がらないようにできるわけです。
セキュリティお化けの情シス担当者も、これなら納得してくれるはず。
スポンサーリンク
実践編1Headscaleサーバーの構築

材料は揃いましたか?
それではエプロンを締めて、サーバー構築という料理に取り掛かりましょう。
今回は
Ubuntu 24.04 LTS
というOSの上で、
Docker
という便利な箱を使って作ります。
「黒い画面(ターミナル)怖い」という方も大丈夫。
私が書いたレシピ(コード)をコピペしていくだけですから。
手順1:Docker環境のセットアップ
まずはサーバーにSSHでログインして、Dockerを使えるようにします。
Dockerというのは、アプリケーションをコンテナ(お弁当箱みたいなもの)に入れて動かす技術です。
これを使うと、環境による不具合が起きにくくなります。
# まずはおまじない。システムを最新の状態にします。
sudo apt update && sudo apt upgrade -y
# Dockerを入れるための準備
sudo apt install -y curl git apt-transport-https ca-certificates software-properties-common
# Dockerの公式鍵を追加(セキュリティのため)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# リポジトリを追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# いざ、Dockerインストール!
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# ちゃんと動いたか確認
sudo systemctl enable --now docker
手順2:ディレクトリと設定ファイルの作成
散らかったキッチンでは美味しい料理は作れません。
フォルダ(ディレクトリ)を整理整頓しましょう。
# 必要なフォルダを一気に作成
mkdir -p ~/headscale/{config,data,caddy_data,caddy_config}
cd ~/headscale
次に、docker-compose.ymlという設計図を作ります。
今回は、Headscale本体だけでなく、ブラウザから管理できる「Web UI」と、面倒なSSL証明書を自動で管理してくれる「Caddy」というWebサーバーも一緒に動かします。
これが私の「時短テクニック」です。
以下の内容を docker-compose.yml という名前で保存してください。
version: '3.8'
services:
# これが主役、Headscaleサーバー
headscale:
image: headscale/headscale:latest
container_name: headscale
volumes:
- ./config:/etc/headscale
- ./data:/var/lib/headscale
ports:
- "8080:8080"
- "9090:9090"
command: headscale serve
restart: unless-stopped
networks:
- headscale-net
# 管理画面があると便利ですよね
headscale-ui:
image: ghcr.io/gurucomputing/headscale-ui:latest
container_name: headscale-ui
restart: unless-stopped
ports:
- "8081:80"
networks:
- headscale-net
# SSL化を自動でやってくれる優秀な執事
caddy:
image: caddy:alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
networks:
- headscale-net
networks:
headscale-net:
driver: bridge
続いて、Caddyへの指示書 Caddyfile を作ります。
vpn.example.com の部分は、あなたが用意したドメインに書き換えてくださいね。
# Caddyfile
vpn.example.com {
reverse_proxy headscale:8080
}
# 管理画面用(必要なければ消してもOK)
admin.vpn.example.com {
reverse_proxy headscale-ui:80
}
そして、Headscaleの設定ファイル config.yaml です。
公式のテンプレートをダウンロードして、大事なところだけ書き換えます。
# テンプレートをダウンロード
wget -O config/config.yaml https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml
ダウンロードした config/config.yaml を開いて、以下の部分を修正します。
ここが間違っていると動かないので、慎重に。
# サーバーのURL(必ずHTTPSで!)
server_url: https://vpn.example.com
# コンテナの中で待機するアドレス
listen_addr: 0.0.0.0:8080
# データベース(個人利用ならSQLiteで十分)
database:
type: sqlite
sqlite:
path: /var/lib/headscale/db.sqlite
# これをONにするとNAT越えしやすくなります
randomize_client_port: true
# DNS設定(MagicDNSを使うとホスト名で接続できて便利)
dns:
magic_dns: true
base_domain: example.net
手順3:Microsoft Entra ID (OIDC) 連携の設定
ここが一番の難所かもしれませんが、セキュリティの要です。
頑張りましょう。
- Azure Portal にログインし、「Microsoft Entra ID」を開きます。
- 「アプリの登録」 > 「新規登録」 をクリック。
- 名前は「Headscale VPN」などでOK。
- アカウントの種類は「この組織ディレクトリのみに含まれるアカウント」。
- リダイレクトURIの設定が超重要です!
- プラットフォーム
「Web」 を選んでください。
(「SPA」や「パブリッククライアント」だと動きません!) - URI
https://vpn.example.com/oidc/callback
- プラットフォーム
- 登録できたら、「アプリケーション (クライアント) ID」と「ディレクトリ (テナント) ID」をメモします。
- 「証明書とシークレット」 で新しいシークレットを作り、その「値」をメモします。(画面を閉じると二度と見られないので注意!)
メモした情報を、先ほどの config.yaml の一番下の方にある oidc セクションに書き込みます。
oidc:
issuer: "https://login.microsoftonline.com/<テナントID>/v2.0"
client_id: "<クライアントID>"
client_secret: "<クライアントシークレット>"
scope: ["openid", "profile", "email"]
extra_params:
domain_hint: "yourcompany.com"
allowed_domains:
- "yourcompany.com"
strip_email_domain: true
手順4:いざ、起動!
すべての準備が整いました。スイッチオン!
docker compose up -d
docker compose logs -f
と打って、エラーメッセージが出ていなければ成功です。
おめでとうございます!
これであなた専用のVPNセンターが開設されました。
スポンサーリンク
実践編2Windowsクライアントの導入と「不死身化」設定

サーバーができても、PCが繋がらなければ意味がありません。
特に会社に置いてあるPCは、私たちが寝ている間も、週末も、ずっとVPNに繋がり続けていなければなりません。
でもWindowsって、勝手に更新して再起動したり、スリープしたり、余計なことをしますよね。
ここで紹介するのは、そんなWindowsを「決して切れないゾンビ」のような状態にする、ちょっとした黒魔術的な設定です。
手順1:クライアント導入とHeadscaleへの接続
まずは、会社のPCと自宅のPC両方に、Tailscale公式サイトからWindows版のアプリをインストールします。
インストールが終わっても、まだログインしないでくださいね。
そのままログインすると、本家のTailscaleに繋がってしまいます。
管理者権限でPowerShell(またはコマンドプロンプト)を開き、以下の呪文を唱えます。
# もしログインしちゃってたらログアウト
tailscale logout
# 私たちのサーバーを指定してログイン!
tailscale login --login-server https://vpn.example.com
するとブラウザが開いて、Microsoftのログイン画面が出ます。
会社のメールアドレスでログインしてください。
MFAを設定していれば、スマホでの承認も求められます。
これで、あなたのPCはHeadscaleネットワークの一員になりました。
手順2:「Unattended Mode」の有効化
会社PCは、誰もログインしていない「ようこそ」画面の状態でもVPNに繋がっている必要があります。
これを「Unattended Mode(無人モード)」と呼びます。
- タスクトレイのTailscaleアイコンを右クリック。
- 「Preferences」 > 「Run unattended」 にチェックを入れます。
これでTailscaleはシステムサービスとして動くようになります。
手順3:タスクスケジューラによる「不死身」の自動復旧
ここからが本記事のハイライト、100点満点を目指すための秘策です。
実は「Unattended Mode」にしていても、Windowsの高速スタートアップ機能のせいで、ネットワークの準備ができる前にTailscaleが起動しようとして失敗し、そのままオフラインになってしまうことがあります。
月曜日の朝、自宅から接続しようとして「繋がらない……」と絶望するのは避けたいですよね。
そこで、Windows標準の「タスクスケジューラ」を使って、
「起動してから1分後に、強制的に接続コマンドを叩き込む」
というタスクを仕込みます。
以下の内容をメモ帳に貼り付け、tailscale_autostart.xml という名前で保存してください。
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<Principals>
<Principal id="Author">
<UserId>S-1-5-18</UserId> <!-- SYSTEM権限(最強の権限)で実行します -->
<RunLevel>HighestAvailable</RunLevel>
</Principal>
</Principals>
<Triggers>
<BootTrigger>
<Enabled>true</Enabled>
<Delay>PT1M</Delay> <!-- 焦らず1分待ってから実行するのがコツ -->
</BootTrigger>
</Triggers>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"C:\Program Files\Tailscale\tailscale.exe"</Command>
<!-- 強制再認証を防ぎつつ、DNS設定の上書きトラブルも回避するオプション -->
<Arguments>up --unattended --login-server=https://vpn.example.com --force-reauth=false --accept-dns=false</Arguments>
</Exec>
</Actions>
</Task>
保存したら、管理者権限のコマンドプロンプトで以下のコマンドを実行して、このタスクを登録します。
schtasks /create /xml "C:\path\to\tailscale_autostart.xml" /tn "TailscaleForceStart"
これで、週末にルーター再起動があろうが、停電があろうが、PCさえ立ち上がれば自動的にVPNが復活します。
まさに不死身。
手順4:RDP接続のパフォーマンス・チューニング
最後に、操作感を劇的に向上させるチューニングです。
VPNを通すと、データを入れるパケットという封筒に「宛先シール(ヘッダー)」を追加で貼るため、一度に送れる中身の量が減ります。
これをMTUと言います。
この調整をしないと、データの断片化が起きて、画面がプチプチ切れたり遅延したりします。
PowerShellで、TailscaleのネットワークアダプタのMTUを1280(安全圏)に設定します。
# インターフェース名を確認して設定(大抵は "Tailscale" です)
netsh interface ipv4 set subinterface "Tailscale" mtu=1280 store=persistent
さらに、リモートデスクトップ接続の設定ファイル(.rdp)をメモ帳で開いて、末尾に以下を追記します。
networkautodetect:i:1
bandwidthautodetect:i:1
connection type:i:7
bitmapcachepersistenable:i:1
これで、会社PCでYouTubeを再生してもカクつかないくらい、滑らかな操作感が手に入ります。
スポンサーリンク
運用編安全で快適なネットワークの維持管理

城は建ちました。
あとは日々の維持管理です。
アクセス制御リスト(ACL)によるセキュリティ強化
Headscaleは初期状態だと、参加している全ての端末がお互いに通信し放題です。
家族のスマホと会社の重要PCが繋がりっぱなしというのは、さすがにセキュリティ的にまずいですよね。
「自宅PCから会社PCへのRDP(3389ポート)だけ許可する」という風に制限をかけましょう。
policy.json というファイルを作って制御します。
{
"groups": {
"group:staff": ["user@example.com"]
},
"tagOwners": {
"tag:office-pc": ["group:staff"]
},
"acls": [
{
"action": "accept",
"src": ["group:staff"],
"dst": ["tag:office-pc:3389"] // RDPポートだけ通す!
},
{
"action": "accept",
"src": ["autogroup:member"],
"dst": ["autogroup:self:*"] // 自分のデバイス同士はOK
}
]
}
これで、万が一パスワードが漏れても、許可された通信以外はすべてブロックされます。
「ゼロトラスト」ってやつですね。
スマホからの接続と「安全なフリーWi-Fi」
Headscaleはスマホでも使えます。
公式アプリを入れて、設定の「Alternate Server」に自分のサーバーURLを入れるだけ。
出先のカフェでフリーWi-Fiを使うとき、ちょっと怖くないですか?
そんなときは「Exit Node」機能を使いましょう。
自宅のPCやサーバーを出口(Exit Node)に設定すれば、カフェからの通信がすべて暗号化されて自宅経由でインターネットに出るようになります。
これなら盗聴される心配もありませんし、会社のIP制限のかかったクラウドサービスにもアクセスできます。
スポンサーリンク
おわりに自由と責任、そして快適なリモートワーク
ここまで、かなりディープな技術の話にお付き合いいただき、ありがとうございました。
正直、NTTのソフトを入れるだけの100倍は大変だったと思います。
でも、考えてみてください。
あなたは今、GoogleやAmazonに頼ることなく、自分だけのグローバルなネットワークインフラを手に入れたんです。
月額料金もかかりません。
台数制限もありません。
そして何より、
「私のデータは私が守っている」
という確かな安心感があります。
来週の月曜日、コタツに入りながら、会社のPCをまるで手元にあるかのように操作するとき、きっとニヤリとしてしまうはずです。
「この快適な環境、私が作ったのよ」って。
夫は相変わらず「ネットが繋がらない」とルーターを再起動するかもしれませんが、私たちのHeadscale環境は、そんなことではびくともしません。
さあ、デジタル主権を取り戻して、自由で快適なリモートワークライフを楽しみましょう!
Tailscaleの使い方完全攻略!VPNの「常識」を破壊したゼロコンフィグ革命とは?【2025年決定版】
