建物内ネットワークにサーバを立てる〜ポートフォワーディングを知る
筆者、テック大家さんは所有物件「ハイドレンジア箱根」にDIYでローカルエリアネットワーク(LAN)を構築。入居者にフリー・インターネットを提供しています。
前回の記事で、オートロックシステムのComelit製SENSEをこのLANに接続。SENSEはインターネット上のサーバーとして動作させる必要があった、というネタをご紹介しました。そこで必要となってくるのが、ルーター、および、NATの知識。
というわけで、本日は、賃貸大家さんが知るべき、ルーター・NAT、および、その中の設定としてポートフォワーディングを取り上げます。
Comelit製のオートロックシステム、SENSEに関しては以下の記事に詳しいです。こちらも合わせてお読みください。
インターネットのIP通信のおさらい
世はインターネットの時代。ネットワークといえばインターネット、インターネットといえばIP通信。IPがインターネット・プロトコルの略であり、コンピューターが通信をする方式はIPしかない、と勘違いする人がいても当然な世の中です。その昔はIPではないネットワークもあったし、コンピューター同士が通信するのにIPでなくてもいいのに…(Bluetoothを使った機器同士の通信がいい例)
そんな、インターネットですが、どうやって機器同士が通信するのか、改めておさらいしておきましょう。
スマホでWebサイトを閲覧するときのことを考えます。インターネットの世界では、お互いの機器をサーバーとクライアントに区分けをすることが多いです。スマホがクライアント。Webサイトがサーバーです。クライアント・サーバー方式で通信をする、と言ったりしますね。機器がクライアントであろうが、サーバーであろうがIP通信を行うためにはどちらの機器にもIPアドレスが必要です。コロンで区切られた"aaa:bbb:ccc:ddd"といった形式の番号で、世界中で一意(唯一)であることを前提にしています。つまり、どのスマホにも別々の番号が必要です。そう言ったら、感のいい人は思うでしょう。
「え?世界でこれだけみんなスマホ持っているのに、番号たりるんですかぁ?」
いい質問です。はい、足りません。Wikipediaにも「IPアドレス枯渇問題」というページがあるくらいです。
曰く、
IPv4のプロトコルで通信を行うには、通信を行う送信元と受信先が、一意のIPv4のIPアドレスを割り当てられていることが前提となる。そのため、IPv4のIPアドレスが枯渇し、新規に割り当てることができなくなれば、新規にサーバーや端末などをネットワークに追加することができなくなる。これは、新規のユーザがインターネットに接続できなくなったり、インターネットでビジネスを行うために新しいサーバーを設置できなかったりすることを意味する
Wikipedia: IPアドレス枯渇問題
IPv4とありますが、これは、IPのバージョン4の意味。最新では、IPv6という新しいバージョンのプロトコルも一部使われています。IPv6ではIPアドレスの範囲が広くなるので枯渇問題は解決するとされています。ただし、多くの場面で、相変わらずIPv4も使われている状況です。
IPv6の話を始めるとややこしくなるのと、本日の本題はIPv4に関わる話。ということで、ここでは、IPv4のおはなしとして続けます。
で、枯渇、どうするか?
解決策の一つが、NAT(Network Address Translation)です。
ルーターとNATの違い
電気屋さんでは「WiFiルーター」とか「ホームルーター」といった商品が売られています。NATは、これに搭載されている機能のことをいいます。NATという単体の商品が売られているわけではありません。
そもそも、ルーターってなんなのでしょう?
本来、IPのネットワークは、全体がまるっと一つのネットワークではなく、内部的にサブネット(サブネットワーク)という細かいかたまりに分割さたネットワークの集まりです。サブネット間は何もなければ通信できません。そこでサブネットをまたいだデータの送り先をコントロールするのが本来のルーターです。ルーターという機器はIPネットワークの至る所につながっています。そして、とあるIPアドレスから別のIPアドレスにたどり着くための「ルート」を手配してくれるのです。
家の中にあるパソコンが、Googleのサーバーからデータを取ることを考えてみましょう。パソコンにも当然IPアドレスが振られています。家の中にはヤマダ電機で買ったホームルーターがあります。うちのパソコンからGoogleへの要求は、ホームルーターがGoogleのサーバーへの経路を調整してくれます。そういう意味ではルーター(広義の意味で)です。
ただ、本来のルーターとNATでは、扱うIPアドレスの種類が違うのです。
ホームルーター(NAT)の内部(家の中)の機器に割り当てられるIPアドレスはローカルアドレスと呼ばれる種類のものです。ローカルアドレスは、世界中で一意(唯一)である必要はありません。NATの内部のネットワークの中で唯一であればよいのです。ということは、もしかすると私の家のパソコンと、お隣さんの宅内のスマホは同じIPアドレスが使われているかもしれません。ローカルアドレスは、そういう種類のアドレスです。
その代わり、うちのホームルーターとお隣さんのホームルーターには別々の(世界唯一の)アドレスが割当たっていなければなりません。この状態ならインターネットは壊れないのです。このとき、家の機器がGoogleサーバーと通信するためには、ホームルーターの内側のアドレス(=ローカルアドレス)と、外の世界のアドレス(=グローバルアドレス)の変換をする必要があります。この機能のことをNAT(Network Address Translation、ネットワークアドレス変換)と呼んでいるのです。
うちのパソコンとお隣さんのスマホが、同じアドレスを使っていいなら枯渇問題は起こりませんよね。だからNATがIPアドレス枯渇問題の解決策の一つ、というわけです。(ただ、Wikipediaにあった昨今の枯渇問題は、だとしても足りなくなるよ、という話なのですが…)
ISPからはグローバルIPアドレスをもらうのが必須
賃貸物件に共用のフリー・インターネットを設置するには、インターネットサービス・プロバイダ(ISP)から回線を借ります。通常、館内に設置するルーターにはIPアドレスがISPから割り当てられます。館内にサーバーを立てる場合、ISPに割り当てられるアドレスはグローバルIPアドレス(世界唯一のアドレス)であることが必須です。
私が契約しているISPもグローバルIPアドレスを割り当ててくれます。ただ、私が契約しているISPをここに書くのは、私の心の安全のためやめておきます。ISPがどんなタイプのアドレスを割り当ててくれるかは、ISP次第なので契約前に確認しましょう。自宅サーバーが立てられる、などと謳っているISPであれば問題ないでしょう。
テック大家さんが行った入居者用のフリー・インターネットの構築に関しては、以下で記事にしています。こちらも合わせてお読みください。
動的なグローバルIPアドレスとダイナミックDNS
さて、ISPがグローバルIPアドレスを割り当てます、といった場合にも2パターンあります。IPアドレスが固定されるのか、動的に変わるのか、というパターンです。
ISPと建物のネットワークを接続する際は、館内のルーターに接続のための設定をすることになります。通常よくやられるのはPPPoEの設定です。PPPoEの設定をすると、ISPからルーターに自動的にIPアドレスが割り当てられます。大抵ここで割り当てられるIPアドレスは、何かのタイミングで変更になります。ISPの都合で変わってしまうのです。ですので動的なグローバルIPアドレスと呼ばれています。
一方、運用中に変わらない固定IPアドレスを割り当ててくれるISPもあります。ただその分料金がかかるのが普通です。何しろ枯渇していて希少価値?がありますからね。例えば、so-netでは、固定IP割当サービスというオプションで別途料金がかかります。
賃貸物件内部にサーバーを立てる際に固定IPアドレスは必ずしも必要ありません。IPアドレスが突然変更になることがある動的なグローバルIPアドレスでも、一応運用はできます。なのでそこは、コスト重視、固定費削減重視のテック大家さん。固定IPアドレスを使う選択肢はありません。館内にサーバー設置が必要なオートロックシステムComelit製SENSEを動的なグローバルIPアドレスで運用してしまいます。
ただし、動的なアドレスを使ってサーバーを運用する場合、新たな課題が生じます。予期せぬタイミングで変わってしまうIPアドレスをどのように知るのかとういう課題です。サーバーですので、サーバーのアドレスが分からない状態ではクライアント(スマホ)などからアクセスできないわけです。
そこで、IPアドレスが変わったことを検出して「abc.com」のような固定的な「名前」をつけてくれるサービスがあります。ダイナミックDNS(DDNS)と呼ばれる仕組みを使います。ダイナミックDNSを使って、サーバーを一意に指定できるようにできます。
ダイナミックDNSに関しては別記事で詳しく解説しています。こちらも合わせてご覧ください。
ここでは、IPアドレスの代わりに「名前」で呼び出しでがきるようにする機能、ということでダイナミックDNSをご理解ください。
オプション | 方程式 | サーバーの運用 | コスト | テック大家さんの選択 |
---|---|---|---|---|
動的アドレス | グローバルで動的に変わるIPアドレスを割り当てるISP+ダイナミックDNS | 可 | ◯ | ← これ! |
固定アドレス | グローバルで且つ固定IPアドレスを割り当てるISP | 可 | × | |
ローカルIPアドレスを割り当てるISP | ローカルIPアドレスを割り当てるISP | 不可 | ◯? |
ポートフォワーディングの仕組み
ISPが動的なグローバルIPアドレスを割り当ててくれて、ダイナミックDNSの設定をしても、まだ課題があります。ここまでの状態で、クライアント(スマホ)から建物に設置したルーターまでの通信が可能になります。一方、ルーターからオートロックシステム(Comelit製のSENSE)までの経路を示す必要があります。
上記で、プライベートアドレスを使っているネットワーク内部の機器には外部からアクセスできないと言いました。が、ここで説明するポートフォワーディングの仕組みを使うと、あら不思議。可能になります。
先程までの説明では、IP通信をおこなうのにIPアドレスを指定して通信するという図を書いていました。ごめんなさい。ここ、少し端折りました。本当は、IPアドレスに加え、ポート番号が必要です。
例えば、Webサイトを見るときにサーバーにアクセスする際、以下のようにWebブラウザに入力しますね。
https://google.com
“https://"は打ち込まないかも知れません。実は、ここにポート番号の仕組みが隠れています。httpsと書くと、内部的にポート番号433を使って通信するというのが規格として決まっているのです。
あまり目にしないかも知れませんが、URLは以下のように記述できます。デフォルト以外のポート番号を指定できるのです。
何はともあれ、IP通信するにはポート番号が必要なのです。
我が物件の内部に設置したサーバーにアクセスする際は、”ルーターにつけたダイナミックDNSの名前”+”ポート番号”がわかっていなければなりません。
これを実現するため、以下の呪文のような内容を実現するために、ルーターのポートフォワーディングの設定をしておきます。
「〇〇のポート番号に来たリクエストは、プライベートアドレス□:□:□:□の機器の△△ポートに転送する」
下記概念図にて具体的な番号(説明用の番号)を用いてこの呪文でやりたいことを表現しています。
概念図を説明するための具体的な値(説明用)は以下のようになります。
クライアントのスマートフォンのIPアドレス | 142.1.12.3 |
館内に設置するルーターのグローバルIPアドレス(WAN側アドレス) | 43.18.121.254 |
館内に設置するルーターで待ち受けるWAN側のポート番号 | 9001 |
館内に設置するルーターのローカルIPアドレス(LAN側アドレス) | 192.168.0.1 |
館内に設置するサーバーのローカルIPアドレス | 192.168.0.2 |
館内に設置するサーバーのポート番号 | 5000 |
クライアントであるスマートフォンから館内設置のサーバーにアクセスするために、クライアントはまず、館内設置のルーター(NAT)のグローバルIPアドレス(WAN側)を指定します(グローバルIPアドレスにはダイナミックDNSにより固定的な名前がついています。上記の図では省略)。加えて、ポート番号(9001)も指定します。
ルーター(NAT)にはポートフォワーディングの設定がされていて、WANの9001ポートに来たリクエストを、サーバーのプライベートアドレス192.168.0.2の5000番ポートに転送します。
これでようやく全体として、クライアントからの要求がサーバーまで伝わる、というわけです。
私の物件では、YAMAHAのルーターRTX830を使っています。そちらの具体的な設定例(コマンド)などは別記事にする予定です。お楽しみに!
One more thing …
以上で、私の物件の建物内に設置したサーバー(オートロックシステム、Comelit製SENSE)に、外からスマホでアクセスする方法をご説明しました。
ところがもう一つ解決しなければならない課題があります。それは、スマホが館内のフリーWiFiにつながった場合に、同じようにルーターのWAN側グローバルIPでアクセスするケースです。
ここは、ヘアピンNATという仕組みが必要になるのですが、ヘアピンNATに関しては、長くなりそうなので別記事にする予定です。お楽しみに!
ディスカッション
コメント一覧
まだ、コメントがありません