了解 SOCKS5 协议 RFC
Understanding the SOCKS5 protocol RFC
我正在阅读 SOCKS5 RFC,它有:
CONNECT
In the reply to a CONNECT, BND.PORT contains the port number that the
server assigned to connect to the target host, while BND.ADDR
contains the associated IP address. The supplied BND.ADDR is often
different from the IP address that the client uses to reach the SOCKS
server, since such servers are often multi-homed. It is expected
that the SOCKS server will use DST.ADDR and DST.PORT, and the
client-side source address and port in evaluating the CONNECT
request.
对于这一段的最后一部分,我有两个问题:
- 文档指出SOCKS服务器通常是多宿主的,并且会回复客户端与客户端最初连接的绑定地址和端口不同的绑定地址和端口。这是否意味着客户端连接到的 SOCKS 服务器将连接重定向到另一个 SOCKS 服务器?如果是这样,让客户端感知重定向的 SOCKS 服务器的存在有什么意义?客户端通常会如何处理 SOCKS 服务器回复的绑定地址和端口?
- 文档指出预计SOCKS服务器将使用DST.ADDR和DST.PORT,以及评估CONNECT请求的客户端源地址和端口,评估 CONNECT 请求到底是什么意思?如果我正在实施 SOCKS 服务器,我应该在这个 评估 过程中做什么?
- 没有。这意味着服务器有 2 个(或更多)网络 cards/connections -- 您与 cardA 上的服务器通信,但是当该服务器连接到下游设备时,它使用 cardB。
- 这完全取决于您...也许您想 blacklist/whitelist 某些 clients/servers/ports(例如,只允许来自您所在国家/地区的客户端,或者只允许连接到特定国家/地区)。一个很好的例子是不让客户端连接回自身(?)。只是一个猜测。通常 RFC 很适合说 "MUST, MIGHT, MUST NOT, etc" ..如果它说 "expected",对我来说这听起来像 'might',这基本上意味着“可以,但不必”。
- SOCKS 代理是多宿主的,因为它们通常安装在防火墙等网络边界处。客户端连接到防火墙的内部接口,但传出地址是外部接口。由于某些协议,如 FTP 需要包括外部可见 IP 地址和带内端口(请参阅 FTP 数据传输,即 PORT 和 PASV),它们需要知道这个外部可见 IP 和端口。
- 普通的 socks 代理将连接到客户端想要的地方,即 DST。但是,当配置了上游代理或当防火墙 ACL 说不同时,代理的行为可能会有所不同。
我正在阅读 SOCKS5 RFC,它有:
CONNECT
In the reply to a CONNECT, BND.PORT contains the port number that the server assigned to connect to the target host, while BND.ADDR contains the associated IP address. The supplied BND.ADDR is often different from the IP address that the client uses to reach the SOCKS server, since such servers are often multi-homed. It is expected that the SOCKS server will use DST.ADDR and DST.PORT, and the client-side source address and port in evaluating the CONNECT request.
对于这一段的最后一部分,我有两个问题:
- 文档指出SOCKS服务器通常是多宿主的,并且会回复客户端与客户端最初连接的绑定地址和端口不同的绑定地址和端口。这是否意味着客户端连接到的 SOCKS 服务器将连接重定向到另一个 SOCKS 服务器?如果是这样,让客户端感知重定向的 SOCKS 服务器的存在有什么意义?客户端通常会如何处理 SOCKS 服务器回复的绑定地址和端口?
- 文档指出预计SOCKS服务器将使用DST.ADDR和DST.PORT,以及评估CONNECT请求的客户端源地址和端口,评估 CONNECT 请求到底是什么意思?如果我正在实施 SOCKS 服务器,我应该在这个 评估 过程中做什么?
- 没有。这意味着服务器有 2 个(或更多)网络 cards/connections -- 您与 cardA 上的服务器通信,但是当该服务器连接到下游设备时,它使用 cardB。
- 这完全取决于您...也许您想 blacklist/whitelist 某些 clients/servers/ports(例如,只允许来自您所在国家/地区的客户端,或者只允许连接到特定国家/地区)。一个很好的例子是不让客户端连接回自身(?)。只是一个猜测。通常 RFC 很适合说 "MUST, MIGHT, MUST NOT, etc" ..如果它说 "expected",对我来说这听起来像 'might',这基本上意味着“可以,但不必”。
- SOCKS 代理是多宿主的,因为它们通常安装在防火墙等网络边界处。客户端连接到防火墙的内部接口,但传出地址是外部接口。由于某些协议,如 FTP 需要包括外部可见 IP 地址和带内端口(请参阅 FTP 数据传输,即 PORT 和 PASV),它们需要知道这个外部可见 IP 和端口。
- 普通的 socks 代理将连接到客户端想要的地方,即 DST。但是,当配置了上游代理或当防火墙 ACL 说不同时,代理的行为可能会有所不同。