Windowsでポート転送を設定する方法

Windowsでポートフォワーディングを設定するのは簡単そうに思えるかもしれませんが、実際には細かい設定がいくつもあるので、少々戸惑うかもしれません。サービスをインターネットに公開したい場合や、ポート間のローカルトラフィックをリダイレクトしたい場合など、Windowsに組み込まれているツールは便利な選択肢です。netsh interface portproxyコマンドは、XPから最新のWindows 11まで、ほぼすべてのバージョンのWindowsで動作するため、よく利用されます。特に、本格的なサーバー構成やサードパーティ製アプリを使う準備ができていない場合、これは非常に便利です。

最も頭を悩ませる点の一つは、すべての前提条件が満たされていることを確認することです。例えば、IP Helperサービスが実行中であること、IPv6 サポートが有効になっていることなどです。これらがないと、Portproxy はただ黙ってあなたを睨みつけるだけかもしれません。また、これらのルールは再起動後も維持されるので、設定して忘れても大丈夫です…少なくとも、再起動後も設定が維持されることは間違いありません。

Netsh Portproxy を使用して Windows でポート転送を有効にする方法は?

基本的なポート転送ルールを作成する方法

  • 管理者権限でコマンドプロンプトを開きます。昇格された権限がないとコマンドは実行されません。
  • 使用したいポートが他のアプリで使用されていないことを確認してください。 を実行してくださいnetstat -na | find "3340"。リストにない場合は問題ありません。PowerShellの でも確認できますTest-NetConnection -ComputerName localhost -Port 3340
  • IP Helperサービスが実行されていることを確認してください。スタートメニューで「サービス」を検索し、 IP Helperを見つけて、必要に応じて起動してください。または、PowerShellで次のコマンドを実行してくださいGet-Service iphlpsvc
  • ローカルリダイレクトを行う場合は、現在のIPアドレスを確認してください。PowerShellを開いて次のコマンドを実行しますipconfig。そのIPアドレスを次のコマンドで使用します。
  • 次に、次のようにポート転送ルールを作成します。
netsh interface portproxy add v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3389 connectaddress=10.1.1.110

10.1.1.110 を実際のIPアドレスに置き換えてください。このコマンドは、ポート3340への受信トラフィックを同じローカルIPのポート3389にリダイレクトします。簡単ですが、リスンポートは他のサービスと競合しないように注意してください。

ルールがアクティブであることを確認する方法

  • 実行: netstat -ano | findstr :3340— ポートがリッスンしていることが確認できれば成功です。そうでない場合は、iphlpsvcが実行されていること、およびネットワーク アダプターで IPv6 サポートが有効になっていることを確認してください (アダプター設定で確認してください)。

セットアップ後に期待できること

このルールはレジストリに保存され、再起動後も有効なままです。しかし、ルールが消えてしまった場合は、サーバーで何らかの奇妙なクリーンアップスクリプトが実行されているか、ルールが正しく設定されていない可能性があります。ある環境では、Server 2012 R2で再起動すると一部のルールがクリアされたため、タスクスケジューラを使って起動時にこのコマンドを実行するバッチスクリプトを作成しました。あまりエレガントではありませんが、うまく機能しています。

Windows でポート転送モードのファイアウォールルールを構成する

リスナーポートをアクセス可能にする

  • ポート3340への着信接続を許可するには、ファイアウォールルールが必要です。これはコマンドラインから設定できます。
netsh advfirewall firewall add rule name="forwarded_RDPport_3340" protocol=TCP dir=in localip=10.1.1.110 localport=3340 action=allow

または、PowerShell を好む場合:

New-NetFirewallRule -DisplayName "forwarder_RDP_3340" -Direction Inbound -Protocol TCP -LocalPort 3340 -Action Allow

ポートを必ず開いてください。開いていないと、リモートクライアントは転送先のサービスにアクセスできなくなります。このルールを後で削除する場合は、以下のコマンドを実行してください。

netsh advfirewall firewall del rule name="forwarded_RDPport_3340"

または

Remove-NetFirewallRule -Name "forwarder_RDP_3340"

ポートプロキシルールの管理とトラブルシューティング

現在のルールをリストする方法

  • 実行するnetsh interface portproxy show allと、設定されたすべてのルールが表示されます。生のダンプが必要な場合は、以下を試してくださいnetsh interface portproxy dump
  • 特に一部のサーバーでは、再起動後にルールが消えてしまうことがあります。これを防ぐには、netshコマンドを起動スクリプトまたはスケジュールされたタスクに追加すると効果的です。

ルールを変更または削除する方法

  • 既存のルールを更新するには、次を使用します。 netsh interface portproxy set v4tov4 listenport=3340 listenaddress=10.1.1.110 connectport=3390 connectaddress=10.1.1.110
  • ルールを削除するには、次のコマンドを実行します。 netsh interface portproxy delete v4tov4 listenport=3340 listenaddress=10.1.1.110
  • すべてのルールを一度に消去するには、次のようにしますnetsh interface portproxy reset。ただし、これによりすべてが消去されることに注意してください。

追加情報: リモートIPまたは他のネットワークへの転送

トラフィックを別のマシンにリダイレクトしたい場合は、connectaddress をリモート IP に変更するだけです。

netsh interface portproxy add v4tov4 listenport=3389 listenaddress=0.0.0.0 connectport=3389 connectaddress=192.168.100.101

これにより、マシンはリレーのような動作をするようになります。ただし、PortproxyはUDPをサポートしておらず、送信元IPを区別できないため、すべての受信トラフィックがあなたのホストから送信されているように見えます。より高度な転送や送信元を考慮した転送を行うには、ファイアウォールデバイスやHyper-V NATルールを検討する必要があります。

Hyper-V 環境では、PowerShell コマンドを使って NAT とポート転送ルールを設定することもできますが、これはまた別の話です。スイッチを作成し、静的 IP を設定し、そして.を使用する必要がありますAdd-NetNatStaticMapping

どのようなアプローチを選ぶにしても、ポートフォワーディングの設定はそれほど複雑ではありませんが、ポートの競合、サービスのステータス、ファイアウォールルールといった細かい点に注意を払う必要があることを覚えておいてください。それでも問題が解決しない場合は、ネットワークインターフェースを確認し、必要なサービスがすべて実行されていることを確認することで、通常は問題が解決します。

うまくいけば、これで数時間の試行錯誤が省かれ、ポート転送が簡単に機能するようになります。

まとめ

  • 新しいルールを作成する前に、ポートが使用されていないことを確認してください。
  • IP Helper サービスが実行されていることを確認してください。
  • netsh interface portproxy add転送を設定するために使用します。
  • Windows ファイアウォールで必要なポートを開きます。
  • ルールをリストしnetsh interface portproxy show all、必要に応じて管理します。

まとめ

Windowsの組み込みツールを使ったポートフォワーディングの設定は完璧ではありませんが、非常に便利で、すべてのエディションで動作します。サービス、ポート、ファイアウォールルールに注意するだけで、トラフィックを必要な場所にリダイレクトできるはずです。それでも問題が解決しない場合は、IPアドレスを再確認し、再起動してルールが維持されているかどうかを確認してください。少しの忍耐とコマンドラインの調整が、ネットワークの不具合の解決に大きく役立つこともあります。そして、これで1つの設定がスムーズに動作するようになったら、それはそれで良いことですよね?