コンテンツにスキップ

Cloudflare Tunnelで自宅にSSH (2026-02版)

ポート開放なしで、インターネットから自宅サーバにSSHする方法をやってみた手順の記録。

前提

サーバー:Debian
クライアント:Windows 11

  1. Cloudflareアカウントとカスタムドメインを持っていること
  2. サーバーは既にSSHログインができるようになっている。かつ、パスワード認証を禁止し鍵認証のみにするなどセキュア化が済んでいること(参考:Debian 13 trixie setup (2025-09版) - skoshbyte

サーバーにcloudflaredをインストール

Downloads · Cloudflare One docs

sudo apt-get update && sudo apt-get install cloudflared

トンネルを作成する

Create a tunnel (dashboard) · Cloudflare One docs

  1. ブラウザでCloudflareダッシュボードにサインイン
  2. Network > Connectors > Cloudflare Tunnels 画面から Add a Tunnel をクリック
  3. 任意のトンネル名を入力してSave
  4. Saveするとインストールコマンドが表示されるので、そのままコピペして実行
    sudo cloudflared service install <ここに文字列が表示されている>
    

次のコマンドでトンネル情報が表示される

cloudflared tunnel list

  1. Next をクリックし、Published application タブで任意のサブドメイン名とサービスを指定して Save
    1. Hostname: sshgw.mydomain.com
    2. Service: SSH://localhost:22

クライアントにcloudflaredをインストール

クライアント側にも cloudflaredをインストールする。
Downloads · Cloudflare One docs

winget install --id Cloudflare.cloudflared --scope user

$env:localappdata\Microsoft\Winget\Packages\Cloudflare.... の中に cloudflared.exe ができているので、これを使いやすい場所に移動しておく (c:\toolsなど)

SSH鍵セットアップ

  1. クライアント側でキーを作成

    ssh-keygen -t ed25519 -C "任意のコメント" -f ./ed-tun
    

  2. 公開鍵の方をサーバーの authorized_keys に登録

  3. クライアント側の ~/.ssh/config を設定
Host tun
    Hostname sshgw.mydomain.com
    User myuser
    IdentityFile ~/.ssh/ed-tun
    ProxyCommand  C:\tools\cloudflared.exe access ssh --hostname %h
  1. ssh tun でSSHログインできる。

セキュリティについて

Access Policy機能を使用して追加の認証レイヤーも設定できるそうだが、サーバー側で鍵認証以外禁止にしていて、クライアント側の鍵にもパスフレーズを設定しているので、個人の限定的な利用としてはいったんこれでいいかなと。

あまりにも簡単で拍子抜けした一方で、これは企業側でブロックするの難しそうと思うなどした。