質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

8386閲覧

netsh portproxy が 特定の条件下のみで動かない

takashiaihara

総合スコア5

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2020/06/18 11:04

お世話になります。

WSL2向けに 22 ポートのフォワードをするため、下記のps1ファイルを作りました。

powershell

1$IPAddress = (Get-NetIPAddress | Where-Object {$_.SuffixOrigin -eq "Dhcp"} | Select-Object 'IPAddress').IPAddress 2$WSLIPAddress = wsl -d Ubuntu-18.04 exec hostname -I 3 4netsh.exe interface portproxy delete v4tov4 listenport=22 5netsh.exe interface portproxy add v4tov4 listenport=22 listenaddress=$IPAddress connectaddress=$WSLIPAddress

最上位特権で実行し、ルールが追加されていることも確認しました。

cmd

1C:\WINDOWS\system32>netsh.exe interface portproxy show all 2 3ipv4 をリッスンする: ipv4 に接続する: 4 5Address Port Address Port 6--------------- ---------- --------------- ---------- 7192.168.1.121 22 172.21.119.236 22

この状態でssh 192.168.1.121 すると弾かれました。

cmd

1C:\WINDOWS\system32>ssh 192.168.1.121 2ssh: connect to host 192.168.1.121 port 22: Connection refused

一度ルールを削除したあと、変数を利用せずIP決め打ちをするとフォワードされます。

cmd

1C:\WINDOWS\system32>netsh.exe interface portproxy reset 2 3C:\WINDOWS\system32>netsh.exe interface portproxy add v4tov4 listenport=22 listenaddress=192.168.1.121 connectaddress=172.21.119.236 4 5C:\WINDOWS\system32>netsh.exe interface portproxy show all 6 7Listen on ipv4: Connect to ipv4: 8 9Address Port Address Port 10--------------- ---------- --------------- ---------- 11192.168.1.121 22 172.21.119.236 22

※ フィンガープリントが変わったみたいですが、SSHのフォワードはできています。

cmd

1C:\WINDOWS\system32>ssh 192.168.1.121 2@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ 4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

netsh の実行に変数は利用できないんでしょうか?
もしくは、powershellの変数の特性が関係しているんでしょうか?(例えば、型のような・・・)

ハマり続けて困っています。
お力添えよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dodox86

2020/06/19 07:51

> $WSLIPAddress = wsl -d Ubuntu-18.04 exec hostname -I ここですべてのIPアドレスを取得してしまっているからダメなのではないですか? Write-Host $WSLIPAddress と実行して、$WSLIPAddress が手動決め打ちで動くときの「172.21.119.236」がセットされていることを確認してみてください。
takashiaihara

2020/06/19 09:55 編集

ありがとうございます。 ご連絡の通りやってみましたところ、一応は1つのみ入っているようでした。 ※ 一度再起動したので、IPは変わっています。 ``` PS C:\WINDOWS\system32> $WSLIPAddress = wsl -d Ubuntu-18.04 exec hostname -I PS C:\WINDOWS\system32> Write-Host $WSLIPAddress 172.27.206.65 ```
dodox86

2020/06/19 11:00

> 一応は1つのみ入っているようでした。 でしたら、大丈夫そうですね。回答ではないのでコメントのみで恐縮ですが、 (1). *.ps1スクリプトで実行はなく、スクリプトの内容を手打ちで実行してもダメか。 (2) 設定後、別途起動したコマンドプロンプトで試すのではなく、そのまま同じPowerShellのシェル上で実行してもダメか。 netshコマンドなのでローカルPC全体に効いてそうなものですが、一部でそのときのプロセス空間にしか効かない、などがあるのかもしれません。 > netsh の実行に変数は利用できないんでしょうか? netshの実行には単にコマンドラインオプションの文字列に展開されるだけのはずなので、普通に考えると大丈夫なはずです。 > もしくは、powershellの変数の特性が関係しているんでしょうか?(例えば、型のような・・・) 文字エンコードの問題はあるかもしれませんが、コマンドプロンプトでルールが追加されているようですので、これも普通に考えると大丈夫なはずです。 普通に考えて大丈夫はなず、と言うだけで、質問者であるtakashiaiharaさんが危惧されているように特殊な条件下でダメな可能性があるのでしょうけど。
guest

回答2

0

私も再現できたので調べてみたところ、$WSLIPAddressの最後に空白文字が入っていました。消してみたところうまくいきました。

PowerShell

1$WSLIPAddress = (wsl -d Ubuntu-18.04 exec hostname -I).TrimEnd()

あとこちらはニーズに合うかわかりませんが、もともとWSL2が127.0.0.1を転送してくれてますので、127.0.0.1に転送すればWSL側のIPアドレスを使わなくてもよくなるかもしれません。

cmd

1netsh.exe interface portproxy add v4tov4 listenport=22 listenaddress=$IPAddress connectaddress=127.0.0.1

投稿2020/07/09 12:27

編集2020/07/10 01:34
vajzkrgf

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takashiaihara

2020/07/13 03:19

動作確認できました。 非常に助かりました。ありがとうございます。 スペースなども普通に指定できてしまう netsh 、器ひろすぎでした。 バリデーションの必要性がよく分かりました。
guest

0

ベストアンサー

問題解決への直接の回答ではありません:

