![A 可以 ping B,B 可以 ping C,但是 A 不能 ping C。如何将 A 连接到 C(以太网)?](https://linux22.com/image/1220929/A%20%E5%8F%AF%E4%BB%A5%20ping%20B%EF%BC%8CB%20%E5%8F%AF%E4%BB%A5%20ping%20C%EF%BC%8C%E4%BD%86%E6%98%AF%20A%20%E4%B8%8D%E8%83%BD%20ping%20C%E3%80%82%E5%A6%82%E4%BD%95%E5%B0%86%20A%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20C%EF%BC%88%E4%BB%A5%E5%A4%AA%E7%BD%91%EF%BC%89%EF%BC%9F.png)
我家里有一台电脑,ip为192.168.221.xxx
我在工作时有另一台可以 ping 通的计算机,它有 2 个 IP 地址:192.168.1.1。1.xxx 和 192.168.0.xxx。最后 2 个地址具有相同的网关,即 192.168。1.1.
办公室里的电脑连接到一个集线器。该集线器还连接了一个嵌入式设备,地址为 192.168。0.xxx
现在我无法从家用电脑 ping 通该嵌入式设备。如何在不更改其所连接的子网的情况下连接到它?我可以从工作电脑 ping 通嵌入式设备,也可以从家用电脑 ping 通工作电脑。因此,我尝试通过工作电脑从家用电脑连接到嵌入式设备。端口转发?如何在 Ubuntu 上建立端口转发?
答案1
一种简单的方法是使用 SSH 转发。运行以下命令:
ssh -L 8000:192.168.0.xxx:yyyy [email protected]
一旦您对工作机器进行身份验证,ssh 将在端口 8000 上本地监听。如果您连接到 localhost:8000,则连接将转发到 192.168.0.xxx:yyyy。
[编辑:回答以下问题]
您在主机 A 上。使用 -R 使 B 监听端口并转发到 C。这可能没问题,具体取决于您对 B 的访问权限有多大。使用 -L 使 A 监听端口,并通过 B 将连接隧道传输到 C。因此,假设 B 是 10.10.10.10 而 C 是 20.20.20.20,并且您想通过 ssh 连接到 C。您运行以下命令:
ssh -L 8000:20.20.20.20:22 [email protected]
现在 A 正在监听端口 8000,但与它的连接将通过隧道传输到 20.20.20.20:22,因此在本地 shell 中运行以下命令:
ssh [email protected]:8000
这将与 C 建立连接(通过您打开的会话到 B)。用其他服务替换其他端口,例如连接到 C 上的 Web 服务器:
ssh -L 8000:20.20.20.20:80 [email protected]
然后将浏览器指向http://127.0.0.1:8000
答案2
可能是嵌入式设备没有网关/路由到您的家用 PC 范围 192.168.221.xxx。如果您可以访问其配置,则只需在其路由表中添加适当的网关即可连接而无需转发。
答案3
这个问题有点模糊(也许是,早上第一件事)。
我会检查你的子网掩码,如果你在 255.255.255.0,那么 .221、.1 和 .0 机器就在完全独立的网络上。
至于工作和嵌入式机器,它们在同一个网络上,但如果它们无法通信,我猜测是路由冲突。
如果是我,我会禁用工作机器上的辅助接口,并确保将所有内容放在同一个网络(255.255.255.0)上,然后使用同一范围内的 IP(192.168.0.x)。
如果所有内容都在 255.255.0.0 子网上,那么它们已经在同一个网络上了,因此我只需禁用工作机器上的第二个接口,因为这可能会产生冲突。
答案4
将 B 设置为路由器。
如果B是Linux机器,执行以下命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
除非 B 已经是 A 的默认网关,否则您现在可能需要配置 A 以了解网络 C,并告诉它使用 B 作为网关来到达 C。
route add -network 192.168.1.0 netmask 255.255.255.0 gw ip-of-B