Windows 10 で管理されたポートの除外とは何ですか? 質問する

Windows 10 で管理されたポートの除外とは何ですか? 質問する

Windows 10 で Hyper-V を有効にしています。除外されたポートを確認すると、次のメッセージが表示されます。

C:\> netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      5357        5357
      9800        9800
      9801        9801
     49671       49770
     49871       49970
     50000       50059     *
     61117       61216
     61220       61319
     61902       62001

* - Administered port exclusions.

Hyper-V がこれらのポートを予約するのはなぜですか?

管理されたポート除外 (つまり、範囲 50000 ~ 50059) は、他のポート除外とどう違うのでしょうか?

たとえば、Golang で net.Listen() を使用してこれらすべてのポートに ping を実行しようとすると、50000 ~ 50059 を除くすべてのポートでエラーが返されます。

listen tcp 127.0.0.1:9801: bind: An attempt was made to access a socket in a way forbidden by its access permissions. 

ベストアンサー1

Windows 10 では、特定のポートでエラーが発生することがあります。

Ports are not available: listen tcp 0.0.0.0:55555: bind: An attempt was made to access a socket in a way forbidden by its access permissions. 

このエラーを見ると、必要なポートが別のアプリケーションで使用されているのではないかとまず考えます。そこで、使用中のポートを確認します。

netstat -aon | find "55555"

しかし、結果にはポートがまだ使用されていないことが示される場合があります。

問題は、Windows がいくつかのポートを予約していることかもしれません。それらは、他の目的に使用できない除外ポートです。次のコマンドでそれらのポートを一覧表示できます。

C:\Users\Xyz> netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      1031        1130
      1131        1230
      1231        1330
      1331        1430
      1431        1530
      1561        1660
      2363        2462
      2463        2562
      2563        2662
      2663        2762
      2763        2862
      2863        2962
      5357        5357
     50000       50099     *
     55500       55599
 
* - Administered port exclusions.

Windows がこれらのポートを予約するのはなぜですか?

  • これらのポートは、特定されたウイルス/マルウェアのアクティビティにより Microsoft によってブロックされている可能性があります。
  • Windows のアップデート後にこの現象が発生しました。その後、次のアップデートをインストールしてマシンを再起動しました。今度は範囲が変更され、ポートが使用可能になりました。
  • 場合によっては、有効になっている Hyper-V 機能 (docker-for-windows インストールでは有効になっています) がこれを実行します。

他にも理由があるかもしれません。

ただし、次のコマンドを使用してポート範囲の除外を削除しようとすると (管理者であっても)、権限がないことを示すエラーが返されます。

netsh int ipv4 delete excludedportrange protocol=tcp startport=55500 numberofports=100

Hyper-V によって導入されたポート除外


Hyper-V によってポート除外が導入された場合、最終的には 2 つの解決策が考えられます (他にも解決策がある可能性があります)。

  • 使用しようとしていたポートを変更します。新しいポートは除外対象に含まれないものにする必要があります。

  • Hyper-V を無効にし、使用するためにポート範囲を予約してから、Hyper-V を再度有効にします。

2 番目の解決策に従う手順は次のようになります。

1. Hyper-Vを無効にする

方法 1 - Windows 機能ツール:

コントロールパネルで「プログラムと機能」を選択、「Windowsの機能の有効化または無効化」を選択、「Hyper-V」オプションのチェックを外す、「適用」

方法 2 - Powershell 経由:

Powershell を (管理者として) 開き、次のコマンドを実行します。

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

方法 3 - コマンドプロンプト経由:

コマンドプロンプトを(管理者として)開き、次のコマンドを実行します。

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

この後、システムを再起動する必要があります。

2. 必要なポート (範囲) を予約して、Hyper-V がそのポートを再度予約しないようにします。

再起動後、ポートの除外を一覧表示してみると、一部の範囲が存在しないことがわかります (特に、必要な範囲)。次に、必要なポート範囲を予約します。

netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100

3. Hyper-Vを再度有効にする

この機能を有効にするには、上記の 3 つの方法をすべて使用できます。たとえば、dism を使用した例を示します。

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

これにはシステムの再起動も必要になります。

システムが復旧したら、ポート除外を再度リストしてみてください。

ここで起こることは、指定されたポート範囲が追加されたことです管理ポートの除外つまり、私たちの目的のために予約したということです。

これを実行すると、Hyper-V は事前に予約された範囲の周囲に独自の予約範囲を開始できるようになります (以下の結果では、55500 ~ 55599 の範囲が保護されていることに注意してください)。

C:\Users\Xyz> netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      1031        1130
      1131        1230
      1231        1330
      1331        1430
      1431        1530
      1561        1660
      2363        2462
      2463        2562
      2563        2662
      2663        2762
      2763        2862
      2863        2962
      5357        5357
     50000       50099     *
     55500       55599     *

* - Administered port exclusions.

これで、その範囲内のポートに正常にバインドできるようになります。

Windows アップデート後にポート除外が導入されました


場合によっては、Windows の更新後に、特定のポートが突然使用できなくなり、コマンドでポートの使用状況を確認しても何も表示されないことがありますnetstat

最も重要なのは、Hyper-V も有効になっていないことです。

この場合、試すことができる回避策が 2 つあります。

(すべての人に効果があるかどうかはわかりませんが、試してみることはできます!)

オプション1 :

  • 除外ポート範囲を確認する

    netsh interface ipv4 show excludedportrange protocol=tcp

    たとえば、Windows の更新後に、ポート範囲55485-55584(必要なポートを含む) が除外対象としてリストされているとします。55555

  • Hyper-Vを有効にする

  • 除外されたポート範囲を再度確認します。

    netsh interface ipv4 show excludedportrange protocol=tcp

    必要なポートがまだ除外されていると表示されることがあります。ただし今回は、除外範囲に違いがある可能性があります。55506-555605これはおそらく、Hyper-V によって導入されたオーバーライドです (これが実際の理由かどうかはわかりません)。

  • Hyper-Vを無効にする

  • 除外されたポート範囲を再度確認します。

    netsh interface ipv4 show excludedportrange protocol=tcp

    今回、必要なポートが除外範囲に含まれていない場合は、次の手順に進んでポートを予約してください。

  • 必要なポート範囲を予約します:

    netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100

    この範囲は、管理ポートの除外としてリストされます。

次に、必要なポートを使用してみます。

オプション2:

この問題は Windows NAT ドライバー (winnat) によって発生することが多いため、そのサービスを停止して再起動すると問題が解決する場合があります。

注意!: winnat サービスを停止すると、ネットワークが切断される可能性があります。

  • 除外ポート範囲を確認する

    netsh interface ipv4 show excludedportrange protocol=tcp

  • winnat サービスを停止します:

    net stop winnat

  • 除外されたポート範囲に何が起こるかを確認します。

    netsh interface ipv4 show excludedportrange protocol=tcp

  • 必要なポートの動的予約を禁止するには、ポート範囲を予約します。

    netsh int ipv4 add excludedportrange protocol=tcp startport=55500 numberofports=100

  • winnat サービスを開始します:

    net start winnat

  • 除外ポート範囲を確認する

    netsh interface ipv4 show excludedportrange protocol=tcp

    ポート除外があることはわかりますが、自分のポートは「管理されたポート除外」としてリストされています。

次に、必要なポートを使用してみます。

管理ポート除外とは何ですか?


だから基本的に、管理ポートの除外これらは、Windows 10 で追加して、使用するためにいくつかのポートを予約できる除外です。

おすすめ記事