P2PにはUPnPを使うといいらしい? [プログラミング]
昔のpeer-to-peerのアプリケーションは、ルーターに穴を開けてあげないといけないことがありました。最近のP2Pアプリはそういうことをせずに使えています。なんでだろうなぁと思っていたらUPnPを使ってルーターに自動的に穴を開けているみたいなんですね。UPnPは危ないみたいなことを書かれていたりするわけですが、それはP2Pでできることの危険性に等しい感じかもしれません。
まぁルーターもUPnPの機能を備えているわけだし、それを使えばルーティングが可能であれば、利用するのは技術的には当然に使うわけで。でも、ルーターの設定を見ると有効になっていなかったりする。でもTorrentクライアントは普通に使えているんですが、それはUPnPを使っていないってことなんでしょうかね。
そもそも、Webを見るときIPマスカレードで80番とか443番ポート以外のポートを割り振って、クライアントを分けていると思ったんですが、だいたい合っているよね? その時ブラウザはどこまで想定してやっているんだろう? ルーターの80番ポートに純粋にアクセスして、別の変換されたポートで受け取るという意味なんだろうか? ルーターはIPアドレスとポートを変換してくれているのはわかるんだけど、それに合わせてブラウザってかなり面倒な作業をしていないのだろうか。それと、違うブラウザや別のウインドウやタブの違いってのはどうやって切り分けているんだろう。
たぶん、そもそもTCP/IPって何よ?という所あたりで詰まっている気がする。そういうところ、実際の技術に落とし込んでまで理解できていないんだよな。
https://www.pc-master.jp/internet/tcp-ip-protocol.html
あ〜接続先のポート番号はウェルノウンポートで決まっているけど、接続元ポート番号はダイナミックポートを適宜割り当てているのね。80番ポートにアクセスに行ってもブラウザに返すポートはそもそも80番とは違うと。それならウィンドウごとに割り振ることになっても簡単だね。というか、デフォルトの動きで同じコンピュータ上のポートのバッティングは避けられる。
その上で複数端末対策でIPマスカレードとかをして、IPアドレスとポート番号の組み合わせを、ルーター側で受けるポート番号に変換して持っておく、ってことか。そうなら納得だ。なんか初歩の初歩でわかってるつもりで全然わかっていなかったな。情報としては知っていても知識として落とし込めていなかったというか。今回はIPプロトコルがきちんとわかっていなかったわけだけど、TCPにしてもUDPとの対比ぐらいの知識しかないな。
その上でいきなりの外からのアクセスはできないようになっている。
https://www.itbook.info/study/nat5.html
NAPTのアドレス変換が障害となってアクセスできないわけだが、Webサーバを晒す時にはルーターのポートフォワーディングをしていたので経験的にわかっている。
https://www.itbook.info/study/nat6.html
なのでP2Pアプリでポートフォワーディングをしない場合は、外部サーバから最初にP2Pクライアントの情報が与えられないといけないようだ。Torrentではピアのコンピュータをトラッカーに教えてもらうようになっているっぽい。なのでポートフォワーディングをしてないのに、外部からのアクセスが通ってしまうのは、P2Pと名前を打っておきながらサーバが必要ということなのでした。
https://ja.wikipedia.org/wiki/BitTorrent
WebRTCもSTUN/TURNサーバが必要だったので、結局P2Pは外部サーバを立てないとダメなわけです。外部からのNAPT対策は内側からルータの穴を開けて導くか、先のように特殊なサーバを外部に置いておいてそれを利用するわけです。具体的には
・ルーターをポートフォワードして外部に晒す
・ルーターにUPnPを使って穴を開ける
・なんらかの外部サーバを使ってP2Pアクセスさせるきっかけを作る
外部サーバを使わないとなると、結局ルーターの設定が必要となります。ともあれ、ポートフォワーディングを使うとなると具体的なポート番号だとかのすり合わせが必要となってきますから、手動でやるのはちと面倒な気はします。少なくともルータって何?とかルーターのIPアドレス知らないとかいう人にはかなりハードルが高い。とはいえ、ルーターにUPnPを有効にさせる方が楽であることに違いはありません。
ただ意図的にポートフォワーディングをするより、UPnPを有効にする方が危険性は高くなっているんでしょう。使った後にはUPnPを無効にする作業をした方がいいんでしょうが、そこのところがポートに穴を開ける作業と同じようにオフにできたらいいなと思ったり。UPnPは勝手にオンにされちゃうのは問題だけど、オフにできる機能なら別にあっても構わない気はする、あるかどうかは知らんけど。
特に外部にサーバを持つつもりがなければ、ポートを開けてIPとポートを教えてあげるわけだ。とりあえず今考えているお手軽P2Pソフトが、
・UPnPで穴をあける。
・メールで接続して欲しい人にメールを送る
で実現させるようにしたいと思った。でも、これってP2Pじゃなくてクライアントサーバと大して違いはないんじゃない? そもそもピアツーピアの定義って何って話ですよ。全く外部サーバを使わないやり方というのはちと辛いし、それじゃなかったらどっちかにスタティックなサーバを立てるのとどう違うのかというのは、お互いに同じことができるようになればP2Pなのかな?
とりあえず、UPnPを使ってWebサーバを晒したいと思う。Webサーバを晒せれば、そこからGUIを通じてHTML5の方法でなんとかなりそうな気がする。というか、今更独自プロトコルでなんとかしたいという気持ちになれない。そもそもネイティブアプリを作りたくないので、Webサーバという選択になるのだから必然的なのだが。
まぁルーターもUPnPの機能を備えているわけだし、それを使えばルーティングが可能であれば、利用するのは技術的には当然に使うわけで。でも、ルーターの設定を見ると有効になっていなかったりする。でもTorrentクライアントは普通に使えているんですが、それはUPnPを使っていないってことなんでしょうかね。
そもそも、Webを見るときIPマスカレードで80番とか443番ポート以外のポートを割り振って、クライアントを分けていると思ったんですが、だいたい合っているよね? その時ブラウザはどこまで想定してやっているんだろう? ルーターの80番ポートに純粋にアクセスして、別の変換されたポートで受け取るという意味なんだろうか? ルーターはIPアドレスとポートを変換してくれているのはわかるんだけど、それに合わせてブラウザってかなり面倒な作業をしていないのだろうか。それと、違うブラウザや別のウインドウやタブの違いってのはどうやって切り分けているんだろう。
たぶん、そもそもTCP/IPって何よ?という所あたりで詰まっている気がする。そういうところ、実際の技術に落とし込んでまで理解できていないんだよな。
https://www.pc-master.jp/internet/tcp-ip-protocol.html
あ〜接続先のポート番号はウェルノウンポートで決まっているけど、接続元ポート番号はダイナミックポートを適宜割り当てているのね。80番ポートにアクセスに行ってもブラウザに返すポートはそもそも80番とは違うと。それならウィンドウごとに割り振ることになっても簡単だね。というか、デフォルトの動きで同じコンピュータ上のポートのバッティングは避けられる。
その上で複数端末対策でIPマスカレードとかをして、IPアドレスとポート番号の組み合わせを、ルーター側で受けるポート番号に変換して持っておく、ってことか。そうなら納得だ。なんか初歩の初歩でわかってるつもりで全然わかっていなかったな。情報としては知っていても知識として落とし込めていなかったというか。今回はIPプロトコルがきちんとわかっていなかったわけだけど、TCPにしてもUDPとの対比ぐらいの知識しかないな。
その上でいきなりの外からのアクセスはできないようになっている。
https://www.itbook.info/study/nat5.html
NAPTのアドレス変換が障害となってアクセスできないわけだが、Webサーバを晒す時にはルーターのポートフォワーディングをしていたので経験的にわかっている。
https://www.itbook.info/study/nat6.html
なのでP2Pアプリでポートフォワーディングをしない場合は、外部サーバから最初にP2Pクライアントの情報が与えられないといけないようだ。Torrentではピアのコンピュータをトラッカーに教えてもらうようになっているっぽい。なのでポートフォワーディングをしてないのに、外部からのアクセスが通ってしまうのは、P2Pと名前を打っておきながらサーバが必要ということなのでした。
https://ja.wikipedia.org/wiki/BitTorrent
WebRTCもSTUN/TURNサーバが必要だったので、結局P2Pは外部サーバを立てないとダメなわけです。外部からのNAPT対策は内側からルータの穴を開けて導くか、先のように特殊なサーバを外部に置いておいてそれを利用するわけです。具体的には
・ルーターをポートフォワードして外部に晒す
・ルーターにUPnPを使って穴を開ける
・なんらかの外部サーバを使ってP2Pアクセスさせるきっかけを作る
外部サーバを使わないとなると、結局ルーターの設定が必要となります。ともあれ、ポートフォワーディングを使うとなると具体的なポート番号だとかのすり合わせが必要となってきますから、手動でやるのはちと面倒な気はします。少なくともルータって何?とかルーターのIPアドレス知らないとかいう人にはかなりハードルが高い。とはいえ、ルーターにUPnPを有効にさせる方が楽であることに違いはありません。
ただ意図的にポートフォワーディングをするより、UPnPを有効にする方が危険性は高くなっているんでしょう。使った後にはUPnPを無効にする作業をした方がいいんでしょうが、そこのところがポートに穴を開ける作業と同じようにオフにできたらいいなと思ったり。UPnPは勝手にオンにされちゃうのは問題だけど、オフにできる機能なら別にあっても構わない気はする、あるかどうかは知らんけど。
特に外部にサーバを持つつもりがなければ、ポートを開けてIPとポートを教えてあげるわけだ。とりあえず今考えているお手軽P2Pソフトが、
・UPnPで穴をあける。
・メールで接続して欲しい人にメールを送る
で実現させるようにしたいと思った。でも、これってP2Pじゃなくてクライアントサーバと大して違いはないんじゃない? そもそもピアツーピアの定義って何って話ですよ。全く外部サーバを使わないやり方というのはちと辛いし、それじゃなかったらどっちかにスタティックなサーバを立てるのとどう違うのかというのは、お互いに同じことができるようになればP2Pなのかな?
とりあえず、UPnPを使ってWebサーバを晒したいと思う。Webサーバを晒せれば、そこからGUIを通じてHTML5の方法でなんとかなりそうな気がする。というか、今更独自プロトコルでなんとかしたいという気持ちになれない。そもそもネイティブアプリを作りたくないので、Webサーバという選択になるのだから必然的なのだが。
Twitterまとめ投稿 2019/07/06 [Twitter]
carbonhydrat時給「1000円ぽっち」払えない企業は潰れていい 日商「最低賃金アップ反対論」は国益に反する | 国内経済 - 東洋経済オンライン https://t.co/p4cMtdn0iI #東洋経済オンライン @Toyokeizai 無能… https://t.co/CUKr4UQOfp07/05 07:21 carbonhydratリスカが一般的になっていると思っているメンヘラの人がいるが、それは誰かがやっている事に乗っかっているだけだからなぁ。みんなオリジナリティのある解決方法を考えた方がいい。衆愚的な方法は見るに堪えないから https://t.co/QXWk94huX407/05 08:34 carbonhydrat丸山穂高議員、東国原ツイートに「おまゆう」「名前を出すバリューもないな」/芸能/デイリースポーツ online #SmartNews なんかこいつほうぼうで喧嘩売ってるみたいだけど、話せば話すだけ自分の低俗さがにじみ出ると言うか。… https://t.co/nc4UbWaAJ907/05 08:41 carbonhydrat我が家の「IPv6」対応、すぐしないとマズイ? - PHILE WEB https://t.co/xm06kRfmfE @phileweb IPv6がよくわかって書いているとは思えない記事。IPマスカレードとかせんで済むのかな。記事にすんならもうちっと問題点洗い出してくれよ07/05 12:07 carbonhydrat最近アニメ化が多い気がする「なろう系異世界転移作品」の魅力って? 各作品で見られる“お約束”からそのおもしろさを考えてみた https://t.co/5ZgJjhoB0o @nico_nico_news 出尽くした感がある異世界転… https://t.co/bZDDYEJe9l07/05 12:21 carbonhydratiPadのSafariってURL履歴に限界があるんだな。技術系のスライド見てたらググったところに戻れなくてちょっとビビった。タブは幾つでも開けるけど思わぬ制限。07/05 13:40
2019-07-06 05:01
コメント(0)