0コメント

【Minecraft】マルチプレイで行き詰まる「ポート開放」とは

こにゃにゃちわ=^_^=

マイクラでマルチがしたい!鯖(Server)立てたい!
そう思ったことがある人は多いのではないでしょうか。


立ててみたものの・・・自鯖に他の人がアクセスできない!!!

と、困惑したことがある人、いるんじゃないでしょうか。

もしくは、サーバーの立て方で検索して、その通りやっただけで何がどうなっているのか分からないから、接続が突然できなくなった時、対処法が分からない。なんて人も。

要るのでないでしょうか。

無料イラスト/春夏秋冬: 【50+】 はてな フリー 素材 | フリー素材, 無料 イラスト, フリー

という訳で、ポート開放が何かについて紹介していきます。

これによって何が悪かったか把握できるかもしれません。

そもそもポート開放とは?

そもそもポート開放とは。別名ポート転送設定とか言われますが、まあここでの例としてMinecraftで例えます。

プレイヤーがサーバーにアクセスする。

これを行う為には、
プレイヤー→プレイヤー側のルーター→インターネット→ホスト(鯖運営)側ルータ→サーバー

という流れでサーバーにアクセスするわけなんですね。

これを( ^ω^ 三 ^ω^ )ヒュンヒュン移動することで詳しくは書かないけれども、サーバーにアクセスし、サーバーが応答してプレイヤーに入るうえで必要なデータを送信して、マイクラのワールドに入れるようにする、てな流れ。

じゃあこの流れが何だというと、


サーバーにアクセスする際、ホスト側ルータを通るのは見て分かると思います。

しかし、ルータにはフィルタリング機能ってのがあります。

スクリーンショット 2020-11-28 180022.png

wikipediaから引用してきたが、条件に該当するIPパケット(要はデータ)を破棄する、という機能があるんですね。
※パケットとは、データ(二進数)を小さな塊として送信する方法。受信した側がパケットを組み合わせて一つのデータとして読み込むための符号ビットなども入っている(はず)

何が言いたいかというと、この条件について。
クライアント(プレイヤー)側が求めたデータをサーバーは返す、という流れにおいて、

マイクラのサーバー立てたい!!!!っていうのは、結局普通の家庭用パソコンをサーバーとして使っているに過ぎないんですよね。

何が言いたいかというと、普通のパソコンにおいて、外部から一方的にアクセスを求めてくるという例は存在しないのです。
あくまで、こちら側普通のパソコンが要求を受け付けているサーバーにアクセスし、サーバーから要求に則ったデータだけを普通のパソコンに通す。


うーん、わかるかな

普通のパソコンは引きこもりニート。外から要求してくるのが陽キャと置き換える。

引きこもりニートは最低限生活するためにスーパーとかコンビニのために外出することはありますよね。

でも陽キャが引きこもりニートに凸っても引きこもりニートは家のドアは開けませんよね。人と会いたくなくて引きこもってるのだから。


例が例ですが、要は普通のパソコンは外部からアクセスを求められることはないニートってのがデフォルトの設定なのです。


サーバーを構築するというのは、そんな引きこもりニート(デフォルトのパソコン)が、外部からアクセスを許可する
つまり「俺ん家見ていけ~!」という状態なんですね。デフォルトがこれだとプライバシーもクソも無いから、マイクラサーバーみたいに「俺のサーバー入っていいゾ~!」というような場合、設定(ポート開放、つまり家のドアの開放)が必要なんですね。

御託がとても長いですが。専門単語使わずに説明するとこうなります。

とてもややこしいんですね単語を使わないは使わないで。だからポート開放で挫折する例が多いんです。

まあ仕方がないといえば仕方がないけども。

じゃあこの「俺ん家見ていけ~!」の設定において、ネットワークの話に戻すと、せめて簡単な単語くらい覚えないと埒が明かないです、と言う訳で下記、単語の解説。


上記のためサーバー構築にはポート開放という手順が必要なんですね。

