ITADN
rofl0r/microsocks
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

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 使用最小的安全线程栈大小以最小化整体内存 使用量。