在我们的简单代理服务器中, 用户请求的所有流量都会直接从服务器所在的机器发出:
+---------+ +--------------+ +----------+
| User ->-+---+-> Proxy 1 ->-+---+-> Server |
+---------+ +--------------+ +----------+
你也可以让流量经过另一台 socks5 代理服务器:
+---------+ +--------------+ +--------------+ +----------+
| User ->-+---+-> Proxy 1 ->-+---+-> Proxy 2 ->-+---+-> Server |
+---------+ +--------------+ +--------------+ +----------+
为此, 你需要在 Proxy 1 上实现一个 socks5 代理客户端。这个客户端会将 socks5 请求重新包装成 socks5 请求并发送给 Proxy 2。
你可以建立以下的网络拓扑结构来确认流量确实经过了两台代理服务器:
+-----+ +-----+ +-----+ +-----+
| ns1 |---| ns2 |---| ns3 |---| ns4 |
+-----+ +-----+ +-----+ +-----+
一条连线表示一条虚拟网线 (veth)。例如, ns2 与 ns4 并不直接相连, 无法从 ns2 ping 通 ns4。
在 ns4 上启动一个服务器 (可以使用 nsutils 中自带的 20080 端口上的 ipserv); 在 ns3 上启动一个正常的代理服务器; 在 ns2 上启动一个代理服务器, 配置为 ns3 上代理的客户端; 最后在 ns1 上通过 ns2 上的代理服务器访问 ns4 的服务即可。