専門的な単語で言えば、クライアント側ルータからホスト側ルータにアクセスするためにパケットフィルタリングを通る際クライアント側からのデータを受信するためのフィルタを設定するてなわけです。あとおまけでファイアウィールがある。てな感じ

単語と役割

Port(ポート)
ポート(通信チャネル)とは、先ほどの説明を見たらわかる通り、「家のドア」です。
これはデフォルト設定のパソコン(ヒキニート)にとって、「普通はドアを開けておく必要はない」ものです。プライバシーもクソも無くなってしまうからね。

インターネット的に言えば、Portは英語で港何て意味があるけども、今回はPort番号についての説明。
Port番号は1から65536までの範囲で設定できます。
要は符号ビット無しの二進数16bitの範囲で表せる十進数の値ですね。

パソコン一台につき65536個のドアがある。てなことです。まあ、簡単に言えばソフトウェアってバックグラウンド動作も含めると一つのパソコンで数百ってプロセスが動作してるので、どのアプリケーションかを識別する番号であると考えても過言ではないでしょう。

例えば、Java EditionのマイクラではTCP25565番で統合版マイクラではUDP19193番がデフォルトになっています。
ここら辺はプロトコルが動的とされており自由にサーバー側で設定し使っていいという番号ですね。

ただ、TCPでは20番がFTP(file transfer protocol)つまりデータ転送プロトコルだとか、TDP80番HTTP

HTTPってなんだっけ
はいぱーてきすととらんすふぁーぷろとこるだっけ?

まあそんな感じで、web用途とかリモート接続用途とかで特化されたプロトコルがあるので、マイクラのポートはこちらが自由に設定はしていいけれども、自由に使っていいことにされている五桁番ポート(65536まで)を使うのが妥当でしょう。

スクリーンショット 2020-11-28 183525.png
まあ大きいのはこんな感じ、443番HTTPSは暗号化通信で会員情報とかを取り扱う際に使われるね。
あとはメールサーバーとかか。

IP(Internet Protocol)アドレス
IPアドレスとは、インターネット上で識別するアドレスですね。 
0.0.0.0から255.255.255.255までの範囲があり、
2進数でいえば00000000.00000000.00000000.00000000から
11111111.11111111.11111111.11111111まで
の範囲で設定できます。

世界中のインターネットでただ1つ割り振られるので、
約42億通りくらいしか存在しないんですね、なのでこれらIPv4からIPv6と呼ばれる兆単位で管理出来る方式に変えようとする動きはあったが実際どうなってるかは不明ですね。

グローバルIPとプライベートIP
グローバルIPアドレスはそのさっき言った約42億通りのアドレスです。これはルーターに割り振られるため

例えば
ルーターAにwifiでノートパソコンとNintendo Switchを接続したとします。

そしたらルーターのグローバルアドレスでインターネットに接続した事になるんですね、ノーパソだろうがスイッチであろうが。

じゃあルーターBに接続すると、ルーターのアドレスは違うので、またそのルーターのIPアドレスとしてインターネットに接続します。

また、グローバルIPアドレスは固定することができます。

よく分からんかったが(殴)

また、DNS名に紐づける方法もあります。なんかネットワーク話したら大体人の興味を引くために、「この数字列で大手サイトにアクセスできるんですよ~」みたいなお話が必ずあると思います。
http://172.217.161.46/
これはどちらも同じサイトにつながりますよ~!

的な、ね。

これはDNS(ドメインネームサービス)を使用されており、google.comというドメイン名(企業や国で.co.jp等もある)にグローバルIPアドレスを紐づけたものですね。

例えばdynamic do!なんかはマイクラ鯖のDNSでよく使われますが、ddo.jpみたいなのが最後に必ず付いたはず。
マイクラ鯖用のアドレスが54.125.45.204だとしてドメイン名をnekoyama.ddo.jpとしてdynamic do!でドメイン名取得後アドレスをドメイン名に紐づけることで

アドレス欄にnekoyama.ddo.jpを入力してもアクセスできるようになります。
数字列より文字列の方がプレイヤーは分かりやすいっていう利点のほかに、ルーターを再起動させてしまいアドレスが変わったとき、運営側がドメイン名に紐づけるアドレスを変えるだけでプレイヤー側はアドレスを入力しなおす必要がない

