2023年1月9日

cloudflaredでMisskeyサーバーを立ち上げるメモ

cloudflared (Cloudflare Zero Trust, Cloudflare Tunnels)でMisskeyサーバーを立ち上げます。Misskeyのインストールはbash-installで行います。

作業中にメモするのではなく作業後に記事を書いたため、抜けや間違いがある気がします。

Cloudflare Tunnels 特徴

利点

欠点?

Cloudflareのセットアップ

Cloudflareにサインアップしていない場合はまずサインアップする。
そして、ドメインをClouflareに登録しよう。

Cloudflare Zero Trustのセットアップ

Cloudflare Zero Trustのダッシュボード https://one.dash.cloudflare.com/ にアクセスする。

アクセスグループの作成

Access > Access Groupsでアクセスグループを作成する。

名前は適当で良い。

Group configurationのIncludeで、Selector = Emails / Value = 自分が受信可能なメールアドレス を設定する。

ログインメソッドの設定

Settings > Authentication > Login methodsでAdd newを選択したのち、One-time PINを選択。
選択するだけでログインメソッドにOne-time PINが追加される。

トンネルの作成とマシンへのセットアップ

Cloudflare Tunnelsをセットアップする。

最新の情報を以下のURLで確認すること。
https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/tunnel-guide/remote/

バッファサイズを拡張する

ネットワーク接続のバッファサイズを拡張するため、サーバーで次のコマンドを実行する。

sudo sysctl -w net.core.rmem_max=2500000

もしこれを忘れるか後回しにした場合は、cloudflaredのデーモンを再起動する。
(順番通りに読んでいる場合は実行しなくて良い)

sudo systemctl restart cloudflared

トンネルを作成しコマンド実行

Zero TrustダッシュボードでAccess > Tunnelsを開き、Create a tunnelを選択。名前は適当で良い。

Choose your environmentでOSとアーキテクチャを選択する。Ubuntuの場合はDebianを選択する。If you don’t have cloudflared installed on your machine:の内容をコピーし実行する。
これを、サーバー上および手元のパソコンのターミナル上の両方で行う。
(手元のパソコン上でターミナルが動かなければ、サーバーのみで問題ない)

下部のConnectorsでサーバーとパソコンからの接続が確認できたら、Nextを選択。

公開するホスト名を編集

Edit public hostname forでホスト名を編集する。

DNS Recordがなんとかかんとかと警告表示があるが、自動で設定されるので無視して良い。

Save tunnelを選択。

SSH設定

SSH接続の設定も行なう。

トンネルリストに戻るので、作成したトンネルのConfigureを選択し、Public Hostnameタブを表示。Add a public hostnameを選択。

Save hostnameを選択。

アプリケーションの作成

Access > Applicationsを開き、Add an applicationを選択、Self-hostedをSelect。

中段は飛ばして、

上に戻ってNext

Next

Add Application

SSH接続する

クライアントマシン(手元のパソコン)で操作する。

~/.ssh/configを編集し、次のように追記する。
ProxyCommandの/path/to/cloudflaredは、Windowsならwhere.exe cloudflared、それ以外ならwhich cloudflaredの結果に置き換えること。

Host ssh.example.com
  HostName ssh.example.com
  ProxyCommand /path/to/cloudflared access ssh --hostname %h

ssh接続してみよう。userは適宜適切なユーザー名に置き換えてほしい。
(もしsshがインストールサーバーにインストールされていない場合はsshdをセットアップしよう。)

ssh user@ssh.example.com

ブラウザが開いて認証を行う必要があるが、認証が終われば通常のログインができる。

公開鍵認証の設定

sshへのログインが公開鍵認証ではなくパスワード認証の場合は、公開鍵認証を設定しよう。
(ただし、この方法で設定するとなぜかブラウザレンダリングでSSHにログインできなくなってしまう)

ssh-keygen -t rsa -f ~/.ssh/my_ssh_key -C user # my_ssh_keyは好きな鍵名に、userは適切なユーザー名にする
# パスワードは設定しなくても良い
ssh-copy-id -i ~/.ssh/my_ssh_key user@ssh.example.com

リモートにssh接続する。

ssh user@ssh.example.com

/etc/ssh/sshd_configを次のように編集する。

sshdを再起動し、サーバーから切断する。

sudo systemctl restart sshd
exit

IdentityFileでssh秘密鍵を設定しよう。

Host ssh.example.com
  HostName ssh.example.com
  ProxyCommand /path/to/cloudflared access ssh --hostname %h
  IdentityFile /Users/your_local_user/.ssh/my_ssh_key

パスワードなしでログインするかどうか確かめてみる。

ssh user@ssh.example.com
exit

bash-installでMisskeyをインストール

Misskey install shell script (bash-install) v2を使用して、Misskeyを適当にインストールしていく。

cloudflaredを使うにあたり、bash-installの設定は次のように行う。
そのほかの設定はお任せする(というかEnterだけ押していればなんとかなる)。

いかがでしたか?

ssh接続にやたら時間をかけた以外は、そこそこ簡単にサーバーを公開できましたね。
(実はsshはCloudflare Tunnelsだけあればパスワードすらいらないかもしれませんが、とりあえず厳重にロックするようにしてみました。)

自宅サーバーであればsudo ufw enableだけして全てのポートを閉じてしまって問題ないかと思います。