---
title: "(編集中)グローバルIPなし、VPSなし、Cloudflare利用で自宅Misskeyを建てる[実験的]"
id: "6531"
type: "post"
slug: "%e7%b7%a8%e9%9b%86%e4%b8%ad%e3%82%b0%e3%83%ad%e3%83%bc%e3%83%90%e3%83%abip%e3%81%aa%e3%81%97%e3%80%81vps%e3%81%aa%e3%81%97%e3%80%81cloudflare%e5%88%a9%e7%94%a8%e3%81%a7%e8%87%aa%e5%ae%85misskey"
published_at: "2023-10-24T10:07:36+00:00"
modified_at: "2023-12-09T14:23:39+00:00"
url: "https://www.okin-jp.net/archives/6531"
markdown_url: "https://www.okin-jp.net/archives/6531.md"
excerpt: "MacのWindowsAppからxrdpにrdp接続するとusキーボードになってしまうので調査 Continue reading"
taxonomy_category:
  - "Cloudflare"
taxonomy_post_tag:
  - "Cloudflare"
  - "Cloudflare Tunnel"
  - "Cloudflare Warp"
  - "Cloudflare Zero Trust"
  - "ff0000"
---

こんにちは！Twitterの開発者離れで徐々にMisskeyに引っ越しているおきんです。 今回Misskey.ioにアカウントを作成しましたが、Fediverseに参加する観点でも好き勝手出来る自分の城を持つという意味でも自宅にもインスタンスが欲しくなったので、みおきー([https://mi.okin-jp.net](https://mi.okin-jp.net)
)を立てたときの手順を紹介します。

## 概要

キーワード: Cloudflare Tunnel, cloudflared, Cloudflare Warp, Cloudflare Zero Trust, Cloudflare, Docker, Misskey, Fediverse, お一人様インスタンス, お一人様サーバー  
 Zero Trust インターネット向きおよびインターネットからの通信を全てCloudflare Zero Trustを通じて行うことで、VPSなどの外部設備を使わずにMisskeyインスタンスを建てます。なおこの方法で立てると何故か瞬断が頻発するため**本番運用には非推奨**です。

## 前提条件

- Cloudflareで利用可能な状態の独自ドメイン(ネームサーバーをCloudflareに向けているもの)
- インターネットに接続可能な環境(実効帯域幅100Mbps程度推奨)
- amd64 Linuxのインストールされたサーバー(今回はUbuntu22.04を使用) ※これはarm64環境向けのCloudflare Warpクライアントが配信されていないためです

## 出来上がる構成

以下はMisskeyからみた具体的なTunnelとWarpの使い分けイメージです。 ![Image](https://www.okin-jp.net/img/cloudflare-misskey.png)

1. 外からMisskey宛てに来る通信は、インターネットから見たときにはCloudflareが待ち受けています。そして実際の通信はTunnel(一般的に言うリバースプロキシ+VPN)を通じてMisskeyの待ち受けポートに届けられます。 これにより、サーバー自身へ直接アクセスできる必要がなくなり、一般的なクライアントとしてのインターネット疎通性があればいいということになります。
2. Misskeyから他インスタンスなどインターネット上のサーバーへのアクセスは、Warp/Cloudflare Zero Trust(一般的にいうVPN)を通じてCloudflare経由で行われます。VPNなのでこのサーバーからの通信はインターネットから見るとCloudflareから行われているように見えます。

つまり完成した構成 では、インターネットからみて完全にCloudflareのIPから通信を行うサーバーになることができます。

## 操作手順

### サーバーの事前準備

1. インストール済みのパッケージを最新化する sudo apt update sudo apt upgrade -y | 12 | sudo apt updatesudo apt upgrade -y | | --- | --- |
2. 必要そうなパッケージを入れる # とりあえず入れておくと便利なパッケージ sudo apt install software-properties-common build-essential screen nano # Proxyする用のnginx sudo apt install nginx # letencryptで証明書をとりたいときのためのパッケージ sudo apt install certbot python3-certbot-dns-cloudflare # NASにデータを置きたいときなど sudo apt install cifs-utils | 12345678 | # とりあえず入れておくと便利なパッケージsudo apt install software-properties-common build-essential screen nano# Proxyする用のnginxsudo apt install nginx# letencryptで証明書をとりたいときのためのパッケージsudo apt install certbot python3-certbot-dns-cloudflare# NASにデータを置きたいときなどsudo apt install cifs-utils | | --- | --- |
3. (もしあれば)Snap版のdockerを削除する sudo snap remove docker | 1 | sudo snap remove docker | | --- | --- |
4. dockerをインストールする。(参照: [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/) ) curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh # 動作確認 sudo docker version sudo docker compose version | 123456 | curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh # 動作確認sudo docker versionsudo docker compose version | | --- | --- |
5. 

### Cloudflare Zero Trustの事前設定

今回実施する設定は以下の通りです。

- General>Team domainの設定(Team domain(<subdomain>.cloudflareaccess.com)を設定する)
- Network>Firewall関連の設定(TLS decryptionとAV inspectionの無効化)
  - Cloudflareの証明書をクライアントに入れる必要がある設定を外します

- WARP Client>Device enrollment関連の設定(Service Tokenの設定)
  - サーバーからログインするための事前設定をします

- WARP Client>Device settings関連の設定(Auto connectの設定)
  - Cloudflare Warpに自動接続する設定をします

- WARP Client>Device settings関連の設定(Split tunnelsの設定)
  - Cloudflare Tunnelと共存するために必要な設定をします

1. Cloudflareの管理画面トップ>Zero Trust か [https://one.dash.cloudflare.com/](https://one.dash.cloudflare.com/) から Cloudflare Zero Trustの管理画面に入る。
2. 左のメニューからSettingsを選ぶ [https://www.okin-jp.net/wp-content/uploads/2023/02/482f82ef5992de36e7f3ebbe5bf0d7d1.png](https://www.okin-jp.net/wp-content/uploads/2023/02/482f82ef5992de36e7f3ebbe5bf0d7d1.png)
3. Generalを選ぶ
  1. WIP

4. Networkを選ぶ
  1. TLS decryptionとAV inspectionをDisabledにする [https://www.okin-jp.net/wp-content/uploads/2023/02/8b03b2dc81b451fe31efda8c66e7005b.png](https://www.okin-jp.net/wp-content/uploads/2023/02/8b03b2dc81b451fe31efda8c66e7005b.png)

5. Settingsに戻って、WARP Clientを選ぶ
  1. Device enrollment>Device enrollment permissionsのManageを選ぶ [https://www.okin-jp.net/wp-content/uploads/2023/02/f124ce8330d2577044343c42269e7f8b.png](https://www.okin-jp.net/wp-content/uploads/2023/02/f124ce8330d2577044343c42269e7f8b.png)
    1. ルール一覧の画面になるので Policies>Add a ruleを選ぶ
      1. Rule Nameを決め、 Rule ActionをService Authにし、 Include>SelectorをAny Access Service Authにする [https://www.okin-jp.net/wp-content/uploads/2023/02/8561f134d284cd2a7cdb399adca1e695.png](https://www.okin-jp.net/wp-content/uploads/2023/02/8561f134d284cd2a7cdb399adca1e695.png)
      2. Saveを選び保存する ルール一覧の画面に戻る

    2. Saveを選び保存する 右側に以下のような表示が出ることを確認する [https://www.okin-jp.net/wp-content/uploads/2023/02/48249f647d7a9d77da3c204e045e60bb.png](https://www.okin-jp.net/wp-content/uploads/2023/02/48249f647d7a9d77da3c204e045e60bb.png)
    3. Back to SettingでWARP Clientに戻る [https://www.okin-jp.net/wp-content/uploads/2023/02/d24f3b321621f78a88980f0174a29fef.png](https://www.okin-jp.net/wp-content/uploads/2023/02/d24f3b321621f78a88980f0174a29fef.png)

  2. Device settings>Profile settings>Default>Configureを選ぶ ※画像にはServerがあるが、初期状態ではDefaultのみがある [https://www.okin-jp.net/wp-content/uploads/2023/02/a57e32e5483653cc54926dc07021f603.png](https://www.okin-jp.net/wp-content/uploads/2023/02/a57e32e5483653cc54926dc07021f603.png)
  3. Captive portal detectionをDisabledにする [https://www.okin-jp.net/wp-content/uploads/2023/02/038d545f38d3b08eb78e96b4fb8b9115.png](https://www.okin-jp.net/wp-content/uploads/2023/02/038d545f38d3b08eb78e96b4fb8b9115.png)
  4. Auto connectをEnabledにする [https://www.okin-jp.net/wp-content/uploads/2023/02/fd6d472925bf91d568f4c958d10bafe4-e1677143204288.png](https://www.okin-jp.net/wp-content/uploads/2023/02/fd6d472925bf91d568f4c958d10bafe4-e1677143204288.png)
  5. Split Tunnels>Manageを選ぶ [https://www.okin-jp.net/wp-content/uploads/2023/02/242d63c5ec2d04800f85f3ccc7ad8635.png](https://www.okin-jp.net/wp-content/uploads/2023/02/242d63c5ec2d04800f85f3ccc7ad8635.png)
    1. 
      1. 以下のドメインを除外設定する *.argotunnel.com
      2. Selectorでdomainを、Valueで上記のドメインを入れて、Saveすると追加できる [https://www.okin-jp.net/wp-content/uploads/2023/02/2f2c0d57332a29fd4072056270043251.png](https://www.okin-jp.net/wp-content/uploads/2023/02/2f2c0d57332a29fd4072056270043251.png)
      3. 最終的に右のリストに以下のように追加できていれば良い [https://www.okin-jp.net/wp-content/uploads/2023/02/c2edc478ee886280108d29312ac775db.png](https://www.okin-jp.net/wp-content/uploads/2023/02/c2edc478ee886280108d29312ac775db.png)
      4. 追加できたら、左上のBack to profileで一つ前の画面に戻る

    2. Save profileを押して保存する

### Cloudflare Warpの設定

Misskeyインスタンスを動かすサーバーがインターネットと通信する経路をCloudflare経由にします

1. Warpクライアントのレポジトリを設定する(参照: [https://pkg.cloudflareclient.com/](https://pkg.cloudflareclient.com/) ) # GPG keyを追加する curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg # レポジトリを追加する echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list # リポジトリ情報を更新 sudo apt update | 123456 | # GPG keyを追加するcurl https://pkg.cloudflareclient.com/pubkey.gpg \| sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg# レポジトリを追加するecho "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" \| sudo tee /etc/apt/sources.list.d/cloudflare-client.list# リポジトリ情報を更新sudo apt update | | --- | --- |
2. mdm.xmlを作る(参照: [Managed deployment · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-devices/warp/deployment/mdm-deployment/) )
  1. mdm.xmlに必要なService Tokenを取得する
    1. Cloudflare Zero Trustの管理画面からAccess > Service Authを選ぶ ![Image](https://www.okin-jp.net/img/CFZT-SA%E4%BD%9C%E6%88%90.png)
    2. Create Service Tokenを選び、Service Tokenを作成する 名前と有効期限(無期限も可)を決める ![Image](https://www.okin-jp.net/img/CFZT-SA%E4%BD%9C%E6%88%902.png)
    3. ServiceTokenとしてclient ID(.accessで終わる)とclient secretが表示される(黒塗りのところ)ので、メモを取る client secretは一度しか表示されないので、もしメモを取り損ねたら慌てず消して作り直す ![Image](https://www.okin-jp.net/img/CFZT-SA%E4%BD%9C%E6%88%903.png)

  2. mdm.xmlを置くディレクトリを作成する sudo mkdir -p /var/lib/cloudflare-warp/ | 1 | sudo mkdir -p /var/lib/cloudflare-warp/ | | --- | --- |
  3. 以下の内容を取得したService Tokenなどで埋めて、/var/lib/cloudflare-warp/mdm.xmlを作成する <dict> <key>organization</key> <string>ここにTeam domainを入れる</string> <key>auth_client_id</key> <string>ここにclient IDを入れる</string> <key>auth_client_secret</key> <string>ここにclient secretを入れる</string> </dict> | 12345678 | <dict> <key>organization</key> <string>ここにTeam domainを入れる</string> <key>auth_client_id</key> <string>ここにclient IDを入れる</string> <key>auth_client_secret</key> <string>ここにclient secretを入れる</string></dict> | | --- | --- |

3. Warpクライアントをインストールする sudo apt install cloudflare-warp | 1 | sudo apt install cloudflare-warp | | --- | --- |
4. warp-cliで接続する warp-cli connect | 1 | warp-cli connect | | --- | --- |
5. 接続元IPがCloudflareになっていることを確かめる curl https://ipinfo.io/ | 1 | curl https://ipinfo.io/ | | --- | --- |

### Cloudflare Tunnelの設定

Tunnelを設定する

### Cloudflare Tunnel・Warpクライアントの瞬断対応

Cloudflare Tunnelが不通になったときにcloudflaredを再起動するスクリプトを設置し、5秒に1度程度実行するように設定します。

[cloudflared起因でサイトがダウンしたときに活を入れる](https://www.okin-jp.net/archives/6574)
のスクリプトを良い感じの場所に設置してcrontabやsystemd-timerで定期実行します。このスクリプトはsystemdを操作するのでrootユーザーで再起動。

crontabに設定する場合の例です。

crontabC

* * * * * for i in `seq 0 5 59`;do (sleep ${i}; /root/reconnect-cloudflared.sh) & done;

| 1 | * * * * * for i in `seq 0 5 59`;do (sleep ${i}; /root/reconnect-cloudflared.sh) & done; |
| --- | --- |

### Misskeyのインストール

Misskeyインスタンスの作成 | Misskey Hub [https://misskey-hub.net/docs/install.html](https://misskey-hub.net/docs/install.html)
 を参考にインストールします。

### Misskeyのセットアップ

いくつかの標準的な設定について紹介します。

#### webpush用のキー生成

参考: https://www.npmjs.com/package/web-push

Shell

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&sudo apt-get install -y nodejs sudo corepack enable npx web-push generate-vapid-keys

| 123 | curl -fsSL https://deb.nodesource.com/setup_18.x \| sudo -E bash - &&sudo apt-get install -y nodejssudo corepack enablenpx web-push generate-vapid-keys |
| --- | --- |

#### オブジェクトストレージを使う

参考: https://yama2211.jp/misskey-wasabi/

![おきん(blog)](https://secure.gravatar.com/avatar/90fa8845304183a491e9f3bfa0a6a44e46e25882407e4aa652815d725d55bd8c?s=100&r=g)

[おきん(blog)](https://www.okin-jp.net/archives/author/oops-okin)

[https://mi.okin-jp.net/@okin_p](https://mi.okin-jp.net/@okin_p)
(Misskey)  
 [https://fi.okin-jp.net/@okin_p](https://fi.okin-jp.net/@okin_p)
(Firefish)  
 [https://si.okin-jp.net/@okin_p](https://si.okin-jp.net/@okin_p)
(Mastodon)

[https://fedifile.net/@okin_p/profile/](https://fedifile.net/@okin_p/profile/)
  
 [https://twpf.jp/okin_p](https://twpf.jp/okin_p)
  
 [http://profile.hatena.ne.jp/okin_p/](http://profile.hatena.ne.jp/okin_p/)

名前：おきん  
 やってること：面倒なことをPHPにやらせる、IPv6でなにかする、車で移動する  
 主なガジェット：Google Pixel 4a (5G) ,iPhone XS(ジャンク), iPad mini5, その他

種別：IPv6 Single stack 猫

パソコンやガジェットについて書いていく…予定。

[https://twitter.com/okin_p](https://twitter.com/okin_p)
[https://si.okin-jp.net/@okin_p](https://si.okin-jp.net/@okin_p)

### *関連記事*

### コメントを残す[コメントをキャンセル](/archives/6531#respond)

このサイトはスパムを低減するために Akismet を使っています。[コメントデータの処理方法の詳細はこちらをご覧ください](https://akismet.com/privacy/)
。
