scp/sftpがWSL2+Transix(DS-Lite)の組み合わせで動かない
なぜか、WSL2とTransixを組み合わせるとscp/sftpコマンドが動かないという話、検索を繰り返しても答えが見つかりませんでした。
追)舌の根も乾かないうちに解決策が見つかりました(ページ下部参照)
PPPoE | Transix | |
WSL1 | 〇 | 〇 |
WSL2 | 〇 | × |
VPSの環境をローカルで構築しようと思い、CentOS7をWSL2環境にインストールしたとき、sshコマンドは動くのにscp/sftpコマンドが動かないことで発覚。
最初にインストールしたUbuntu-18.04はWSL1なのですがscp/sftpはちゃんと動く。しかしWSL2なUbuntu-20.04やCentOS7では動かない。それぞれの環境に問題が潜んでいるのではと調べたのですが行き詰りました。
scp/sftpはVPSからデータをコピーするのに使おうとしましたが、WSL1あるいはWindows上のsftpでWindows上にダウンロードし、それをcpあるいはVSCodeやエクスプローラーでどうにもでもなるのですが...
ふと、MTUが違うとどうなるのだろうとLANケーブルの挿し口を、Transix(DS-Lite)を実行しているWi-FiルーターからHGWに変えてみたところ動くので、もしかしたらWSLバージョン違いもと表にしたのが上のもの。
WSL1/2の違いはUbuntuだけでなくCentOS7でも試しましたがOSに関わらずです。
WSLバージョン変更を行っても同じなので、動くUbuntu-18.04をWSL2へと変換してもだめです。
それではと、PPPoEのMTU 1454に変更してみましたが変わらず。
結局、ネットワーク環境とWSLバージョンが組み合わさったときに生じる謎問題です。
sftp -vvvのときのログ終端は次の通り。正常時ログと比べるとあと少しでプロンプト表示なのですが。
debug1: Sending subsystem: sftp
debug2: channel 0: request subsystem confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
単純にWSL1/2の違いだけであればMicrosoftの環境に何か...と思うし、PPPoE/Transixの違いだけならMTUかルーターの影響かと考えるのですが、重なった時だけなので ?が三つ浮かんでも足りません。
#MAP-Eでは分かりません。mioひかりでHGW有なのでTransix(DS-Lite)とIPv4 PPPoEが同時に使えます。
解決!
scp/sftpコマンドの問題が解決しました。私の環境ではsshコマンドが正常だったので気付かなかったのですが、sshとIPoEの組み合わせで同様の状況があるようです。
両方とも解決策は .ssh/configに「IPQoS 0」を追加なのですが、問題の焦点が前者がIPv4のToS(Type of Service)、後者がIPv6 DSCP値。IPQoSは両者に影響を与えるらしいのでどちらでもよいのですが。。
私の場合、sshコマンドは問題なくて、WSL1環境でも問題ないという点が両者と異なるので、本当の原因は何っ? 解決したのでよいのだけど...
更に追記)
更に近い質問を見つけました。でもVPSはIPv6でDNS登録していないし、sftp -vで見てもIPv4で接続に行っているんだけどね。
ストライクな内容(中国語ページ)
https://robincn.com/wsl/ssh-hangs-or-freezes-indefinitely/
NATの影響とすると、WSL2で実装されたHyper-VのNATかもね。(TransixのキャリアグレードNATも存在しますが)
ToSの値ですが、16 (low delay) や 8 (high throughput) があるようです。
https://nxmnpg.lemoda.net/ja/8/traceroute
https://www.ibm.com/support/knowledgecenter/ja/ssw_aix_72/t_commands/traceroute.html
https://ja.wikipedia.org/wiki/Type_of_Service
IPQoSを変えて試すと 0x08 でsftpがスタックします。sshは ^c が効かなくなります。影響を受けるのはTransix+WSL2の組み合わせのみです。
フォローしませんか?
コメント