TailscaleでMac miniをリモート操作できるようにする

自宅のMac miniに外出先からアクセスしたい。VPNを張ればいいが、ポート開放やダイナミックDNSの管理は面倒だし、セキュリティリスクもある。Tailscaleを使えば、WireGuardベースのメッシュVPNが数分で構築でき、NATの内側にあるマシンにも直接アクセスできる。

この記事では、Mac mini(Apple Silicon / macOS)にTailscale経由でSSHとRemote Desktop(VNC/ARD)接続できるようにするまでの手順をまとめる。

前提

1. Tailscaleのインストールと接続

インストール方法の選択

Tailscale for macOSには2つのビルドがある。

App Store版 スタンドアロン版
インストール Mac App Store tailscale.com/download から直接DL
自動更新 App Store経由 アプリ内自動更新
サンドボックス あり(macOS制約) なし
Tailscale SSH 使えない 使える
Exit Node 使える 使える

App Store版はサンドボックスで動作するため、Tailscale SSHサーバーが起動できない。 Tailscale SSHを使いたい場合は、スタンドアロン版をtailscale.com/downloadからダウンロードしてインストールする。

App Store版からスタンドアロン版に切り替える場合は、先にApp Store版をアンインストールしてからスタンドアロン版をインストールする。Tailscaleアカウントに再ログインすれば設定は引き継がれる。

注意: Homebrew(brew install --cask tailscale)でもスタンドアロン版をインストールできる。

接続

メニューバーのTailscaleアイコンから「Log in」→ ブラウザで認証。

CLIで確認:

tailscale status

自分のTailscale IPとネットワーク内の他デバイスが表示されれば接続完了。

2. SSHを有効化する

macOSのSSH(リモートログイン)はデフォルトで無効。システム設定から有効にする。

GUIで設定

  1. システム設定一般共有
  2. リモートログイン をオンにする
  3. 「フルディスクアクセスのあるユーザのみ」または「すべてのユーザ」を選択

CLIで設定

sudo systemsetup -setremotelogin on

Full Disk Access privilegesエラーが出る場合: ターミナルアプリにフルディスクアクセス権限が必要。システム設定 → プライバシーとセキュリティ → フルディスクアクセスで使用中のターミナルアプリを追加し、ターミナルを再起動してから再実行する。面倒ならGUIから設定するほうが早い。

接続テスト

別のTailscaleデバイスから:

# Tailscale IPで接続
ssh ユーザー名@100.xx.xx.xx

# MagicDNSが有効なら、マシン名でも接続可能
ssh ユーザー名@chibihammac-mini

3. Tailscale SSHを使う(オプション)

Tailscaleには組み込みのSSH機能がある。macOSのSSHデーモンを使わず、Tailscale自体がSSH接続を処理する。メリット:

macOSでの制約

macOSのGUI版Tailscale(App Store版・スタンドアロン版ともに)はcom.apple.security.app-sandboxエンタイトルメントでサンドボックス化されており、Tailscale SSHサーバーが動作しない。 tailscale set --sshを実行すると以下のエラーになる:

The Tailscale SSH server does not run in sandboxed Tailscale GUI builds.

Tailscale SSHをmacOSで使うには、GUIなしのCLIデーモン版(brew install tailscaleで入るtailscaled)が必要。ただしGUI版との共存はできず、デーモンの起動管理も自分で行う必要がある。

推奨: macOSではTailscale SSHを使わず、セクション2のmacOS標準SSH(リモートログイン)をTailscaleネットワーク経由で使うのが最も確実。

有効化(CLIデーモン版の場合)

GUI版をアンインストールし、CLIデーモン版をインストールした上で、2つの設定が必要。

1. 接続先マシン(Mac mini)でSSHを有効化:

tailscale set --ssh

注意: このコマンドを実行すると、既存のTailscale IP経由のSSH接続が切断される。

2. 管理コンソールでACLポリシーにSSHルールを追加:

管理コンソールの Access Controlshttps://login.tailscale.com/admin/acls)でポリシーファイルを編集:

{
  "ssh": [
    {
      "action": "accept",
      "src": ["autogroup:members"],
      "dst": ["autogroup:self"],
      "users": ["autogroup:nonroot"]
    }
  ]
}

コンソールのマシン設定画面にSSH有効化のトグルはない。CLIとACLポリシーの両方を設定する必要がある。

接続

ssh chibihammac-mini
# ユーザー名もパスワードも不要

注意: Tailscale SSHはmacOSではベータ扱いの場合がある。安定性を重視するなら、通常のSSH + Tailscaleネットワーク経由が確実。

