现在,如果我没有记错的话,端口 80 到端口 80 上的 Web 服务器的 SSH 隧道应该允许我的端口 80 通过该服务器进行隧道传输,对吗?但是,当我设置隧道并访问网站时,我的日志仍然显示来自我的家用电脑,而不是服务器的 IP。有什么想法吗?
我使用以下命令,但它所做的似乎只是在终端中通过 SSH 进入主机:
ssh root@webserver -L 80:127.0.0.1:80
答案1
刚刚尝试过这个并确认它有效:
ssh -ND 8080 [email protected]
需要 root 权限才能绑定计算机上的本地端口 80,因为它是保留端口(8080 是常用的备用端口)。若要仅转发浏览器流量,您可以将 Firefox / Chrome / Whatever 设置为在“8080”上使用 Socks 代理“localhost”。
无需 root 权限即可尝试,在我无权访问的 Web 服务器上可以使用。
答案2
一旦设置了隧道(使用-L
),您需要更改使用的 URL,例如,http://127.0.0.1/
或者如果由于虚拟主机设置而导致站点名称必须匹配,那么您需要将其添加到您的桌面主机文件中:
127.0.0.1 www.domain.com
您可以在服务器虚拟主机上定义一个别名,这样您就可以为 127.0.0.1 使用一个名称,如“test.domain.com”,然后直接使用真实名称(如果这有用的话)——忘记从主机文件中删除条目很容易造成混淆。取决于网站的工作方式。
要转发端口 80,您只需要在桌面上拥有 root 权限,而不是在 Web 服务器上拥有 root 权限。我强烈建议不要允许 root 使用 ssh 登录。
使用非特权端口可能工作,同样取决于你的站点:
ssh user@webserver -L 1080:127.0.0.1:80
并使用 URL http://127.0.0.1:1080/
。
-D
按照建议使用 SOCKS 代理( )可能会引起一些意外,这取决于 SOCKS/DNS/防火墙/NAT 配置。
(在 Linux 上,作为保留端口的 root 的替代方案,您可以使用 POSIX 功能,请参阅https://stackoverflow.com/questions/413807/是否有办法让非根进程绑定到特权端口 1024-on-l,但是这在 OpenSSH 的标准版本上不起作用,因为它对端口号进行了额外的硬编码检查,除非使用NO_IPPORT_RESERVED_CONCEPT
defined 进行编译。链接问题的答案对此有各种其他解决方案。)