Introduction

備忘録。

ポート転送をしようと思ったら、下記のようなエラー。

1
2
3
4
5
6
7
PS C:\WINDOWS\system32> Add-NetNatStaticMapping "WinNAT" -ExternalIPAddress 0.0.0.0 -InternalIPAddress 10.100.10.15 -ExternalPort 10024 -Protocol TCP -InternalPort 22
Add-NetNatStaticMapping : プロセスはファイルにアクセスできません。別のプロセスが使用中です。
発生場所 行:1 文字:1
+ Add-NetNatStaticMapping "WinNAT" -ExternalIPAddress 0.0.0.0 -Internal ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (MSFT_NetNatStaticMapping:root/StandardCi...atStaticMapping) [Add-NetNatStaticMapping], CimException
+ FullyQualifiedErrorId : Windows System Error 32,Add-NetNatStaticMapping

Resolution

netsh のポート転送設定をチェック。

1
2
3
4
5
6
7
8
>netsh interface portproxy show all

ipv4 をリッスンする: ipv4 に接続する:

Address Port Address Port
--------------- ---------- --------------- ----------
192.168.11.21 10024 10.100.10.17 22
192.168.11.21 10023 10.100.10.7 22

待ち受けのポートが重複している模様。
なので、どちらかを消せばいい。

今回は netsh 側のポート転送を消去。

1
netsh interface portproxy delete v4tov4 listenport=10024 listenaddress=192.168.11.21

再度、Add-NetNatStaticMapping を実行。

1
2
3
4
5
6
7
8
9
10
11
12
13
PS C:\WINDOWS\system32> Add-NetNatStaticMapping "WinNAT" -ExternalIPAddress 0.0.0.0 -InternalIPAddress 10.100.10.15 -ExternalPort 10024 -Protocol TCP -InternalPort 22


StaticMappingID : 0
NatName : WinNAT
Protocol : TCP
RemoteExternalIPAddressPrefix : 0.0.0.0/0
ExternalIPAddress : 0.0.0.0
ExternalPort : 10024
InternalIPAddress : 10.100.10.15
InternalPort : 22
InternalRoutingDomainId : {00000000-0000-0000-0000-000000000000}
Active : True

今度は通りました。

netshAdd-NetNatStaticMapping も同じ仕組みを使っている?
と思って、IP Helper (iphlpsvc) を停止しても、ポート転送が動いたので、Add-NetNatStaticMapping は別の仕組みを使っている様子。