2018年6月16日土曜日

Windowsでポートフォワード

事情により直接ネットワークが繋がっていない別セグメントにあるOracleに接続させる要件がありあれこれ調べてみた。

幸いにもそれぞれのセグメントに繋がっているWindowsサーバがあり活用できないかとポートフォワードあたりをキーワードに検索するとSSHを使う方法がかなりヒットする。

ただ今回は通信を暗号化するする必要もなくただのルーターの様に動作してくれれば十分、そして見つけたのがnetshコマンドを利用したportproxy


  • クライアントアドレス:192.168.0.1
  • Windowsサーバアドレス:192.168.0.2、10.10.0.1
  • Windowsポートフォワード受付ポート番号:61521
  • Oracleサーバアドレス:10.10.0.2
  • Oracleリスナーポート番号:1521


(ポートフォワード登録)
netsh interface port proxy add v4tov4 listenport=61521 listenaddr=192.168.0.2 connectport=1521 connectaddress=10.10.0.2

(登録確認)
nets interface port proxy show all

(ポートフォワード削除)
nets interface portproxy delete v4tov4 listenport=61521 listenaddress=192.168.0.2


ポートフォワード設定した状態でクライアントからsqlplusコマンドでWindowsサーバのアドレス(192.168.0.2)の61521ポートに対して接続を行うとOracleサーバ(10.10.0.2)の1521ポートに接続された。

なんと便利なことか。

ただし、OracleがRAC構成の場合でSCAN VIPアドレスに繋げようとすると接続が失敗するので注意が必要。その場合はRACのどこかのノードのローカルリスナーに接続させてしまうのがいいかのかも(※可用性は低下)