自宅サーバのルーター設定はUPnPでポート開放。「家」アナロジーで解説!

こんにちは!
昔むかし、週末プログラミングをやっていてWindowsのシェアウェアで使った技術が、今でも当たり前に使われているのを見て、懐かしさを隠しきれない、しずかなかずしです。
UPnPという技術をご存知ですか??
Universal plug and playの略ですが、例によってネットワークの技術用語です。
ここのところ、ネットワークやルーターの技術のお話が多い、しずかなかずしブログ。
自宅サーバーを立てるための関連技術をわかりやすく説明しています。
UPnPも自宅サーバーを立てる際に利用できる技術です。PlayStationなどのゲーム機が特定のゲームで利用するというのがよくあるケースです。でも、自宅サーバーを実現する際にも使えるのです。
UPnPとは?
Universal plug and playとはどんな技術なのでしょう?
あなたがなにか新しい機器をホームネットワークにつないだとします。そして、その機器は、写真や動画などのコンテンツをいっぱい抱えた、メディアサーバーだったとしましょう。その新しい機器のなかの動画コンテンツ。
同じくホームネットワークにWiFiでつながるスマホで見てみましょう。
まずは、ホームネットワークの中で、新しく追加したメディアサーバーのIPアドレスがわからないと接続できません。
アドレスがわかったとしても、複数ある動画ファイルの中から、どんなプロトコルを使うと目的のコンテンツにたどり着けるのでしよう?
ホームサーバーのWeb画面をブラウザで開いて、探すのでしょうか?
サーバーの取り扱い説明書を読んで、どんな機能があるのか調べる必要があるかも知れませんね。
結構、面倒な作業になりそうです。
UPnPはそんな面倒な手間を一気に解決してくれるすばらしい仕組みなのです。
つまり、ホームネットワークにつながった機器を検出し、その機器がどんな機能を持っていて、どうやってコントロールすることができるのか。機器同士が自動で認識し合って勝手にやってくれるようにするための仕組み。これが、UPnPなのです。
UPnPの歴史は古く、2000年代前半に考え出されたものです。そのため、2020年の現代なら、RESTやJSONといったWebサービスでおなじみのインターフェイス技術が使われていません。その代わり、XMLやSOAPといった、古風で複雑な仕組みの上に構築されたインターフェイス規格になっています。
XMLやSOAP、JSONなど、専門用語を連発してしまいましたが、後日改めて記事にしてみたいと思います。
広告
IGD とは?
UPnPの中で定義されているIGDという仕組みがあります。IGDとは、Internet Gateway Deviceの略です。メディアサーバーの例を前述しましたが、ルーターがUPnPの機能を持つことがあります。
ホームネットワークにつながった機器が、ルーターを検出して、ルーターをコントロール(設定)することが可能になります。
先日、ポート開放の詳細な説明を投稿しました。この中で、TPlinkのルーターの設定画面を例にポート開放の設定はこんな風にします、という例を記載しています↓
しかし、このようなルーターの設定画面、別のメーカーの製品だとまた別の仕様の画面で、場合によっては設定項目の呼び名まで異なります。同じ目的の設定をするのに、全く違う画面が出てきてしまうのです。
この状況を打解するのがUPnPのIGDプロファイルなのです。
クライアントであるホームサーバーがルーターの外からのアクセスを受けたい。この目的に対して、UPnP経由でルーターのポートマッピングの設定(ポート開放)が可能になります。
「家」アナロジーでUPnP IGDを説明
先日、ホームネットワークの説明に登場したのは、インターネットにつながる機器を集合住宅に見立てて、IPアドレスやポートを説明する「家」アナロジー。
今回も、そのアナロジーでUPnPの仕組みを説明してみましょう。
ディベロッパーである住友不動産は、何棟か集合住宅を建設し、それを重厚な塀できっちりと囲い、入口は小さな門だけ。そして、門のところにだけ住所を持たせていたのでした。


