MicroSocks - 多线程、小巧、高效的 SOCKS5 服务器。
一个 SOCKS5 服务,你可以在远程机器上运行它,以便通过它们进行连接隧道, 如果由于某种原因 SSH 无法满足你的需求。
它非常轻量级,对资源的占用也非常少:
对于每个客户端,都会生成一个具有较小栈大小的线程。 主进程基本上不消耗任何资源。
唯一的限制是文件描述符的数量和 RAM。
它的设计也很健壮:通过简单地拒绝新连接来优雅地处理资源耗尽, 而不是像如今大多数程序那样调用 abort()。
另一个优点是易用性:无需配置文件,一切都可以通过命令行完成, 甚至快速设置都不需要任何参数。
历史
这是 "rocksocks5" 的继任者,其编写时有着不同的目标:
- 优先使用标准 libc 函数,而非自研函数
- 没有人为限制
- 不追求最小的二进制大小,而是追求最小的源代码大小, 以及最大的可读性、可重用性和可扩展性。
因此,ipv4、dns 和 ipv6 开箱即用, 并且可以使用相同的代码,而 rocksocks5 有几个编译时 定义,以便在仅启用 ipv4 支持时,将生成的二进制大小降低到极端值, 例如静态链接时为 10 KB。
不过,如果针对体积进行优化,这个 程序在静态链接 musl libc 后甚至不到 50 KB。即使在最便宜的路由器上也能轻松使用。
命令行选项
microsocks -1 -q -i listenip -p port -u user -P passw -b bindaddr -w wl
所有参数均为可选。 默认情况下 listenip 为 0.0.0.0,port 为 1080。
-
选项 -q 禁用日志记录。
-
选项 -b 指定出站连接绑定的 IP
-
选项 -w 允许指定以逗号分隔的 IP 地址白名单, 这些地址可以无需用户/密码认证即可使用代理。 例如 -w 127.0.0.1,192.168.1.1.1,::1 或仅 -w 10.0.0.1 若要允许仅访问这些 IP,请选择一个难以猜测的用户/密码组合。
-
选项 -1 启用 auth_once 模式:一旦特定 IP 地址 使用用户/密码成功认证,它将被添加到白名单 并且可以无需认证使用代理。 这对于像 firefox 这样不支持 用户/密码认证的程序非常有用。要使其工作,你基本上需要使用 另一个支持该功能的程序进行一次连接,然后就可以使用 firefox 了。 例如,使用 curl 进行一次认证:
curl --socks5 user:password@listenip:port anyurl
支持的 SOCKS5 功能
- 认证:无、密码、一次性
- IPv4、IPv6、DNS
- TCP(目前不支持 UDP)
故障排除
如果你遇到段错误,请尝试在 sockssrv.c 中
针对你的平台将 THREAD_STACK_SIZE 以 4KB 为步长逐步增加。
如果这解决了你的问题,请提交一个 pull request。
microsocks 使用最小的安全线程栈大小以最小化整体内存 使用量。