2023年1月9日
cloudflared (Cloudflare Zero Trust, Cloudflare Tunnels)でMisskeyサーバーを立ち上げます。Misskeyのインストールはbash-installで行います。
作業中にメモするのではなく作業後に記事を書いたため、抜けや間違いがある気がします。
Cloudflareにサインアップしていない場合はまずサインアップする。
そして、ドメインをClouflareに登録しよう。
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
でホスト名を編集する。
HTTP
://localhost:80
に設定する。DNS Recordがなんとかかんとかと警告表示があるが、自動で設定されるので無視して良い。
Save tunnelを選択。
SSH接続の設定も行なう。
トンネルリストに戻るので、作成したトンネルのConfigureを選択し、Public Hostnameタブを表示。Add a public hostnameを選択。
SSH
://localhost:22
に設定する。Save hostnameを選択。
Access > Applicationsを開き、Add an applicationを選択、Self-hostedをSelect。
中段は飛ばして、
上に戻ってNext
Next
Add Application
クライアントマシン(手元のパソコン)で操作する。
~/.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 [email protected]
ブラウザが開いて認証を行う必要があるが、認証が終われば通常のログインができる。
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 [email protected]
リモートにssh接続する。
ssh [email protected]
/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 [email protected]
exit
Misskey install shell script (bash-install) v2を使用して、Misskeyを適当にインストールしていく。
cloudflaredを使うにあたり、bash-installの設定は次のように行う。
そのほかの設定はお任せする(というかEnterだけ押していればなんとかなる)。
n
(ファイヤウォールのセットアップなし)ssh接続にやたら時間をかけた以外は、そこそこ簡単にサーバーを公開できましたね。
(実はsshはCloudflare Tunnelsだけあればパスワードすらいらないかもしれませんが、とりあえず厳重にロックするようにしてみました。)
自宅サーバーであればsudo ufw enable
だけして全てのポートを閉じてしまって問題ないかと思います。