という利点があります。ただ、逆算することでドメイン名からグローバルIPアドレスを割り出す事が出来るのでアドレス匿名化の意味にはならないため、過信しすぎないように。

初心者は「お前のIPアドレス特定したわ」で的確に当てられてビビるなんて例もあり得ますけど誰でもそういうサイト使えば普通に割り出せますからね。コマンドプロンプトからも確かできるし

IPアドレスから住所特定は、ある程度(県名程度)しか当てられないので問題ないですご安心を。

プロバイダに攻撃を仕掛けて個人情報を漏えいさせてルーターの契約者をあぶりだし、個人情報から住所を特定されでもしない限り問題ないでしょう。
ちなみにこの企業にサイバー攻撃仕掛けたところで大体跳ね返されるからね。しかも相手は適当な中小企業じゃなくインターネットのスペシャリストみたいな塊だから、物理的な攻撃がない限り問題ないと信じていいだろうね


じゃあプライベートIPアドレスとは、ルーター内で各機種を識別するアドレスです。

・・・簡単に言うと、なんて説明も要らない、シンプルなアドレスですねハイ。

クラスA/B/Cが存在して、
Aの方が多くの機種を制御できます。

が。基本関係ないです。

10.x.x.xとか172.x.x.xとか192.x.x.xが順にA/B/Cなのですが。

Aが1677万(2^24)機種、Bが65536(2^16)機種、Cが256(2^8)機種まで管理できます。

ハイ。見て分かる通り、Cで充分です。巨大な会社がBとかになってるのかな?

あと、ルーターによって変わるっぽいのでまあ172.xxとかだから悪いとかそんなことも無いです。

まあ例えば、私の今この使っているパソコンは192.168.0.10ですし、マイクラサーバはIPアドレスを固定させている(192.x.x.xはクラスCなのでデフォルトゲートウェイを255.255.255.0とし)192.168.0.80でルーターを再起動させてアドレスが変わり、ポート開放のフィルタリング機能で指定したプライベートIPアドレスと合致しなくなりサーバーとして機能しなくなる問題を回避するためにアドレスを固定していたりします。

Windowsであればipconfigコマンド、LinuxであればifconfigコマンドでプライベートIPアドレスを確認できます。
※サーバーを運用するときはイーサネット(有線接続)であることは大前提です。wifiでは安定性に非常に乏しいので運用はお勧めしません。
スクリーンショット 2020-11-28 211814.png
リンクローカルIPv6アドレス(プライベートIP)が192.168.0.10になってますね。

Linuxはnet-toolsをapt install(debian系であれば)でインストールしてください。
スクリーンショット 2020-11-28 212019.png
inetの部分が192.168.0.80になってますね。

なお、マイクラサーバのアドレスなんかはグローバルIPアドレスで接続します。グローバルIPはネットで調べると出てきます。

!ポート開放確認は25565番とかだと確認できない感じっぽいので注意。よくわからんけど、確認できなくてもポート開放出来ている例はあった
スクリーンショット 2020-11-28 212615.png
行けるときは行けるっぽいのでよく分からない。

TCPとUDP
TCPは基本的に使用されているプロトコル(ルール)で、相手へ受信していいかを確認したり、失敗した時再び送信したり、通信効率を最適化する機能がありUDPより高精度です。体感は難しいですが・・・
UDPはコネクションレス型のプロトコルという事で、相手に確認したり再送信したりする機能がなく信頼性がTCPに劣る代わりに高速で転送する事が出来るプロトコルです。ただ、再送信できないという事でパケットロス(Apex等fpsゲームでもあるが、敵が瞬間移動してしまう等の不具合。)が発生する可能性は高く修正も出来ないという感じ。
スクリーンショット 2020-11-28 213203.png
サイトから引用してきたが、まあTCPはデータが欠落すると困る、少し大きめのファイルを送受信する時に使われますね。(HTTPならWebサーバ用プロトコルのため、HTMLファイルを送信する、Telnetはリモート接続、FTPはファイル転送プロトコル、POPはメール関連、てな具合)
UDPではDNS(ドメインネームサービス、後記)、NTP(ネットワークタイムプロトコル)まあ時間プロトコルてな感じでデータが若干欠落しようが問題ない、ただリアルタイム性が必要な物という感じですね。

