ポート開放とは

たまに「ポート開放がわけわからん」というのを言われるので、雑に簡単にまとめたいと思います。

## ポート「開放」ってなんぞや
「開放」っていう語は多分、外から見たときに観音扉が開けられている様子のような感じだからそう呼んでいると勝手に思っています。
外から見たときに、特定のポートにアクセスするとそのサービスにつながるから「あ、開放してるんだな」（外から見てオープンになっている）っていう見え方になるんでしょうね。

使われる（気にするべき）機能としては、

```
* フィルタリング
* NAPT(Network Address and Port Translation)
```

おおまかにこの辺でしょうか。

フィルタリングについてはここではあまり触れないことにします。
これはこれで開放している感じがしますが、飽くまでルーターに入ってくる通信をブロックするかしないかのため、設定次第ではノーガード戦法もできますし、逆にこれしか通さないといったこともできます。LAN内からのものをフィルタリングすることも、外部からのものをフィルタリングすることもできますし、ダイナミックフィルターで中からのみなどもできます。

NAPTが行っているのはIPアドレスとポート番号の変換です。語から考えると開放していると言うよりも変換しています。
そのため、ポート「転送」やポート「フォワード」、ポート「マスカレード」、ポート「アドレス変換」等と様々な呼び名がある機能です。これがわかりにくいと言われる原因なのかなと思っています。
役割としては、ネットワークとネットワークをつなげるために外側と内側のアドレスを変換して通信がうまくいくようにします。
なぜこれが必要になったかと言うと、単純にグローバルIPアドレス（IPv4）が足りなくなったからです。

## （ざっくりと）仕組み
![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238748/b9e0fb49-12c5-0608-6222-da255afad470.png)

単純化した図を用意しました。

1. ①PC…外から自宅にアクセスする端末（なんでもよい）です。インターネットなんやかんやというのは、①が実際はルーターの配下にいたり、様々なネットワークに属しているので単純にするために雲にしています。

2. ②ルーター…自宅でネットワークのお仕事をしているルーターさんです。
ルーターの主な役割は、最近ではいろいろさせられていますがざっくり言うとインターネットなんやかんやにつなげるため、配下のネットワークから次のネットワークへのルーティングやNAPT、NAT等をこなします。そのために、ざっくりと配下のネットワークを作り上げる機能も持ってます。いわゆるポート開放はここでやってます。ファイアーウォールとかそういったものは考えません。  
また、インターネットに繋げるための接続サービスの認証機能なんかも持ってます。ここで認証させて配下のネットワークと外部のインターネットを繋げます。

3. ③自宅鯖…利用していない人はいないと言われているサーバーさんですね。役割や機能をもたせて様々なサービスを待機させておくことができます。ちなみに拙宅では富士通のWindows Home Serverが動いています。そろそろリプレイスですね。  
自宅鯖じゃないかもしれません。ネットワークに参加できる「モノ」でしょうか。ここでは自宅鯖にしておきます。きっとWEBサーバーが建っています。

