
私は Windows 10 ビルド 1809 を実行しており、Hyper-V をインストールしています。NAT の背後で実行されている Linux マシンがあり、IP 10.0.5.5 でインターネット接続が機能しています。基本的に、以下のリンクの指示に従いました。
https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/setup-nat-network
ポートマッピングを作成したとき、私は
Add-NetNatStaticMapping -ExternalIPAddress 0.0.0.0/24 -ExternalPort 8500 -Protocol TCP -InternalIPAddress 10.0.5.5 -InternalPort 8500 -NatName YetAnotherNAT
打とうとするとhttp://10.0.5.5:8500動作します(ページが読み込まれます)。http://127.0.0.1:8500動作しません (何も読み込まれません)。外部 IP のいずれかを使用しようとしても動作しません。
基本的には、ポート転送全体が何も実行されていないようなものです。
何か案は?
Get-VmSwitchは次の結果を返します
PS C:\> Get-VMSwitch
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
nat Internal
Wifi External Intel(R) Dual Band Wireless-AC 7265
DockerNAT Internal
Default Switch Internal Teamed-Interface
MyNATSwitch Internal
YetAnotherSwitch Internal
Get-NetNatは次の結果を返します
PS C:\> get-netnat
Name : YetAnotherNAT
ExternalIPInterfaceAddressPrefix :
InternalIPInterfaceAddressPrefix : 10.0.5.0/24
IcmpQueryTimeout : 30
TcpEstablishedConnectionTimeout : 1800
TcpTransientConnectionTimeout : 120
TcpFilteringBehavior : AddressDependentFiltering
UdpFilteringBehavior : AddressDependentFiltering
UdpIdleSessionTimeout : 120
UdpInboundRefresh : False
Store : Local
Active : True
答え1
おそらく、次のようになります:
ホストから直接内部エンドポイントにアクセスする
VM またはコンテナに割り当てられた内部エンドポイントには、NAT 静的ポート マッピングで参照される外部 IP / ポートを使用して NAT ホストから直接アクセスすることはできません。NAT ホストからは、これらの内部エンドポイントを内部 IP とポートで直接アドレス指定する必要があります。たとえば、コンテナ エンドポイントの IP が 172.16.1.100 で、ポート 80 でリッスンしている Web サーバーを実行しているとします。さらに、ポート マッピングが docker によって作成され、TCP ポート 8080 で受信したホストの IP アドレス (10.10.50.20) からのトラフィックをコンテナ エンドポイントに転送するとします。この場合、コンテナ ホスト上のユーザーは、外部にマッピングされたポートを使用して Web サーバーに直接アクセスすることはできません。たとえば、コンテナ ホストで操作しているユーザーは、http://10.10.50.20:8080代わりに、ユーザーはコンテナウェブサーバーに直接アクセスする必要があります。http://172.16.1.100:80。
この制限の唯一の注意点は、同じNATホスト上で実行されている別のVM/コンテナエンドポイントから外部IP/ポートを使用して内部エンドポイントにアクセスできることです。これはヘアピンと呼ばれます。たとえば、コンテナAで操作しているユーザーは、コンテナBで実行されているWebサーバーに、コンテナBの内部IPとポートを使用してアクセスできます。 http://10.10.50.20:8080