我正在尝试使用 SSH 将一个站点中的服务器配置为另一个站点中多个服务器的代理。该服务器在其本地网络中有一个物理接口:
eth0 10.1.1.10
该服务器有多个虚拟接口创建如下:
server$ ifconfig eth0:0 10.1.1.200 netmask 255.255.255.128 broadcast 10.1.1.255
我已经验证,在本地网络中,通过将侦听器绑定到两者,此虚拟接口与实际接口不同。这可以通过在以下位置启用 ip 转发来实现/etc/sysctl.d/01-ip_forwarding.conf
:net.ipv4.ip_forward = 1
举个例子,这是可行的,生成两个不同的文件:
client$ curl 10.1.1.10 > 10.txt
client$ curl 10.1.1.200 > 200.txt
我已在以下位置启用网关端口/etc/ssh/sshd_config
:GatewayPorts yes
我从远程服务器运行此命令:
remote$ ssh -N -R 10.1.1.200:443:remote:443 user@server
然后我使用 netstat 检查监听端口:
server$ nestat -tln
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp6 0 0 :::443 :::* LISTEN
(我删除了不相关的行)
我希望它绑定到 10.1.1.200:443,但它却绑定到 0.0.0.0:443。
为什么它无法绑定到正确的 IP?
答案1
您必须在服务器上设置为(GatewayPorts
在clientspecified
sshd_config
,才能将远程隧道绑定到任何接口。根据sshd_config(5) 的手册页:
GatewayPorts
可用于指定 sshd 应允许远程端口转发绑定到非环回地址,从而允许其他主机连接。该参数可以no
强制远程端口转发仅对本地主机可用,yes
强制远程端口转发绑定到通配符地址,或clientspecified
允许客户端选择转发绑定到的地址。默认值为no
。