諸般の事情によりWSLから外への通信をWSL以外の何かしらを経由して通信するという要件が発生した
WSL以外の何かしらにプロキシを設置する
Virtualboxでプロキシ用VMを起動するという選択肢が提示されたがそのためだけにVirtualBox起動するのはな…ということで、結局GitBashでpproxy
を起動することにした
Windows側
Pythonのインストール
参考:Windows PC へのPython3 導入手順 #Python - Qiita
環境変数PATHにも追加チェックボックにチェックした
これでWindows側でpy.exe
が使えるようになるらしい
pproxyのインストール
GitBashを入れているのでGitBashから下記実行した
$ py -m pip install pproxy
pproxyの実行
$ py -m pproxy
Serving on :8080 by http,socks4,socks5
これだけでOKっぽい、簡単
カスタマイズしようと思えばいろいろできるみたいだが今回は不要だったのでこのまま
WSL2側
ホスト(Windows)側IPの特定
まずWindows側で立てたプロキシがどこかを判断する必要がある
$ ip route | grep 'default via' | awk '{print $3}'
172.1.1.1
$ ip route | grep 'default via' | grep --color=no -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
172.1.1.1
どちらかが良さそう
このIPがWSLから見えるホスト側のIPなのでこの場合172.1.1.1:8080
をプロキシとして指定する
httpでアクセス
$ curl -x http://172.1.1.1:8080 https://{proxyが必要なアクセス先URL}/
ssh設定
プロキシを通したいホストに対して下記設定を追加
- ssh/config
ProxyCommand nc -X 5 -x 172.1.1.1:8080 %h %p
SOCKS5プロトコルでプロキシ通す設定
SOCKS4,5の違い
そもそもSOCKS4,5は
Socket Secure version 4,5の略らしい
SOCKS5とSOCKS4はともにSOCKSプロトコルですが、SOCKS4は「UDP接続には利用できない」「プロキシ側に名前解決させることができない」「わずかな認証機能しかサポートしていない」という問題を抱えているのに対し、SOCKS5ではそれらの問題が解決されています。
基本的にSOCKS5を使ったほうが良さそう
HTTPプロキシとSOCKSプロキシの違い
HTTPプロキシはHTTPおよび HTTPSウェブページのみで動作するのに対し、SOCKS5プロキシはあらゆるトラフィックに対応しています。
HTTPプロキシとは、通常、特定のプロトコル用に設計された高レベルのプロキシを指します。これにより接続速度は向上しますが、SOCKSプロキシほど柔軟性や安全性は高くありません。SOCKSプロキシはHTTPプロキシよりも低レベルで動作するため、あらゆるプログラムやプロトコル、あらゆるトラフィックを制限なく扱うことができます。