CrescPia

10080 番ポートが使えない

ローカルで開発していて、このアプリのポートは 8080、次のアプリのポートは 9080、その次は 10080 とするとうまくいきません。なぜ?

ポート番号0-1023 は最近はウェルノウンポートではなくシステムポートと呼ぶそうです。

開発時に適当にポート番号を割り振るときにシステムポートは管理者権限がないと使えないので避けて、3000番台とか5000番台もDBや何かのフレームワークのデフォルトで使っていそう、8080番はよくサンプルで見るので自分のアプリで使っていそう、などと考えています。
かぶらない番号を求めて 9080 番、10080番と上げていくと 10080番ではうまく表示されません。
こんなところに NG のポートがあるの・・・?


  • Chrome の場合 Chromeのエラー表示
  • Firefox の場合 Firefoxのエラー表示

実はこのメッセージは、アプリが10080番で動いていようがいまいが、ブラウザで http://localhost:10080/ にアクセスすると表示されます。
10080 番はブラウザが強制的にエラーにします。
Firefox のエラーメッセージが丁寧でわかりやすいですね。(Chrome はエラーメッセージが違うような気が・・・)


ちなみにアプリが動いていない場合、10081番ポートでは以下のような表示です。

  • アプリが動いていない場合(10081番ポート) Chrome 10081番ポートのエラー表示

10080番以外にもブロックされるポートはあって、Chrome (Chromium) では以下のソースで確認できます。
- net/base/port_util.cc - chromium/src - Git at Google

// The general list of blocked ports. Will be blocked unless a specific
// protocol overrides it. (Ex: ftp can use port 21)
// When adding a port to the list, consider also adding it to kAllowablePorts,
// below. See <https://fetch.spec.whatwg.org/#port-blocking>.
const int kRestrictedPorts[] = {
    0,      // Not in Fetch Spec.
    1,      // tcpmux
    7,      // echo
    9,      // discard
    11,     // systat
    13,     // daytime
    15,     // netstat
    17,     // qotd
    19,     // chargen
    20,     // ftp data
    21,     // ftp access
    22,     // ssh
    23,     // telnet

    ... // 中略

    2049,   // nfs
    3659,   // apple-sasl / PasswordServer
    4045,   // lockd
    5060,   // sip
    5061,   // sips
    6000,   // X11
    6566,   // sane-port
    6665,   // Alternate IRC [Apple addition]
    6666,   // Alternate IRC [Apple addition]
    6667,   // Standard IRC [Apple addition]
    6668,   // Alternate IRC [Apple addition]
    6669,   // Alternate IRC [Apple addition]
    6697,   // IRC + TLS
    10080,  // Amanda
};

ソースの先頭の方のコメントにもありますが、ポートブロッキングは Web の標準仕様となっていて以下で確認できます。

(おや、4190番ポートが Chrome の方には反映されていないよう・・・。Firefox は動作で確認すると 4190 番ポートはブロックされました。)
ということで、10080番ポートはブラウザがブロックするのでエラーになっていました。

ブラウザが特定のポートをブロックするのは、「NAT Slipstreaming」という攻撃に対処するためとのことです。
NAT Slipstreaming 攻撃は NAT をうまくすり抜けて外部から LAN 内のホストにアクセスするという攻撃です。
知らないうちにセキュリティ対策をしてくれているので、ブラウザも定期的にアップデートしないといけませんね。 再起動して更新する


PR
PR