我从理论上了解代理服务器的工作原理,但实践才是我最擅长的。
我需要在与我的管理 IP 相同的网络中配置 SOCKS 代理,以便它对用户保持抽象。我有一个 vCenter 集群,可以在其上部署任何推荐的操作系统,但为了简化,这里是设置:
- 存储系统管理 IP = 10.244.244.15
- SUSE11虚拟机IP = 10.244.244.10
- Windows XP IP = 10.244.244.5
在 SUSE 系统上,我运行了ssh -ND 1080 <user>@<storage mgmt ip>
,但是并没有实现端到端连接。
tcpdump
我当时正在同一端口上运行并看到一些流量尝试:
17:42:26.669953 IP 10.x.x.x.54214 > x.x.com.socks: S 3287828135:3287828135(0) win 5840 <mss 1460,sackOK,timestamp 6708230 0,nop,wscale 6>
17:42:26.669968 IP x.x.com.socks > 10.x.x.x.54214: R 0:0(0) ack 3287828136 win 0
总体问题:
- 不太重要的是,我上面做了什么?
- 更重要的是,如何在这个环境中配置 SOCKS 代理?
答案1
由于 SSHD 配置中的 GatewayPorts 设置,SSH 连接可能仅监听环回接口 (127.0.0.1)。如果 GatewayPorts 设置为是,则您的命令将起作用。
netstat -an | grep LISTEN
将显示它是否正在监听公共接口。你可以使用以下命令强制它监听公共接口
ssh -ND <ip address>:<port> <user>:<host>
但只有 GatewayPorts 允许您这样做时才可以。
GatewayPorts
Specifies whether remote hosts are allowed to connect to ports
forwarded for the client. By default, sshd binds remote port
forwardings to the loopback address. This prevents other remote
hosts from connecting to forwarded ports. GatewayPorts can be
used to specify that sshd should allow remote port forwardings to
bind to non-loopback addresses, thus allowing other hosts to con-
nect. The argument may be "no" to force remote port forwardings
to be available to the local host only, "yes" to force remote
port forwardings to bind to the wildcard address, or
"clientspecified" to allow the client to select the address to
which the forwarding is bound. The default is "no".
我猜 GatewayPorts 被设置为默认的 no。将其更改为 yes (在 中/etc/ssh/sshd_config
),然后您的 ssh 命令应该可以正常工作,但为了以防万一,您可以使用接口的 ip 地址来具体说明。
注意:除此之外,您还应检查是否有 iptables 规则阻止入站连接。
类似这样的 ssh 代理可以工作,但速度可能很慢(加密开销)。你可能需要查看专用的 socks 代理,例如袜子。