ルータの「ポート開放」を理解しよう!「家」アナロジーでは住友不動産が鍵だった?
こんにちは!
nodejs の週末プログラミングにハマっててブログ更新がなかなか思うように進まない、しずかなかずしです。
突然ですが、WiFiルーターのポート開放って言葉ご存知ですか?
前回に引き続き、今週も自宅サーバーの話題です。
前回は、サービスプロバイダが割り当てた、不規則に変わってしまうIPアドレスを、固定的なドメイン名でアクセスするための技術、DDNS(Dynamic Domain Name System) を説明しました。
その中で、名前からIPアドレスに変換ができただけでは、サーバーが立てられない。インターネットから、ルーターに届いたデータをホームネットワーク内部のサーバーに適切に転送する必要がある、という説明をしました。
このような仕組みは、大抵はご家庭に設置されている、WiFiルーターに設定を施すことで利用可能になります。
そして、その設定を俗に「ポート開放」と呼びます。
という訳で、本日は、ルーターのポート開放を説明していきます。
ルーターとサーバーの関係
自宅サーバーとは、どのようなものでしょう?
どのお宅でも家のホームネットワークに、パソコンがつながっているかと思いますが、そのパソコンで、「サーバー」プログラムを動かせば、それがすぐにサーバーになります。ルータの設定で、「ポート開放」を行えば、インターネットを介して世界中から、自宅のパソコンにアクセスできる状態にでるというお話です。
最近は、WiFiのセキュリティカメラ商品もお安くなっています。そういった製品も中にサーバー機能が搭載されています。このような商品を家庭内のホームネットワークにつないだ場合も、同様の話です。そのようなカメラを自宅に設置して、外出先から家の中のペットのようすなんかをチェックするなどの用途もあるでしょう。
格安カメラについては、以下の投稿に詳しく書いています。
このようなケースは、インターネット、ルーター、サーバー(カメラ)は、下図のような感じで接続されているはずです。
ネットワーク接続における「ポート」とは?
そもそも、ポート開放のポートとは、何なのでしょう??
インターネット(正確には、TCP/IPプロトコルと呼んだりします)で通信を確立するためには、IPアドレスだけではなく、「ポート」と呼ばれる論理的な識別子が必要です。
ここで言うポートは、例えばルーターやハブの物理的な端子のことではありません。サーバー(接続機器の中のプログラム)で使用する単なる数字です。機器の内部のプログラムがサーバーとして動作するためには、ポートという機器で固有のID番号(単なる数字)でデータを待ち受ける、ということをします。
クライアントとなるプログラムではIPアドレスに加えて、このポート番号を使って、サーバー「プログラム」に要求を投げる、という処理を行います。
ポート番号を「家」のアナロジーで説明
さて、唐突ですが、マンションなどの集合住宅をイメージして下さい。
マンションには住所がついていますね。これが、インターネットの世界のIPアドレスだとします。
マンションは、3階建て。それぞれのフロアに部屋があり、101号室、102号室、…301号室、302号室…と各部屋があるイメージです。ポート番号とは、建物の中の各部屋の部屋番号みたいなものです。
そして、各部屋の中に、私のリクエストを聞いてくれるサーバーさん(サーバープログラム)がという住人が住んでいるという感じになります。
マンション一つが、インターネットの世界だと、一台のパソコンとか、サーバーのハードウエア(マシン)だと考えてください。各部屋の中の住人は、そのマシンで動作する(サーバー)プログラムです。
さて、このマンションの各戸には、私のリクエストに対して異なる仕事をする人が住んでいます。
例えば、
101号室には、私が必要としている情報が書かれたHTMLをくれる人が住んでいます(HTTPサーバー)。
102号室には、私のファイルを保管しておいてくれる人が住んでいます(FTPサーバー)。
103号室には、私が他のマンションの名前を言うとIPアドレスを教えてくれる親切な住民が住んでることもあります(DNSサーバー)。
などといった感じになります。
マンションには、101号室という名前の部屋が2つあってはいけません。また、別の建物(IPアドレスが異る)にも、やはり101号室は存在します。
インターネットには、こんなマンションが無数に存在し、それぞれの建物に住所(IPアドレス)がついて、複数の部屋があり、各部屋には、部屋の番号が付いていて(ポート番号)、仕事をしてくれる住民(サーバープログラム)が住んでいる。そんなイメージです。
それでは、私は、何かを調べようとグーグル検索をするとしましょう。
その場合、佐川急便に住所と部屋番号(IPアドレスとポート番号)を指定して、キーワードを渡します。佐川急便は、グーグルさんの建物(マシン)に宅配担当者(パケット)を送り、キーワードに対する結果(HTML)をもらって送り返してくれるのです。
「チョッ、待ってください!私が検索するときに、”ポート番号”なんて指定しませんけど??」
と気づいたあなたは、するどい。
マンションのオーナーは、どの部屋にどんな仕事ができる人を住ませるかを決めています。しかし、それは好き勝手に住まわせているわけではないのです。インターネットの世界では、習慣的、慣例的に、どの部屋番号(ポート番号)の部屋に、どんな仕事(プロトコル)をさせるのかが決まっています。オーナーはそれに従って住まわせているのが普通なのです。
建物のどの部屋番号(ポート番号)に何の仕事ができる人(サーバープログラム、プロトコル)を住まわせるか。この、インターネット上の慣例が「ウェルノウンポート」と呼ばれてるものです。
そして、私のリクエストを投げるクライアント・ソフト「ブラウザ」は、HTTPならば80番のポート、HTTPSならば443番のようにプロトコルによってデフォルトのポート番号が慣例的に決まっていることを知っています。従って、 http://〇〇とアドレスを書いた時点でブラウザは、80番のポート番号で、佐川急便に依頼を投げるわけです。つまり、ユーザである私は、ブラウザに対してポート番号は明示的に指定してない、ということになります。
ちなみに、明示的にポート番号を指定する場合は、http://〇〇:8080/のように、アドレスの後に、コロン(:)とポート番号を記載します。
「家」アナロジーだとルーターは何者か?
では、「家」アナロジーで説明すると、ルーターは何者なのでしょう??
この仮想の街でも、どんどん大規模開発が進み、マンションが何棟もまとめて建設された、というところをイメージをしてみてください。
そんな、まとまったマンションには、A棟、B棟、C棟、といった感じで一つのマンショングループのそれぞれの建物に名前が付きます。
そして、このマンション群はぐるっと周りを塀で囲まれていて、外からは、塀の中に一体何棟の建物があるのかわからない状況なのです。マンション群のどこかの棟に到達するためには、このマンション群を囲っている塀の一箇所にある小さな門を通るしかありません。このマンション群の住所は「門」に付いています。
そして、この小さな「門」こそが、インターネットの世界でいうとご家庭の「ルーター」です。門に付いている住所が、ルーターのWAN側のIPアドレスになります。アナロジーの塀の中の建物は、インターネットの世界だと、ご家庭のスマホやパソコン、wifiカメラといったマシンを意味します。
ところで、大規模マンション群の塀の中の様子は門番(ルーターの中の設定)だけが知っています。
塀の外にいる私からは、このマンション群のどれかの棟に住む住人に仕事をさせたくても、どこに住んでいるのかわかりません。何しろたくさんの建物が塀の中にありそんなのですが、中の様子は塀の外からは全くわからない。中の建物の住所(A棟なのか、B棟なのか)は門番によって隠されてしまっているのです。
それでも門番はきちんと管理していて、
「あの建物はA棟と呼ぼう、こっちはB棟と呼ぼう、向こうのはC棟だ…」
などと、せっせと住所を割り当てています。塀の中の住人達は、ちゃんと門番が割当てたそれぞれの建物の住所は理解していますので、困りません。
このような塀の中でだけ通用する住所は、インターネットの世界だとローカルIPアドレスと呼ばれます。通常は、ルーターがLAN側のポートにつながっている機器に割り当てるIPアドレスになります。
さて、こんな状況で、私は佐川急便に対して、ファイルを塀の中の住人の1人に管理してもらおうと、住所と部屋番号(IPアドレスとポート番号)を伝えて依頼します。
はたして、佐川急便は、住所が付いている門番まではたどり着くことでしょう。
しかし、部屋番号はどうでしょう??
私は、塀の中のどこの建物の部屋に、依頼先の仕事人が住んでいるのかはわかりません。でも、塀の中にいることは確かなのです。この場合、私が指定したのは、単に202号室、と言っただけ。実は、202号室と言われた門番も、A棟にもB棟にもC棟にも202号室があり、その中のどの部屋の住人が私の指定した人なのかわからないのです!
そこで、この大規模マンション建設を実行したオーナーディベロッパー「住友不動産」の出番です。
住友不動産の担当者は、このマンション群の「門番」にあらかじめ次のように伝えておきます。
「もし、お前に訪ねて来た者が、202号室と言ったら、B棟の105号室の住人に回すように。
もし、訪ねて来た者が、103号室といったら、A棟の303号室の住人に回すように。…」
といった感じです。
これで晴れて、私の202号室あての仕事は、B棟の105号室の住人に渡されることになります。
ここで注意したのは、私が門番の住所に対して202号室といったからと言って、どこかの棟の202号室に仕事人が住んでいる必要はない、ということです。そのような配置は、オーナーであるところの住友不動産が決めてくれれば良いのです。
私は、住友不動産から、門番の住所(IPアドレス)と202号室という部屋番号(ポート番号)だけを知らされていれば佐川急便に仕事を依頼することができる、という訳です。
TP-Linkルーターの転送設定
さあ、もう分かりましたね?!
それでは、実際のルータの設定をしてみましょう。
私が好きな、TP-Linkのルータ、Archer C50の設定画面を見てみます。
ただしく接続されていれば、http://tplinkwifi.net/のようなアドレスで、ご家庭に設置されたWiFiルータの設定画面が開けるはずです。または、http://192.168.0.1のようなアドレスかも知れません(環境に依存します)。
上記の画面で「新規追加」を押します。
ここで、設定するあなたは、「家」アナロジーの住友不動産、ホームネットワークのオーナーです。
そして、上記画面で「サービスポート」とあるのが、「家」アナロジーで登場した門番に伝える部屋番号です。
上記の設定をした場合、インターネット(スマホなど)からアクセスするには、
http://〇〇:8080/
のようにポート番号込で指定することになります。
〇〇はWAN側のアドレスで、TP-Link C50の場合は、「ステータス」画面を開くと、WAN → IPアドレス、で確認できます。
上記の新規追加画面で、「IPアドレス」とあるアドレスは、ルーターのLANポートに接続されているパソコンやWiFiカメラなどのIPアドレスになります。「家」アナロジーで説明すると、A棟かB棟か、を指定する塀の中の住所、ですね。そして、A棟のどの部屋なのかを門番に伝えておくのがオーナーの役目でしたね。ですので、そのパソコンやWiFiで動作するサーバーソフトのポート番号を「内部ポート」に設定することなります。
ポート開放を自動で!?
設定画面でポート開放を自分でルーターに設定するのは手間がかかります。しかし、世の中にはホームネットワークの中の機器から自動で行うための別の仕組みも存在します。UPnPのIGD(Internet Gateway Device)という仕組みです。ゲーム機などはこれを使って「ポート開放」を解決しています。
以下の記事で詳しく解決していますので、あわせてご覧ください。
以上。
登場人物が固有名詞過ぎて、余計わかりにくかったらごめんなさい。
Auto Amazon Links: プロダクトが見つかりません。 http_request_failed: 有効な URL ではありません。 URL: https://ws-fe.amazon-adsystem.com/widgets/q?SearchIndex=All&multipageStart=0&multipageCount=20&Operation=GetResults&Keywords=B0734Y95C6&InstanceId=0&TemplateId=MobileSearchResults&ServiceVersion=20070822&MarketPlace=JP Cache: AAL_2cbb9d76557f397f4d0d63e0640b0355