前にふれていた Cloudflare Workersを使ってMAP-E環境からWebサーバを公開することが出来たので記事にしたいと思います。
MAP-Eとは
そもそもMAP-Eとはv6プラスなどでIPoEでインターネットアクセスする際に利用するトンネリング技術です。
IPoEではMAP-Eの他にDS-Liteもありますが、両者の違いは簡単にまとめると以下になります。
トンネリング技術 | NAPTポイント | 物理的なNAPTポイント |
---|---|---|
MAP-E | CPE(Customer Premises Equipment) | 顧客HGW側 |
DS-Lite | AFTR(Address Family Transition Router) | キャリア側 |
MAP-Eの場合ではHGW側でNAPTを行うため、使っているルーター(HGW)によってはMAP-E環境でもIPv4のグローバルIPアドレスでポート開放出来ます。
フレッツ系のHGWでは以下urlでポート開放の設定が可能です。
http://ntt.setup:8888/t/
しかしMAP-Eで公開出来るポート番号はWebサーバで利用するTCP:80,443などのwell-knownポートではなく、割り当てられたIPv6アドレスのPSID(Port-Set Identifiers)を元にポートレンジが決まります。
このポートは連続した16のポート番号×15のポートレンジブロックになるようです。
(0x1(PSID2桁)0 ~ 0xF(PSID2桁)Fであるため)
詳しくは以下参照してください。
MAP-E環境でポート解放出来るものの、webサーバとしてwell-knownポートで公開する事は出来ませんが、Cloudflare Workersを使えば実現出来ます。
Cloudflare Workersを使う
Cloudflare Workersは簡単に言えば、FaaS(Function-as-a-Service)なサーバレスでscriptを実行出来るサービスです。
CloudflareのEdge環境で実行出来るため、低レイテンシ等が売りになっています。
いつの間にかJavascript以外にもC/C++/Rustにも対応していました😮
今回はMAP-Eでwell-knownポートでアクセス出来ないwebサーバへのアクセスを、Cloudflare Workersの処理を介してwell-knownポートでアクセスさせるために利用します。
https://workers.cloudflare.com/
- 技術的な詳細
ちなみに気になる料金ですが、1日あたり10万リクエストまでは無料枠で利用出来ます。大規模サイトでない限り、かなり活用出来そうです。
という事でさっそくCloudflare Workersで以下の様なscriptを保存してデプロイします。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
/**
* Respond to the request
* @param {Request} request
*/
async function handleRequest(request) {
var newURL = new URL(request.url)
newURL.host = 'target.example.com'
newURL.port = 12345 //MAP-E port
return fetch(newURL, request)
}
処理としてはシンプルにHTTPS/HTTPアクセスを受け取ると、MAP-Eで公開しているポート番号にアクセスして取得し、リクエスト元に返却します。ポートリダイレクトみたいなものです。
scriptを保存してdeloyすると管理ドメインのサブドメインにランダムに生成された文字列のurlが作成されます。このurlにアクセスすると上記のscriptが実行されます。
scriptが正常に動作し、MAP-Eで公開しているWebページにアクセスが出来ればRoutesの設定を行います。
ここでWebサーバで設定するドメイン、サブドメインのurlとWorkerの紐づけを行います。
Workerを作成するとランダムなurlが生成されましたが、このRoutesの設定によって好きなドメイン、サブドメインのurlでアクセスさせる事が可能になります。
まとめ
今回Cloudflare Workersを使うことによって、MAP-E環境でもWebサーバをwell-knownポートでインターネットに公開出来る方法を紹介しました。Cloudflare Workersではurlの書き換えなどJavascriptでリクエスト処理の介入が出来るため、活用の自由度は高いです。key value storeの機能もあります。
ただ実際にはWebサーバへのアクセスで画像データ、css、jsファイルのリクエスト毎にCloudflare Workersの処理が発生するのが少しネックなので、静的データなどのリソースは外部にアウトソースするなど少し考慮は必要かもしれません。基本無料枠のプラン10万リクエストを超えることはあまりないと思いますが…
MAP-E環境で自宅サーバでWebサーバを公開したい場合には、Cloudflare Workersを活用すると良さそうです。それ以外にもイケてるサービスだなと思ったので、今後も色々活用してみようと思います。