是否可以使用 ssh 隧道将本地主机转发到特定(vhost)子域?
换句话说,我有以下域/子域,均位于同一 IP 上
domain.dev
vhost.domain.dev
在远程机器上,我更新/etc/hosts
了
# Remote machine /etc/hosts
# <...snip...>
1.2.3.4 domain.dev vhost.domain.dev
但是当我尝试这两个命令时
ssh -L 8080:vhost.domain.dev user@remote
ssh -L 8080:domain.dev user@remote
在这两种情况下,我只能访问domain.dev
但不能vhost.domain.dev
(在localhost:8080
)
有没有什么办法可以通过远程机器访问/隧道传输请求?遗憾的是,我无法使用 VPN 成为同一网络的一部分,在那里我可以访问domain.dev
并且domain.dev
只能通过远程机器(网络)访问
答案1
您必须在自己的机器上使用 /etc/hosts(将两个域指向其中一个本地主机 IP 地址)。
这不是仅通过 SSH 即可实现的,因为域名根本不是在 TCP 级别发送的 – 它是由您的浏览器在 HTTP 级别发送的。
同时,隧道(即您的-L
选项)可以直接指向 IP 地址:它对 TCP 没有任何影响,因为 TCP 无论如何都只处理 IP 地址。
答案2
这可以使用 ssh 代理来完成,并配置浏览器/系统以使用此代理
ssh -D 8080 user@remote
需要注意的一点是,确保您远程执行 DNS 查找,例如在 Firefor 中about:config
确保network.proxy.socks_remote_dns
将其设置为 true (否则 Firefox 将尝试在本地查找域,而不是在远程计算机上查找域)
并且某些工具无法工作(例如 curl 在本地无法工作,但在远程机器上可以正常工作)