インターネットの世界では、この門の住所がルーターのWAN側のIPアドレスになります。門の中の建物一個一個にも住所(IPアドレス)がつけられていますが、その住所は外の世界からは見えない、というのが、この世界の想定でした。
この場合、ディベロッパーの住友不動産は、インターネットの世界でいうと、ホームルーター(WiFiルーター)の設定をする、家の主と言うことになります。
さて、この塀の中の広大な敷地に、新しい建物ができました。建物の住人は、門番に、とある部屋番号宛に尋ね人が来たら、この新しい建物の302号室に通すようにお願いしたいとします。302号室の住人こそ、外部からの要求を処理してるれるHTTPサーバーさん、という設定です。
前回のポート開放のお話だと、このような、門番(ルーター)に対する「ことづけ」をするのは、ディベロッパー兼オーナーである住友不動産の仕事でした。
UPnPのシナリオでは、オーナーの手を煩わせることなく、新しい建物の住人自らが、門番に直接依頼できます。
(ディベロッパー兼オーナーの住友不動産は、インターネットの世界だと、WiFiルーターの設定を手動で行う、ホームネットワークの家の主と言うことになります)
それでは、どのように新しい建物の新しい住人は、門番に「ことづけ」をお願いするのでしょうか??
塀に囲まれた広大な敷地の中に新たに住み始めた住人にとってはわからないことばかり。周りにどんな建物があって、それぞれの建物にどんなことをしてくれる人たちが住んでいるのか、全くわかりません。
そこで、まずは大声で、叫んでみます。
「お〜ぃ!塀の中の建物の中で、どんな住人が住んでいるか応えてくれる人はいるか〜い?!」


これを聞いたA棟の一人が応えます。
「この建物の、105号室には、動画コンテンツをいっぱい抱えて、誰かに観に来て欲しいと口を開けて待ってるヤツがいるぞー!」
別の棟の一人も応じました。
「この建物の、205号室には、門番が受け取った郵便物を再配達してくれるヤツがいるぞー!」
こんな具合で、叫んだ呼びかけに対して、各建物の担当が返事をしてくれます。
このようなやり取りが、インターネットの世界、つまり、UPnPで言うところのデバイスの「ディスカバリー(Discovery)」と呼ばれる処理です。
UPnPでは、SSDP(simple service discovery protocol)という手順が定義されています。そして後者の、"門番が受け取った荷物を…"という応答が、IGDとしてのルーターの動作なのです。
SSDPでは、IPアドレス 239.255.255.250、 ポート番号 1900番にマルチキャストで、M-SEARCHというコマンドを送り、返ってきたレスポンスをクライアントが解釈します。
ディスカバリーの仕組みでIGDデバイスを見つけたあとは、クライアントの思うがまま。その応答に書かれているインターフェイス定義に従って、SOAP(HTTPを使用)というプロトコルにより、ポート開放の設定を行える、という訳です。


広告
miniupnpc でパソコンからルーターの設定をする
では、実際に自宅サーバーを設置した場合に、どのようにルーターの設定を自動で行うのか見ていきましょう。
使っているのはUbuntuの18.04.3 LTSバージョンです。
まずは、miniupnpというツールのクライアントプログラムをインストールします。こちらのサイトが参考になります↓
$ sudo apt install miniupnpc
そして、ホームネットワーク内部のIGD(ルータ)を探します。
$ sudo upnpc -l
こんな感じで表示されました。(ファイアウォールを一時的にdisableしています – $ sudo ufw disable)
kazushi:~/PycharmProjects/upnp_inv$ !2027
sudo upnpc -l
upnpc : miniupnpc library test client. (c) 2005-2014 Thomas Bernard
Go to http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
for more information.
List of UPNP devices found on the network :
desc: http://192.168.1.18:80/description.xml
st: urn:schemas-upnp-org:device:basic:1
desc: http://192.168.1.18:80/description.xml
st: uuid:2f402f80-da50-11e1-9b23-0017884707de
desc: http://192.168.1.18:80/description.xml
st: upnp:rootdevice
desc: http://192.168.1.200:1900/gatedesc.xml
st: urn:schemas-upnp-org:device:InternetGatewayDevice:1
Found valid IGD : http://192.168.1.200:1900/upnp/control/WANIPConn1
Local LAN ip address : 192.168.1.3
Connection Type : IP_Routed
Status : Connected, uptime=1580999351s, LastConnectionError : ERROR_NONE
Time started : Thu Jan 1 09:00:18 1970
MaxBitRateDown : 512000 bps (512 Kbps) MaxBitRateUp 512000 bps (512 Kbps)
ExternalIPAddress = XXX.YYY.ZZZ.AAA
i protocol exPort->inAddr:inPort description remoteHost leaseTime
GetGenericPortMappingEntry() returned 713 (SpecifiedArrayIndexInvalid)
色々なUPnPデバイスが見つかってしまっていますが、 IGDは以下だと言っています。
http://192.168.1.200:1900/upnp/control/WANIPConn1
わが家のネットワークでは、 192.168.1.200は、TP-Linkの C50というルーターです。
ポートマッピングを行う為のコマンド、以下を実行してみます。このコマンドは、WAN側のポートの8080ポート番号に届いたパケットを、192.168.1.3のマシンの8080ポートに転送する為の設定をせよ、と、ルータ(門番)に依頼するコマンドです。
$ sudo upnpc -a 192.168.1.3 8080 8080 tcp
するとどうでしょう?
TP-Linkの設定画面をみると正しく設定が行われたようです。


