Day24 ポート開放されていない環境下でサーバーを公開するなら?
もともとは別の記事を書く予定だったのになんかメモが全くないせいで何を書けばいいのか分からずに急いで別記事を書く羽目になっている.本当に私という人間は.
ポート開放とは?
一般に,HTTP/Sは80/443ポートを開放して通信してもらいます.
通常は閉まっていますが,通信して欲しかったら開ける必要があります.(NATとかingressとかegressとかの話)
そこで,サーバーを公開したい人はポートも開放しなければなりません.
…が,全員がポートを開放できるのでしょうか.
なぜ出来ない場合が?
まず前提として,基本的には一般ユーザーはポート開放なんてしなくてもなんでもできます.NATとかのなんかすごいシステムで(適当).
ただ一部の環境下ではポート開放できない場合があります.
2重ルーターとか.あとは…なんか仕様とか.
特に多いのがIPv6環境であることですかね.
IPoEと呼ばれるような最新の通信システム.これまでのIPv4と通信をするにはIPv4 over IPv6というものを介していきます.まぁどこかで聞いたことがある話かもしれませんが,IPv6の方が混雑しないらしいので基本はそっちを使って,仕方ないから後方互換性も持ってやるよ,みたいな.
で,IPv6というものにはポートの概念はありますがポート開放の概念はありません.
そもそも,なぜポート開放というものがあるのかというと,おうちに対して1つのIP(v4)アドレスを振り分けて,「お前の家はこのIPだからな!」ってやったところ,おうちの中の特定のPCを指定する方法がなくなってしまったので,「おうちのIPアドレスのあるポートは,おうちの中のこのPCのこのポートにつなげる」みたいな感じで解決した…みたいな感じなんですよ(歴史順不同,主としてNAPTについて語っているような気がする)
そもそも,なんでおうちに対して1つのIPアドレスを振り分けて,そのおうちの中のPCとかも一意になるようなアドレスを振り分けなかったかというとIPv4はアドレス空間が狭いから…なんですかね.
ただ,IPv6ではアドレス空間がめちゃくちゃ増えたのでそのようなおうちに振り分けみたいなことをせず,基本的には相手のPCのIPv6アドレス直指定で通信をすることが出来ます.(すなわちNAT越えみたいなことをしないみたいな意味)
なので,ファイアーウォールを適切に設定すれば基本的にはIPv6アドレスとポートを教えてあげれば通信できるようになります.(基本はガチガチだったり一時IPv6とかの話で最初は通信できないようになっている…ような?)
かくいう私も
この前ネットワーク環境を刷新したのでIPoE環境になりました.
そのため,IPv4のポート開放を全くしていません.
しかし,Webサーバーをおうちサーバーから公開しています.どうやって…?
いくつか方法はあるが…
今回はHTTPにめちゃくちゃ話を限って言いますが,Cloudflare Tunnelというものをめちゃくちゃ使っています.
これは,Cloudflareと自宅サーバーの間にトンネルを張ることで,ポート開放せずに一般ユーザーはCloudflareを経由しておうちにHTTPリクエストを行えるってわけなんです.
なんかめちゃくちゃ分かりやすそうな記事もあるので紹介しますね.
今回はHTTPに限った話をしましたが,SSHとかTCPとかも出来るのでまぁ便利ですよ.
というわけで
あなたも,ポート開放されていない環境下でWebサーバーを立てたいならCloudflare Tunnelを使ってみてはいかがでしょうか.