じゃあTCPが巨大ファイル、UDPが小型ファイル転送で使われることが多い、というのは分かった、
統合版ではUDP、Java版ではTCPが使用されるのはなぜか。

分かりません('ω')
調べてもそこまで書いてるサイト無いですね。

個人的な推測としては、Java版ではJava言語で動作してますけど統合版って実はC++言語で開発されてる全くの別物なんですね。

でも、サーバー立ててる側からした身としてはアップロード量はあまりどちらも関係ないんですね、
リアルタイム性ならどちらでも変わらないのだけど、それならUDPを使うはず・・・

となると、Java Editionで何かしらTCPを使わなければならない理由があったんでしょうね。

OSに搭載されたFirewall(ファイアウォール)機能
この記事はポート開放の方法を紹介してるわけではないので、もう解決済みの人も多いと思いますが。
ここでポート開放で行き詰った人も居るのでは。
名前の通り「防火壁」という機能で、悪い奴は遮断!あ、これは良さそうだから通す!
てな機能ですね。

詳しく言えばパケットフィルタリングという
ヘッダを解析して、通過させるかどうか判断する

という機能。最初いった通り「普通のパソコンはヒキニートで、外部からの陽キャは受け付けない」というのが「デフォルト」であり、当然外部から一方的にファイルとかデータぶつけられても拒否るわけですよね。もちろん、ルーター側の時点で廃棄する設定だけど念には念を入れてWindowsではデフォルトでファイアウォールが働いてるんですね。

Linuxではufwをインストールして有効化することで働くんですけど、まあこの機能をオフにし忘れてサーバーにアクセスできない!という事を避けるためにちゃんと設定しておきましょう。


設定によってどうなる

ポート開放によって、
プレイヤー→プレイヤー側のルーター→インターネット→ホスト(鯖運営)側ルータ→サーバー
という流れを問題なく作る事が出来るんですね。

→ホスト(鯖運営)側ルータ→サーバー
①ルータでのパケットフィルタリング機能でアクセスを遮断される設定を削除
②サーバーのファイアウォール機能を無効化しアクセス遮断を回避する
というこの設定でいよいよプレイヤーがサーバーに接続できるようになるんですね。

この大まかな流れ二つをつかんで設定してみるとポート開放がスムーズにいくかと思います。

危険性

「ヒキニートがドアを開ける」という事は何度かプライバシーもクソも無くなるって話をしたと思います。
本当にその通りで、基本はドアに牛糞ぶつけられようがナイフ投げつけられようがドアが遮断してくれるから安全だったんですけど、開けるという事はそれらすべて受け入れるという事になります。

ウィルス投げつけられても入るという訳です。

実体験なんですけど、MARSウィルスとか呼ばれてるこいつにやられたんですよね。sambaというファイルサーバソフトの脆弱性を突かれてやられた説が出てますが。ウィルスもうけつけてしまうという事を頭に入れておいてください。

要は別のパソコンに重要データを定期的に別パソコンにバックアップ取っておけという事ですね。
これにより文書ファイルが全部暗号化されてお陀仏になりましたからね。気を付けてください。

まとめ

いかがでしたでしょうか。
これらを理解してサーバーを立てられたならば大体は理解しているといってよいでしょう。
何もかも分からず、手順だけを説明されただけのサイトを見てサーバーを構築したならこの記事で知識を学んである程度理解しておきましょう。
私自身もまだにわかなのでプロキシとか、サブネットマスクとか、(私が)意味を知らない単語も多くありますし、まあ独学で学ぶ価値はあるんじゃないでしょうかね。

以上!!!!!
0

この記事へのコメント