分散システムとポエム

Cloudflare Tunnelで自宅のRaspiに外部からSSH

自宅のインターネットプロバイダでは,マンションであるためグローバルIPアドレスがルータに割り当てられない.そのため,グローバルIPアドレスの割り当てられたマシンとトンネリングが必要であった.今回は,Cloudflare Tunnelを使い自宅のネットワークにSSHする踏み台を構築した.

Cloudflare Tunnelの設定方法にはlocally-managed tunnel (CLI)とremotely-managed tunnel (dashboard)がある.今回は前者の方法を使う.基本的にはドキュメントやZennの記事を読みながすすめればよい.今回はアクセス先のエンドポイントのドメインとして remote.example.com を使う.

手順

(1) Raspberry Piにログインしrootで作業する.(systemdのserviceを作成する都合からrootに昇格している.)

sudo -i

(2) cloudflaredをダウンロードしてインストールする.

wget https://github.com/cloudflare/cloudflared/releases/download/2023.10.0/cloudflared-linux-armhf.deb
sudo apt install ./cloudflared-linux-armhf.deb
cloudflared --version

(3) Cloudflare Tunnelを設定していく.Locally managedの手順に従う.

# ログイン
cloudflared tunnel login

# トンネルを作成
cloudflared tunnel create shina-tun

# 外部アクセスのドメインとトンネルをルートとして紐づけ
cloudflared tunnel route dns shina-tun remote.example.com

# 作成したルートの確認
cloudflared tunnel route ip show

(4) Configファイルを作成する.

ホームディレクトリのパス ~/.cloudflared/config.ymlに以下のファイルを作成する.

tunnel: <Tunnel ID>
credentials-file: /root/.cloudflared/<Tunnel ID>.json
ingress:
  - hostname: remote.example.com
    service: ssh://localhost:22
  - service: http_status:404

(5) 動作を検証とサービス化を行う.

# 動作の検証
cloudflared tunnel run shina-tun
# systemdのservice化
sudo cloudflared --config  ~/.cloudflared/config.yml service install

(6) Systemd Serviceの起動を確認する.

systemctl status cloudflared
systemctl enable cloudflared

(7) CloudflareのWebからアプリケーションを作成する.

Zero TrustのコンソールからSelf-hostedを選ぶ.

以下のパラメータを設定しておく.

  • Application name: Bastion
  • Application domain: remote.example.com
  • Accept all available identity providers: チェックを外す
  • Identity providers: GitHub (以前に設定済み)
  • <Next>
  • Policy name: Bastion Policy
  • Action: Allow
  • Configure rules > Include
    • Selector: Login Method
    • Value: GitHub
  • Configure rules > Require
    • Selector: Emails
    • Value: GitHubアカウントのメールアドレス
  • <Next>
  • Additional settings > Browser rendering: SSH

(8) エンドポイントにアクセスする.

Webブラウザでアクセスすると以下のような画面が表示されUser/PasswordでSSH出来る.

SSHする場合にはマシンにcloudflaredのCLIツールを導入し,~/.ssh/configに以下のような記述を追加する.今回はhomebrewでcloudflaredをインストールしたためドキュメントとパスが異なる.

Host remote.example.com
  User pi
  ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h

SSHする際に ssh remote.example.com と入力すると自動でWebブラウザが起動し,認証に成功するとRaspberry PiにSSHできる.

感想

ドキュメントが豊富で設定方法が複数あるため少し混乱したものの設定できた.無料で利用できる点が使いやすく便利だと感じた.インターネットフェイシングなエンドポイントがManaged Service経由で利用できるのは便利だと思った.

参考資料

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です