![Untitled (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238748/45ed0131-cbf7-3776-f92d-1d5097f154c5.png)
インターネットに直接繋がっている機器はグローバルIPアドレスが契約しているISPより付与されています。固定だったり動的だったり。外部からアクセスする場合はこのグローバルIPアドレスに対してアクセスをします。  
大抵はドメイン（文字）を宛先に入れる事が多いですが、これはDNSという仕組みを利用して文字（ドメイン）をルーターがIPアドレスに翻訳してアクセスしています。簡単に言うと、Qiitaにアクセスしたい！という通信をする際、そのアクセスしたい機器はqiita.comのIPアドレスはなんですか？とDNSサーバーに問い合わせをして、DNSサーバーから「qiita.comは13.114.xxx.yyyです」といった内容を受け取り、13.114.xxx.yyyにアクセスを行います。  
このように、人間の知らないところではIPアドレスでの通信が行われています。そのため、今回は単純化するためにこのDNSは使用しないこととします。

![Untitled (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238748/113ba13c-8372-9d2a-4c5f-9fc2ceae5b9e.png)
その配下にある自宅鯖さんはなんらかの形でプライベートIPアドレスが割り当てられています。ルーターからDHCPで割当をしていたり、手動で設定されていたり・・・。
①も何らかの形でプライベートなりグローバルなりIPアドレスが割り当てられていますが、そのへんは①が属しているネットワークのルーターさんかなんかが頑張ってるので触れないことにします。

これまでの図では、自宅鯖にアクセスするために自宅のネットワークでルーターが防人をしています。
このまま①からアクセスしようとしたとしても、ルーターさんのところでブロックされます。（正確には、ルーターさんが行き先を把握していないので、「どこに投げたらわかんねーから捨てる」という動作を行います。多分「熱」になってます。）
逆に自宅鯖からのインターネット上にある何かへのアクセスは、自宅鯖はプライベートIPアドレスからのアクセスなので基本的にそのまま流したとしてもインターネットどこかで捨てられます。（これは、プライベートIPアドレスに当たるものは規定されており、全てインターネット上に「無いこと」になっているのでどこかの機器で破棄されることになっているためです。）

そのため、
1. ルーターさんは自宅鯖からの通信のアクセスポートとプライベートIPアドレスを記録
2. 記録したポートを変換して自らの持つグローバルIPアドレスを名乗ってインターネット上の宛先に投げる
3. 戻ってきたものは記録したポートと自宅鯖のIPアドレスに変換して自宅鯖になげます。
極端に単純化するとだいたいこんな感じです。自宅のPCからGoogleを見に行く場合についても、だいたい同じ感じです。
ここでの変換をNAPTという機能が担当しています。

この流れを見て分かる通り、ルーターさんが繋ぎをつけています。
外部から接続する順序を考えます。
1. ①から123.234.56.xxのWEBサーバーにアクセスしたい！とインターネットにぶん投げます。
2. 123.234.56.xxのルーターは①から来た80番（WEBサーバーの標準的なポート）へのアクセスを確認します。
3. しかし、80番の行き先がわからないので捨てます。

ここで、80番の行き先をわかってもらうようにルーターさんに設定する必要があります。
例として、中小向けシェアNo.1のYAMAHAルーターの設定をします。

```
nat descriptor masquerade static 1 1 192.168.1.100 tcp 80
```

これで外から見て123.234.56.xxの80番ポートは内側の192.168.1.100の80番ポートであるとルーターに教えることができました。
これで外からアクセスすると、
1. ①から123.234.56.xxのWEBサーバーにアクセスしたい！とインターネットにぶん投げます。
2. 123.234.56.xxのルーターは①から来た80番（WEBサーバーの標準的なポート）へのアクセスを確認します。
3. ルーターさんは80番ポートに来たものは192.168.1.100の80番ポートに投げると知っているので、そっちに投げます。
4. 自宅鯖のWEBサーバーに通信が届き、レスポンスが返されます。
5. ①で自宅鯖にあるWEBページが表示されます。

だいたいこんな感じです。
3の段階で設定されているフィルターの評価（フィルタリング）も行われています。もしもお使いのルーターでフィルターの設定があるようであればPASSするように設定してあげます。
どの家庭にも1台はあるといわれているYAMAHAルーターさんでは以下のような設定になります。もちろん拙宅にもございます。

```
ip filter 1018 pass * 192.168.1.100 tcp * 80
```

これをインターネット側のINフィルターにしてあげると多分いけます。フィルターの順序には気をつけよう。

## 結局どうすればいいの？
1. サーバー側の設定をきちんとしましょう（IPアドレスの設定はできているか、サービス（デーモン）が動いているか、ファイアーウォールの設定はちゃんとしているか、LAN内からアクセスできるか等）
2. お使いのルーターの説明書をよく読んでください。
3. フィルターとNAPT（NAT、ポート転送等）の設定をきちんとしてあげましょう。

もちろんですが、巷で言われているようにこの設定をすることによって外部から内部へ「穴」を開けることになるので、セキュリティ的にはリスクにつながる場合があります。
また、いまやっていること、やろうとしていることを理解しながら順序立てて設定を進めていくことが重要です。思わぬ設定は悲劇に繋がります。リモートで設定していたらルーターから追い出されたりね。

ネットワークを構成しているのは自分のみではないということを理解しましょう。
「わけがわからない」の原因は大抵説明書をよく読んでいなかったり理解していない場合が多いようです。だからわからないにつながるんですね。
「読んでもわからない」はまだ許せますし、わからないところがある程度わかるので理解の手助けができますが、「読んでないから分からない」は万死に値します。なにがしたいんだ。

だいたいこんな感じです。以上です。