因为有透明代理的需求,但又不想折腾路由器全局代理,于是调查了一下 sniproxy (C语言实现的那个) 的方案。sniproxy 本身不支持走 SOCKS 代理,需要套一层 proxychains,然后由于 sniproxy 是用 UDP 解析域名,proxychains 又不支持 UDP 代理,于是再加上 https-dns-proxy 走代理使用 DoH 解析 DNS。最终方案是基于Alpine Linux,可以运行在 Docker 或 WSL1 中。WSL2 未测试,建议使用 WSL1,因为可以和主机共享网络。
GitHub 地址 https://github.com/ysc3839/sniproxy-socks
Docker Hub 地址 https://hub.docker.com/r/ysc3839/sniproxy-socks
在 WSL 中使用,需要手动下载 releases 中的 sniproxy-socks-rootfs.tar.gz,然后在 cmd 中执行:
mkdir %localappdata%\wsl\sniproxy-socks
wsl --import sniproxy-socks %localappdata%\wsl\sniproxy-socks sniproxy-socks-rootfs.tar.gz
其中 sniproxy-socks 是 WSL 的 distro name (或者叫容器名更加贴切),%localappdata%\wsl\sniproxy-socks 是安装位置,这两个选项都可以随意设置。
然后执行 wsl -d sniproxy-socks /entrypoint.sh 会自动在后台运行。
启动后在文件管理器中打开 \\wsl$\sniproxy-socks 可修改配置文件。
执行 wsl -t sniproxy-socks 停止运行。
执行 wsl --unregister sniproxy-socks 卸载。
后续会考虑写个脚本自动下载并安装到 WSL 中。(已取消)
要登录时自动运行,可以运行 shell:startup 打开“启动”文件夹,新建 start-sniproxy.jse 并写入:
new ActiveXObject('WScript.Shell').Run('wsl -d sniproxy-socks /entrypoint.sh',0)
GitHub 地址 https://github.com/ysc3839/sniproxy-socks
Docker Hub 地址 https://hub.docker.com/r/ysc3839/sniproxy-socks
在 WSL 中使用,需要手动下载 releases 中的 sniproxy-socks-rootfs.tar.gz,然后在 cmd 中执行:
mkdir %localappdata%\wsl\sniproxy-socks
wsl --import sniproxy-socks %localappdata%\wsl\sniproxy-socks sniproxy-socks-rootfs.tar.gz
其中 sniproxy-socks 是 WSL 的 distro name (或者叫容器名更加贴切),%localappdata%\wsl\sniproxy-socks 是安装位置,这两个选项都可以随意设置。
然后执行 wsl -d sniproxy-socks /entrypoint.sh 会自动在后台运行。
启动后在文件管理器中打开 \\wsl$\sniproxy-socks 可修改配置文件。
执行 wsl -t sniproxy-socks 停止运行。
执行 wsl --unregister sniproxy-socks 卸载。
后续会考虑写个脚本自动下载并安装到 WSL 中。(已取消)
要登录时自动运行,可以运行 shell:startup 打开“启动”文件夹,新建 start-sniproxy.jse 并写入:
new ActiveXObject('WScript.Shell').Run('wsl -d sniproxy-socks /entrypoint.sh',0)