我使用命令启用了 SSH 本地端口转发ssh -NL 8080:whatsmyip.org:80 <remote-sshd-machine>
。现在,当我打开 Firefox 并导航到 时http://127.0.0.1:8080
,网页无法打开。但是,如果我在 Firefox 网络设置菜单中配置了 HTTP 代理127.0.0.1
和端口8080
,则网页将打开,whatsmyip.org 会按预期报告我的远程 SSH 服务器 IP 地址。为什么我需要在浏览器下配置代理设置才能使其正常工作?
答案1
如果您尝试使用远程 SSH 服务器作为浏览器的 SOCKS 代理,则您要查找的 ssh 命令是:
ssh -N -D8080 <remote-sshd-machine>
这将在本地主机 TCP 端口 8080 上启动 SOCKSv4/5 代理,该代理允许您使用远程 SSH 服务器的 IP 地址浏览任何网站。但是,如果您尝试通过本地主机访问远程站点(例如whatsmyip.org),请注意以下事项:
- 远程服务器必须不是使用基于名称的虚拟主机。基于名称的虚拟主机将多个不同的站点(例如 example.com 和 example.org)放在同一 IP 地址上。站点之间的区分仅通过浏览器中给出的 URL 来完成,因为 example.com 和 example.org 都会解析为相同的 IP。在您的情况下,远程服务器会查看 URL,这
http://localhost
可能会产生错误或执行一些不可预测的操作(Apache 往往会这样做!),因为它无法识别其名称列表中的“localhost”域名 -基于虚拟主机。 - 远程服务器必须忽略端口号已从 80 更改为 8080 的事实。通常大多数静态 HTML 站点和 Web 服务器都会忽略这一点,但是,某些服务器和 Web 应用程序可能会尝试将您重定向到端口 80,这显然会破坏事情为你。
如果您确实希望模拟上述内容(我没有对此进行彻底测试,并且我不鼓励您养成以 root 身份运行 ssh 的习惯!),请尝试以下操作:
sudo ssh -N -L 127.0.0.1:80:whatsmyip.org:80 <remote-sshd-machine>
您需要上面的 sudo,因为您要求 ssh 客户端侦听端口 80,该端口 <1024 并且被视为特权端口,并且只有 root 拥有的进程才能绑定到这些端口。另请注意,您不能在客户端的端口 80 上运行任何其他服务(例如 Web 服务器)。如果是,则需要先停止该服务并释放端口 80,然后再尝试此命令。
其次,将以下行添加到 /etc/hosts 中:
127.0.0.1 whatsmyip.org www.whatsmyip.org
第一个命令会将本地计算机(SSH 客户端)上的 TCP 端口 80 转发到 Whatsmyip.org 上的端口 80。主机文件将确保当您使用浏览器询问whatsmyip.org 时,该名称会解析为您的本地主机。这样,您就可以保留浏览器通过 SSH 隧道发送到 Whatsmyip.org 的端口号和主机名。你怎么知道隧道是否有效? Whatsmyip.org 应该报告 SSH 服务器(远程 SSHd 机器)的 IP 地址,而不是您客户端的 IP 地址。