ポート開放とは ― 仕組みと注意点
ポート開放とは、
ポート開放とは、外から始まる通信を家の中の機器へ届ける設定
ポート開放とは、インターネット側から始まる通信を、家の中の決まった機器へ届けるようにルータへ設定することです。ルータには、どのポート番号宛ての通信を、どの機器のどのポートへ送るかを登録します。
外出先から家のNAS(ネットワーク接続のストレージ)やネットワークカメラを見たいときや、家でゲームのサーバを動かしたいときに使います。同じ設定を、ポートフォワーディングやポート転送とも呼びます。SSHにも同じ名前の機能がありますが、SSHの接続を使う別の仕組みです。ふだんのルータは、NATの変換テーブルにない外からの通信を捨てます。ポート開放を設定すると、その通信も家の中の機器まで届くようになります。
なぜ外から始まる通信は届かないのか
家庭用ルータは、NAPTで1つのグローバルIPアドレスを家の中の機器で共有しています。変換テーブルの行は、家の中の機器が外へ通信を始めたときに作られます。戻りのパケットは、この行を手がかりに元の機器へ届きます。
外の端末から先に接続するときは、ルータのグローバルIPアドレスを宛先にするしかありません。しかし、家の中には機器が何台もあるので、ルータはどの機器へ渡すかを決められません。変換テーブルにも該当する行がないため、ルータはパケットを捨てます。
多くの家庭用ルータはファイアウォールの機能も持ち、初期設定では外から始まる通信を止めています。多くのルータでは、ポート転送を登録すると、その通信をファイアウォールでも通すようになります。
ポート開放でルータに設定する内容
ポート開放で登録するのは、変換テーブルに手動で書き込む固定の行です。内部から通信が始まるのを待たずに、行を先に用意しておくわけです。この方式を静的NAPTと呼びます。
登録する項目は、ルータの機種が違っても次の4つです。表は、家の中のWebサーバを外から見られるようにする例です。
| 登録する | 例 | 意味 |
|---|---|---|
| プロトコル | TCP | TCPかUDPかを選びます。ゲームや通話ではUDPを使うことがあります。 |
| 外側のポート番号 | 8080 | 外の端末が接続するときの番号です。 |
| 転送先のIPアドレス | 192.168.10.30 | 家の中のサーバのプライベートIPアドレスです。 |
| 転送先のポート番号 | 80 | サーバのアプリが待ち受けている番号です。 |
この例の自宅ルータのグローバルIPアドレスは 198.51.100.5 です。外の端末が 198.51.100.5:8080 に接続すると、ルータは宛先を 192.168.10.30:80 に書き換えてサーバへ届けます。
サーバの応答は、ルータを通るときに送信元が 198.51.100.5:8080 に書き換えられます。NAPTの行きと戻りの変換と同じ仕組みです。外の端末から見ると、最後まで 198.51.100.5 と通信していることになります。
外側と転送先のポート番号は、同じでも違っていてもかまいません。この例では、外側を8080番にし、サーバは80番で待ち受けています。同じプロトコルの外側のポート1つに登録できる転送先は、1台だけです。2台のサーバがどちらも80番で待ち受ける場合は、外側のポート番号を分けます。
ポート開放の手順と確かめ方
ルータの設定画面は機種ごとに違いますが、確かめる順番は共通です。サーバの側から外側へ、順に確かめます。
- 1
サーバが
待ち受けているか サーバの上で、アプリが目的のポートで待ち受けているかを確かめます。ss -tln や netstat -an の出力で、そのポートの行が LISTEN なら待ち受けています。出力の読み方は、netstat・ss・digの記事で説明しています。
- 2
サーバの
IPアドレスを 固定する 転送先はIPアドレスで指定します。DHCPで受け取るアドレスが変わると、転送の決まりが別の機器を指してしまいます。ルータのDHCPで同じアドレスを配るように設定するか、サーバにアドレスを手動で設定します。DHCPの仕組みはDHCPの記事で説明しています。
- 3
サーバの
OSの ファイアウォールで 許可する WindowsなどのOSは、パーソナルファイアウォールで外からの接続を止めていることがあります。ルータの設定とは別に、OSでもこのポートを許可します。
- 4
ルータに
転送の 決まりを 登録する 前の節の4つの項目を登録します。
- 5
家の
外の ネットワークから 接続する スマホのモバイル回線など、家の外のネットワークから接続して確かめます。家の中から自分のグローバルIPアドレスに接続すると、ルータは通信を家の中へ折り返す必要があるからです。この折り返しをヘアピンと呼びます。
NATの要件を定めた RFC 4787 と RFC 5382 は、UDPとTCPのどちらでもヘアピンへの対応を求めています。ただし、対応していない家庭用ルータもあります。その場合、設定が正しくても家の中からは届かないので、外から確かめます。
グローバルIPアドレスは、契約によっては接続し直すたびに変わります。変わると、外の端末は古いアドレスに接続し続けてしまいます。そこで、アドレスが変わるたびにDNSの登録を書き換えて、名前で接続できるようにするサービスがあります。これをダイナミックDNSと呼びます。
UPnP・DMZホスト機能との違い
外からの接続を受ける方法は、手動で登録するポート転送のほかに2つあります。違うのは、開くポートの数と、誰が開くかです。
| 方法 | 外から | 誰が |
|---|---|---|
| ポート転送 | 登録したポートだけ | 利用者が手で登録する |
| UPnP | 機器が求めたポート | 家の中の機器が自動で登録する |
| DMZホスト機能 | 転送の決まりがないすべてのポート | 利用者が1台を指定する |
UPnP:家の中の機器が自分でポートを開ける
家の中の機器がルータに依頼して、自分用の転送の決まりを登録する仕組みをUPnP(Universal Plug and Play)と呼びます。ルータ側の動きは、UPnPの Internet Gateway Device という仕様で定められています。
ゲーム機や通話アプリは、UPnPを使って必要なポートを利用者の操作なしに開けます。便利な反面、家の中の機器なら、利用者の知らないうちにポートを開けられます。マルウェアに感染した機器が、外からの入口を勝手に作るおそれもあります。使っていないなら、ルータのUPnPを無効にしておきましょう。マルウェアの種類ごとの違いは、マルウェアの種類の記事で解説しています。
DMZホスト機能:すべてのポートを1台へ送る
DMZホスト機能は、どの転送の決まりにも当てはまらない外からの通信を、すべて1台の機器へ送る機能です。ポートを1つずつ登録しなくて済む代わりに、その機器のすべてのポートに外から届く状態になります。
名前は似ていますが、本来のDMZとは別のものです。本来のDMZは、公開サーバを内部LANから切り離して置く区画です。家庭用ルータのDMZホストは、内部LANの中の1台をそのまま外部に公開します。
区画が分かれていないので、その機器が乗っ取られると、内部LANのほかの機器にも攻撃が届くおそれがあります。
IPv6ではポート転送をせず、ファイアウォールで許可する
IPv6はNATを前提にしていないので、家の中の機器もそれぞれグローバルなアドレスを持ちます。そのため、外の端末は最初からサーバ自身のアドレス宛てに送れます。
ルータが宛先を書き換える必要はありません。その代わり、多くの家庭用ルータは、外から始まるIPv6の通信をファイアウォールで止めています。
家の中から始まった通信だけを通すこのフィルタは、家庭用ルータ向けに RFC 6092 でも勧められています。ただし RFC 6092 は、すべてを通す設定を初期設定にすることも認めています。
IPv6で外から接続させるには、ルータのIPv6のフィルタで、サーバのアドレスとポート番号宛ての通信を許可します。サーバのOSのファイアウォールでも、IPv4と同じように許可が必要です。接続してくる側も、IPv6で通信できる回線を使っている必要があります。
機器によっては、外へ通信するときに、一定時間で変わる一時アドレスを使います。これは、RFC 8981 で定められたプライバシー拡張によるものです。許可する宛先には、一時アドレスではなく、変わらない方のアドレスを指定します。
ポート開放ができない回線・制限がある回線
自宅ルータでのポート開放が効くのは、自宅ルータ自身がNAPTをしている場合です。回線によっては、NAPTをプロバイダの設備で行います。その場合は、自宅ルータに転送の決まりを登録しても、外からの通信は届きません。
| 接続の | NAPTを | 自宅ルータでの |
|---|---|---|
| 自宅ルータにグローバルIPv4アドレスが付く接続 | 自宅ルータ | できる |
| MAP-E | 自宅ルータ | 割り当てられた範囲のポートだけできる |
| DS-Lite | プロバイダの設備 | できない |
| CGNAT | プロバイダの設備と自宅ルータ | できない |
CGNAT:プロバイダの設備でもう一度NAPTをする
CGNATは、プロバイダの設備でNAPTを行い、多くの契約者で1つのグローバルIPv4アドレスを共有する方式です。このとき自宅ルータのWAN側には、グローバルではないアドレスが付きます。この用途のために、RFC 6598 で 100.64.0.0/10 の範囲が予約されています。
外の端末が接続できるのは、プロバイダの設備のアドレスです。プロバイダの変換テーブルには転送の決まりがないので、通信は自宅ルータまで届きません。自宅ルータのWAN側のアドレスが 100.64.0.0〜100.127.255.255 の範囲にあれば、CGNATの内側にいることになります。
DS-Lite:自宅ルータはIPv4を包んで送るだけ
DS-Liteでは、自宅ルータはIPv4のパケットをIPv6のパケットに包み、プロバイダの設備へ送ります。NAPTは、IPv6の包みを外したプロバイダの設備が行います。この方式は RFC 6333 で定められています。自宅ルータは変換をしていないので、転送の決まりを登録しても外からは届きません。
MAP-E:使えるポート番号の範囲が決まっている
MAP-Eでは、1つのグローバルIPv4アドレスを、ポート番号の範囲で複数の契約者に分けます。自宅ルータは、自分に割り当てられた範囲のポート番号だけを使ってNAPTを行います。そのため、ポート開放もこの範囲のポート番号でしかできません。
仕様の RFC 7597 では、標準の設定値のとき、0〜1023番はどの契約者にも割り当てられません。その場合、80番や443番は外側のポートに使えません。外側のポートを割り当ての範囲から選べば、転送先は80番のまま使えます。
DS-LiteとMAP-Eは、どちらもIPoEの回線でIPv4を使うための技術です。IPoEとの関係は、PPPoEとIPoEの記事を読むと分かります。同じ回線でPPPoEのIPv4接続も使い、そちらでポート開放をする組み合わせもあります。
ポート開放の危険性と注意点
ポート開放をすると、世界中のどの端末からでも、そのポートに接続できるようになります。インターネットでは、開いているポートを探す通信が絶えず送られています。開けたポートはいずれ見つかるものと考えて、対策しておく必要があります。
特に注意が必要なのは、ポートの先で動いているアプリです。ソフトウェアの欠陥のうち、攻撃に使えるものを脆弱性と呼びます。公開したアプリに脆弱性があると、外から乗っ取られるおそれがあります。パスワードが弱ければ、何度も試す攻撃で突破されるおそれがあります。
- 必要なポートだけを開け、DMZホスト機能は使わない
- 公開するアプリとOSを、最新の状態に保つ
- 推測されにくいパスワードにし、使えるなら多要素認証も使う
- 使い終わったら転送の決まりを消して、ポートを閉じる
- 使っていないなら、UPnPを無効にする
パスワードを突破する手口や、脆弱性を突く手口の内容は、不正アクセスの記事にまとめています。
自分だけが外から家の機器を使いたいなら、VPNで家のネットワークに接続する方法もあります。外に開けるポートはVPN用だけになり、その先の機器は外から直接見えません。VPNの仕組みはVPNの記事で説明しています。
練習問題(全6問)
正解:ルータが
外の
正解:198.51.100.5:8080
外の
正解:転送の
DMZホスト機能は、
正解:ルータの
IPv6では、
正解:自宅ルータに
MAP-Eでは、
正解:CGNATの
100.64.0.0/10 は、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
ネットワークを初めて学ぶ人向けの入門書です。
![『[改訂新版]3分間ネットワーク基礎講座』の表紙](https://m.media-amazon.com/images/P/4774143731.09.MZZZZZZZ.jpg)
