IPoE 4o6回線でMisskeyサーバの公開に至るまで

こんばんは、aurorancerです。BackspaceKey Advent Calendar 2023、3枚目の16日目は私が担当いたします。いつもLTLでお世話になりっぱなしで、皆様には感謝してもしきれません。

特に今年はIPv6を取り扱う機会が多く、本業でも求められるスキルとして挙げられていました。以前から自宅にIPoE 4o6(IPv4 over IPv6)回線を敷設していましたが、IPoEやIPv6などについて真面目に勉強していなかったこともあり、なんとなく使っていました。このままではいけないなと思った私が、IPoE 4o6回線でMisskeyサーバの公開に至るまでと題し、この記事を執筆いたします。当ウェブサイト初のテック系記事です。よろしくお願いいたします。

IPv4とIPv6の違い

これについては他の方の記事やJPNICが公開している資料などを参照すると良いでしょう。大体同じようなことが書かれていますが、特に注意したいことは以下の通りです。

  • 自動設定
  • インターネット回線

IPv4にはDHCPという、ステートフル1にIPv4アドレスを管理する仕組みが主流です。Windowsであれば、コマンドプロンプトでipconfig /allコマンドを発行することで、どのようにIPv4アドレスが割り当てられているのか確認できます。

C:\>ipconfig /all

イーサネット アダプター vEthernet (External Switch):

(中略)

   DHCP 有効 . . . . . . . . . . . . . .: はい
   自動構成有効. . . . . . . . . . . . .: はい

(中略)

   DHCP サーバー . . . . . . . . . . . .: 172.16.3.254

IPv6はDHCPサーバが無くても通信できるように設計されています。その自動設定とアドレス生成方法については、小川晃通さんの解説動画が非常にためになります。

インターネット回線については、この記事のメインと言っても良いでしょう。深堀していきます。

想像する論理構成図

自宅はひかり電話なし契約のため、プレフィックスについては/64がリースされます。別の話ですが、NURO Bizアクセス 2Gでは/56がリースされることを確認しています。その他、ひかり電話あり契約やその他プロバイダのプレフィックスについては未確認です。

ルータはNEC IX2105 v10.2.42を使いました。VNE事業者はJPIX(JPNE)で、4o6サービスはv6プラスを契約しています。

アドレッシングに関して、サーバは半固定トークンを使いました。Ubuntuを例に挙げると、netplanの設定ファイルでipv6-address-token: ::2:64を追加すればOKです。これを設定することで、たとえプレフィックスのIPv6アドレスが変わってもそれを反映しつつ、インターフェース識別子は固定という理想的なアドレッシングが可能です。特にIPv6グローバルユニキャストアドレスのプレフィックスが異なるとインターネットに出られないため、頻繁にプロバイダを切り替える方におすすめの設定になります。

その他のアドレッシングについてはSLAACを使いました。MACアドレスから生成されているため、一部内容にフェイクを入れています。お使いの端末によってはインラインPDFが表示できませんので、その場合はダウンロードして閲覧してください。

IPv4環境からだとアクセスできない

実は、この構成のままだとIPv4環境からアクセスできません。理由は単純で、IPv4グローバルアドレスを他の加入者と共有しているからです。他の加入者と区別するために、IPv4グローバルアドレスとは別にポート番号でも区別します。しかし、そのポート番号は計算によって割り当てられるため(PSID2)、自分が使いたいポート番号を選ぶことができません。

MisskeyサーバはHTTPS(443/TCP)で通信します。Let's Encryptをセットアップする際にHTTP(80/TCP)も利用するため、NEC IX2105のWAN側からLAN側に、HTTPSとHTTPをMisskeyサーバにポートフォワーディングもしくはNAPTしなくてはなりません。IPoE 4o6回線だとそれができないため、一筋縄ではいかないのです。

