问题描述
我有 3 台计算机,2 台 Linux 和 1 台 Windows。 Windows PC 和 Linux 服务器 (A) 在同一网络 (1) 上。 linux 服务器 (B) 在另一个网络 (2) 上。
我想在 2 个 linux 服务器之间建立 SSH 隧道,以允许 Windows PC 访问 Linux 服务器 (B) 的 HTTP 页面,因此该页面位于另一个网络上。
在 linux 服务器 (A) 上使用此命令,隧道工作正常,但只能在 linux 本地运行。
ssh -R 8080:localhost:80 linuxa.internet.com
但是从 Windows PC 我无法访问 linux (A) 上的端口 8080。 http://linuxa.local:8080 不起作用。
所以我尝试了这两个命令来打开对我的 PC 的访问,但它也不起作用。
ssh -R 0.0.0.0:8080:localhost:80 linuxa.internet.com
ssh -R ipwindows:8080:localhost:80 linuxa.internet.com
你能帮我吗?
谢谢
解决方法
根据评论,我得出结论,您可能的防火墙有问题。假设您可以从作为“代理”的主机(在本地主机上使用 curl、wget、ncat 等)访问隧道。您应该检查是什么阻止了流量。在大多数情况下,它是一个防火墙。根据您的 Linux 发行版,您可能有不同的防火墙后端和前端。如果您安装了 firewall-cmd
命令,则 firewalld 很可能是其中之一。
但在指责防火墙之前,您应该检查端口是否打开/关闭。我更喜欢 netcat:
HOST_THAT_SHOULD_HAVE_OPEN_PORT # nc -l 8080
HOST_THAT_SHOULD_BE_ABLE_TO_CONNECT # nc HOST_THAT_SHOULD_HAVE_OPEN_PORT 8080
如果没有连接或连接被拒绝,极有可能是防火墙的问题。
您可以使用 systemctl
检查 firewalld 是否正在运行:
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-02-08 21:42:29 CET; 13h ago
然后您可以在端口 8080 上添加流量:
# firewall-cmd --add-port 8080/tcp
success
它将暂时打开 8080 上的网络流量。然后您应该可以使用端口 8080 和您的 ssh 隧道。
,感谢您的回答,但我认为我没有安装防火墙
systemctl status firewalld
返回
Unit firewalld.service could not be found.
和
firewall-cmd --add-port 8080/tcp
-bash: firewall-cmd: command not found