4. Remote Desktop(画面共有)を有効化する

Mac miniをGUIで操作したい場合、macOS標準の画面共有(VNC/ARD)を使う。

GUIで設定

  1. システム設定一般共有
  2. 画面共有 をオンにする
  3. アクセスを許可するユーザーを設定

CLIで設定

# 画面共有を有効化
sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool false
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.screensharing.plist

接続方法

macOSから(推奨)

Finderのメニューから 移動サーバへ接続⌘K):

vnc://100.xx.xx.xx
# または MagicDNS名
vnc://chibihammac-mini

あるいはSpotlightで「画面共有」を検索してアプリを起動。

iPhoneから

VNC接続先にTailscale IPまたはMagicDNS名を指定する。

Windowsから

5. セキュリティの考慮

Tailscaleだけでは守れないもの

Tailscaleはオーバーレイネットワークを追加するだけで、既存のネットワークインターフェースには何もしない。systemsetup -setremotelogin onでSSHを有効にすると、sshdは全インターフェースの22番ポートで待ち受ける。画面共有(VNC)も同様。

経路 SSHアクセス
Tailscale IP(100.x.x.x) 可能(意図通り)
ローカルLAN IP(192.168.x.x) 可能(同じルーター配下のデバイス)
インターネット(ルーターがポート開放していれば) 可能

つまりTailscaleを入れただけでは、ローカルネットワーク上の他デバイスからのSSH/VNCアクセスはブロックされない。ゼロトラストネットワークの考え方を徹底するなら、ファイアウォールでTailscaleインターフェース以外からのアクセスを遮断する必要がある。

pfでTailscale経由のみに制限する

macOSのpf(Packet Filter)を使えば、Tailscaleインターフェース以外からのSSH/VNCをブロックできる。

まずTailscaleが使っているインターフェース名を確認:

tailscale status --json | python3 -c "import sys,json; print(json.load(sys.stdin).get('TUN',''))"
# 例: utun4

/etc/pf.confにルールを追加:

# Tailscaleインターフェース以外からのSSH/VNCをブロック
block in quick on ! utun4 proto tcp from any to any port 22
block in quick on ! utun4 proto tcp from any to any port 5900

pfを有効化・リロード:

sudo pfctl -e          # pfを有効化
sudo pfctl -f /etc/pf.conf  # ルールをリロード

注意: Tailscaleのインターフェース名(utun4等)は再起動やTailscale再接続で変わる可能性がある。固定したい場合はlaunchdスクリプトで動的に設定する必要がある。

SSH鍵認証のみに制限する

パスワード認証を無効にして鍵認証のみにすれば、総当たり攻撃のリスクをなくせる:

# /etc/ssh/sshd_config を編集
PasswordAuthentication no
KbdInteractiveAuthentication no

設定を反映:

sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd

Tailscale ACL

管理コンソールのACLで、Tailscaleネットワーク内でのアクセスも制御できる:

{
  "acls": [
    {
      "action": "accept",
      "src": ["chibiham@github"],
      "dst": ["chibihammac-mini:22,5900"]
    }
  ]
}

この設定なら、自分のアカウントからMac miniのSSH(22)と画面共有(5900)のみ許可される。

セキュリティチェックリスト

6. 便利な追加設定

MagicDNS

Tailscale管理コンソールの DNS タブでMagicDNSを有効にしておくと、IPアドレスの代わりにマシン名で接続できる。

ssh chibihammac-mini
# instead of
ssh 100.77.108.34

Exit Node

Mac miniをExit Nodeとして設定すれば、外出先から自宅ネットワーク経由でインターネットに出ることもできる。

# Mac mini側
sudo tailscale up --advertise-exit-node

# 接続元側
sudo tailscale up --exit-node=chibihammac-mini

Funnel(外部公開)

Tailscale Funnelを使えば、Mac miniで動かしているWebサービスをインターネットに公開することもできる(ポート開放不要)。

tailscale funnel 8080

まとめ

機能 方法 ポート
SSH macOSリモートログイン or Tailscale SSH 22
画面共有 macOS画面共有(VNC/ARD) 5900
ファイル転送 scp / sftp over Tailscale 22

Tailscaleの導入により、従来のVPN構築で必要だったポート転送・DDNS・証明書管理がすべて不要になる。WireGuardベースなのでオーバーヘッドも小さく、P2P接続が確立すればレイテンシもほぼゼロに近い。

自宅サーバーを運用するなら、Tailscaleはインフラ層の複雑さを劇的に減らしてくれる最初の一手だ。