解決策として、固定IPv4グローバルアドレスサービスを契約し、NEC IX2105でポートフォワーディングもしくはNAPTする方法があります。固定IPv4グローバルアドレスであれば他の加入者がそのIPv4グローバルアドレスを使うことがないため、ポート番号による区別を行わなくて済みます。しかし、私が利用しているプロバイダはそのサービスに対応していなかったため、このまま進行します。

IPv6環境からは簡単にアクセスできる

IPv6環境からアクセスされることだけを考えれば話は簡単です。NEC公式サイトの「v6プラス(MAP-E方式)設定ガイド」を参考に設定している場合、Misskeyサーバを宛先としたHTTPSおよびHTTP通信を許可するアクセスリストを作成し、WAN側にインバウンド方向で適用すればOKです。この時、明示の拒否「ipv6 filter block-list 100 in」より上位に設定するようにします。

外部のリバプロサーバで解決する

Misskeyの公式インストールガイドをご覧になった方もいらっしゃるかと思います。Misskeyサーバを構築するために必要な手順がすべて詰め込まれている、素晴らしいドキュメントです。サーバ構築初心者の私でも出来たので間違いありません(すべて個人の感想です)。

そのドキュメントの中で登場するCloudflareが、今回解決に至ったサービス名です。

Cloudflareはリバプロ(リバースプロキシ)サーバや権威DNSサーバ、WAF(ウェブアプリケーションファイアウォール)やCDN(コンテンツデリバリネットワーク)などのサービスを提供しています。ざっくり言ってしまうと、セキュリティや応答速度向上のために必要なアプリケーションおよびバックボーンネットワークを提供しています。Cloudflareに登録すると購入したドメインを尋ねられ、そのドメインを取得した権威DNSサーバにCloudflareのネームサーバを指定するよう案内されます

画面中央にある「始める」をクリックして、プロファイルを作成します。
ムームードメインなどのドメイン会社から購入したドメイン名を入力します。
購入したドメイン会社のコントロールパネルにて、ネームサーバを切り替えるよう案内されます。

どうやらCloudflareのリバプロサーバ(正確にはCDN)は、IPv4グローバルアドレスとIPv6グローバルユニキャストアドレスを所有しているようです。よって、以下のような構成ができると考えました。

この構成の肝は、ユーザから見てIPv4が扱える、Misskeyサーバそのもの、もしくはそれをオリジンとするリバプロサーバがあるかどうかです。正直、リバプロサーバはIPv4グローバルアドレスを持っていればなんだって良いです。F5 BIG-IP3をIPv4環境な友人宅に置き、友人宅と自宅間でバックボーンネットワークを構築しても面白いかもしれません。お上司誘ってやってみるか。

以下の資料は名前解決に着目した構成図になります。IPv4環境にある端末がどのように名前解決し、Cloudflareがどのようにオリジンサーバからコンテンツを取得するのか、一度確認してみてください。

最後に

このように、IPoE 4o6回線でMisskeyサーバを公開するのはそれほど高難易度ではない、ということをお伝えできたでしょうか・・・?Misskeyを選んだ理由として、丁寧な日本語のインストールガイドとOSS、そして極度のミス廃だったからです。Misskey最高!

私自身も何度か自宅サーバを公開したいという気持ちがありましたが、自身の技術不足が足枷となっていました。しかし、コツコツと学んでいけたら、あとは組み合わせでできることが一気に広がることを実感し、とても嬉しく思います。

色々なことにチャレンジしてみて、その仕事に携わる人の苦労も喜びも自分の糧になっていけるよう、

今日も仮想基盤を破壊するのでした

破 壊 神 リ ア ン 降 臨

公開したお一人様Misskeyサーバも、今や存在せず。OVFファイルでバックアップしよう!

明日はたかな様aptorojp様の記事が出ます。明日もここでお会いしましょう。それでは!

  1. サーバがある通信の状態を把握する意 ↩︎
  2. 第4フィールド(IPv6のグローバルルーティングプレフィックスの下位16bitとサブネットID)から計算した240個のポート群 ↩︎
  3. リバプロサーバ、ロードバランサ、リモートアクセスマネジメントなどができる有名なアプライアンス製品名 ↩︎