不要になったら以下のコマンドで、削除しておきましょう。
$ sudo upnpc -d 8080 tcp
ディスカッション
コメント一覧
こちらのサイトのご説明が一番わかりやすかったです。そこで質問なのですが、sudo upnpc -a xxx.xxx.xxx.xxx 554 554 tcp としたときに、No valid UPNP Internet Gateway Device foundというものが表示されました。これは IGDがなく、そのため554のポートフォワーディングができないという意味でしょうか。よろしくお願いいたします。
コメントありがとうございます!
パソコンからホームネットワーク内部のルータをUPnPのプロトコルで探したんだけど、見つからなかったようです。
ルータがUPnPに対応してかいないか、ルータが何らかの理由で見つからない?可能性がありそうですね。
早速のご返信ありがとうございます。もう一つ質問です。いわるゆ二重ルータと呼ばれる、LAN(LAN#1)の中にサブLAN(LAN#2)がある状態です。仮にUPnPが使える場合、LAN#1のポート開放はLAN#1内のPCで、LAN#2のポート開放はLAN#2内のPCで、というようにそれぞれの別のPCで行う必要があるのでしょうか?今までLAN#1内のPC(しかもそのPC内蔵のWiFi hotspot機能でLAN#2を形成している)だけでポート開放を試みてました。
お忙しいところ申し訳ありませんがよろしくお願いいたします。
やったことないのでわかりませんが、やりたいのは、lan2の中のマシンに外からアクセスしたいということでしょうかね?だとすると、lan1のパソコンとlan2のパソコンの両方で適切にパケットが届くようにUPnPで操作する必要があるんじゃないでしょうか。
ただ、ポート開放したいポートが動的に変化するのだとすると難しい気がします。
ご返信ありがとうございます。
>>lan2の中のマシンに外からアクセスしたいということでしょうかね?
はい、そうです。ただし、今回はマシンではなくネットワークカメラです。ですので、恐らくLAN#2内の別のマシンからカメラにアクセスしてUPnPで操作することになるのではと考えています。
ポート開放についてはポートを固定できるかやってみます。
ありがとうございました。
I like it when individuals get together and share views.
Great website, continue the good work!
what is chloroquine
[url=https://chloroquineorigin.com/#]chloroquine phosphate brand name[/url]
online doctor erectile dysfunction
[url=https://besterectiledysfunctionpills.com/#]erectile tissue quizlet[/url]
does hydroxychloroquine cause heart problems
[url=https://hydroxychloroquinex.com/#]covid 19 who[/url]
erectile amazon
[url=https://plaquenilx.com/#]plaquenil brand name[/url]
mambo 36 tadalafil 20 mg
[url=https://tadalisxs.com/#]tadalafil 60 mg for sale[/url]
zithroma
[url=https://zithromaxes.com/#]buy zithromax online cheap[/url]
can erectile dysfunction be revewsw https://erectiledysfunctionpillscvs.com/# erectile aides for men
zithromax for uti https://zithromaxes.com/ zithromax 250mg
order erectile dysfunction pills https://plaquenilx.com/ can erectile dysfunction come on suddenly
tadalafil uses https://tadalisxs.com/ tadalis 20 mg
hydrocychloroquine https://hydroxychloroquinex.com/ hydroxychloroquine wiki
individual health insurance cost – viagra without doctor prescription Axnjgjf
prevent headaches cialis
uso de la pastilla viagra: [url=https://www.withoutbro.com/]viagra[/url]
You actually expressed this superbly. https://www.goldkamagra.com kamagra oral jelly in thailand Onfkbojl
With thanks. I appreciate it.. https://kamagrajellynow.com
Regards. Ample write ups. https://www.kamagramama.com kamagra 100mg bestellen Avnbacv
generic viagra