了解 SOCKS5 协议 RFC

Posted

技术标签:

【中文标题】了解 SOCKS5 协议 RFC【英文标题】:Understanding the SOCKS5 protocol RFC 【发布时间】:2016-04-23 10:08:29 【问题描述】:

我正在阅读 SOCKS5 RFC,它有:

连接

在对 CONNECT 的回复中,BND.PORT 包含连接的端口号 服务器分配连接到目标主机,而 BND.ADDR 包含关联的 IP 地址。提供的 BND.ADDR 通常是 不同于客户端用于访问 SOCKS 的 IP 地址 服务器,因为此类服务器通常是多宿主的。预计 SOCKS 服务器将使用 DST.ADDR 和 DST.PORT,并且 评估 CONNECT 时的客户端源地址和端口 请求

对于本段的最后一部分,我有两个问题:

    文档指出 SOCKS 服务器通常是多宿主的,并且会回复客户端的绑定地址和端口,而不是客户端最初连接的绑定地址和端口。这是否意味着客户端连接的 SOCKS 服务器将连接重定向到另一个 SOCKS 服务器?如果是这样,让客户端感知重定向的 SOCKS 服务器的存在有什么意义?客户端通常会如何处理 SOCKS 服务器回复的绑定地址和端口? 文档中说预计SOCKS服务器会使用DST.ADDR和DST.PORT,以及客户端源地址和端口来评估CONNECT请求,到底是什么意思通过评估 CONNECT 请求?如果我正在实施 SOCKS 服务器,我应该在这个评估过程中做什么?

【问题讨论】:

【参考方案1】:
    SOCKS 代理是多宿主的,因为它们通常安装在防火墙等网络边界处。客户端连接到防火墙的内部接口,但传出地址是外部地址。由于某些协议(如 FTP)需要包含外部可见 IP 地址和带内端口(请参阅 FTP 数据传输,即 PORT 和 PASV),因此它们需要知道这个外部可见 IP 和端口。 普通的 socks 代理将连接到客户端想要的位置,即 DST。但是,当配置了上游代理或防火墙 ACL 声明不同时,代理的行为可能会有所不同。

【讨论】:

【参考方案2】:
    没有。这意味着服务器有 2 个(或更多)网卡/连接 - 您在 cardA 上与服务器通信,但当该服务器连接到下游设备时,它使用 cardB。 这完全取决于您...也许您想将某些客户端/服务器/端口列入黑名单/白名单(例如,仅允许来自您所在国家/地区的客户端,或仅允许连接到特定国家/地区)。很好的例子是不让客户端连接回自身(?)。只是一个猜测。通常 RFC 很擅长说“必须、可能、不得等”……如果它说“预期”,对我来说这听起来像是“可能”,基本上意味着“可以,但不必这样做”。

【讨论】:

以上是关于了解 SOCKS5 协议 RFC的主要内容,如果未能解决你的问题,请参考以下文章

SOCKS5 绑定是持久的还是一次性的?

自己动手开发Socks5代理服务器

为啥 SOCKS5 需要通过 UDP 中继 UDP?

HTTP1.1协议中文版-RFC2616

TCP协议

关于SOCKS5中UDP请求的问题