質問者さんと同じ環境ではないのですが、なるべく同じような状況で試したところではsshのフォワードができました。PowerShellの問題ではなさそうにも思いましたので、参考情報のひとつとして回答させていただきます。

こちらで試した状況として、192.168.11.103 は自Windows10マシン、192.168.1.6 はリモートのSSHサーバーです。ポートフォワーディングで、192.168.11.103:22にSSH接続することで192.168.1.6:22に接続~ログインするかたちで試します。また、WSL2ではなく、WSLです。

まず、普通にコマンドプロンプトを開き、自PC192.168.11.103へSSH接続してもできないことを確認しておきます。

CMD

1C:\work>ssh pi@192.168.11.103 2ssh: connect to host 192.168.11.103 port 22: Connection refused 3 4C:\work>

次にPowerShellを「管理者」で開き、あらかじめ作成しておいたPowerShellスクリプト「C:\work\t3.ps1」を実行します。尚、wslコマンドで実行する /tmp/t3.shはいわばダミーのシェルスクリプトで、質問者さんがWSL2のUbuntu上でhostname -Iで実行して得られるWSL2のIPアドレスの代わりにリモートのSSHサーバーのIPアドレス192.168.1.6を出力しているものです。

PowerShell

1Windows PowerShell 2Copyright (C) Microsoft Corporation. All rights reserved. 3 4新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6 5 6PS C:\WINDOWS\system32> Get-Content C:\work\t3.ps1 7Write-Host "t3.ps1: start." 8Write-Host "--- step#1" 9$IPAddress = (Get-NetIPAddress |Where-Object {$_.SuffixOrigin -eq "Dhcp"} |Select-Object 'IPAddress').IPAddress 10Write-Host $IPAddress 11 12Write-Host "--- step#2" 13$WSLIPAddress = wsl -d Ubuntu exec /tmp/t3.sh 14Write-Host $WSLIPAddress 15 16Write-Host "--- step#3" 17netsh.exe interface portproxy delete v4tov4 listenport=22 18netsh.exe interface portproxy reset 19 20Write-Host "--- step#4" 21netsh.exe interface portproxy add v4tov4 listenport=22 listenaddress=$IPAddress connectaddress=$WSLIPAddress 22 23Write-Host "--- step#5" 24netsh.exe interface portproxy show all 25 26Write-Host "t3.ps1: done." 27PS C:\WINDOWS\system32> powershell -ExecutionPolicy RemoteSigned -File C:\work\t3.ps1 28t3.ps1: start. 29--- step#1 30192.168.11.103 31--- step#2 32192.168.1.6 33--- step#3 34指定されたファイルが見つかりません。 35 36 37 38--- step#4 39 40--- step#5 41 42ipv4 をリッスンする: ipv4 に接続する: 43 44Address Port Address Port 45--------------- ---------- --------------- ---------- 46192.168.11.103 22 192.168.1.6 22 47 48t3.ps1: done. 49PS C:\WINDOWS\system32>

問題なくPowerShellスクリプトの実行が完了しました。で、開いておいたコマンドプロンプトから、再度、自PC(192.168.11.103)向けにssh接続します。リモートのSSHサーバー(192.168.1.6)にフォワードされ、ログインできていることが分かります。

CMD

1C:\work>ssh pi@192.168.11.103 2pi@192.168.11.103's password: 3Linux raspi-host1 4.19.118-v7+ #1311 SMP Mon Apr 27 14:21:24 BST 2020 armv7l 4 5The programs included with the Debian GNU/Linux system are free software; 6the exact distribution terms for each program are described in the 7individual files in /usr/share/doc/*/copyright. 8 9Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent 10permitted by applicable law. 11Last login: Sat Jun 20 10:00:19 2020 from 192.168.1.104 12 13pi@raspi-host1:~ $ ifconfig 14enxb827eb21e032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 15 inet 192.168.1.6 netmask 255.255.255.0 broadcast 192.168.1.255 16 inet6 fe80::3da6:f385:3c26:d702 prefixlen 64 scopeid 0x20<link> 17 inet6 240d:1a:31:5f00:d023:8355:1aa5:36f3 prefixlen 64 scopeid 0x0<global> 18 ether b8:27:eb:21:e0:32 txqueuelen 1000 (イーサネット) 19 RX packets 3180 bytes 281112 (274.5 KiB) 20 RX errors 0 dropped 0 overruns 0 frame 0 21 TX packets 1427 bytes 177370 (173.2 KiB) 22 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 23 24lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 25 inet 127.0.0.1 netmask 255.0.0.0 26 inet6 ::1 prefixlen 128 scopeid 0x10<host> 27 loop txqueuelen 1000 (ローカルループバック) 28 RX packets 149 bytes 8924 (8.7 KiB) 29 RX errors 0 dropped 0 overruns 0 frame 0 30 TX packets 149 bytes 8924 (8.7 KiB) 31 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 32 33pi@raspi-host1:~ $

以上、ご参考まで。

投稿2020/06/20 01:34

dodox86

総合スコア9267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takashiaihara

2020/06/21 01:32

解決に向けた情報のご提供、まことにありがとうございます。 また、テストまで行っていただいて感謝しています。 おっしゃるとおり、環境によるものの可能性が高そうです。 解決まで至りましたら、こちらのページに追記したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問