我遇到过这样的情况:A 可以通过 SSH 访问 B(B 无法访问 A,因为 nat),A 可以通过 SSH 访问 C(C 无法访问 A,因为 nat),B 和 C 无法互相访问,因为它们位于不同的网络中。
A->B,A->C,C->B?我的问题是如何设置隧道或命令让 C 可以访问 B?
答案1
要建立从 B 到 C 的 ssh 隧道,请在主机 A 上运行以下命令:
ssh -n -R 3300:localhost:3300 B sleep 999999999 &
ssh -n -L 3300:localhost:22 C sleep 999999999 &
用适当的主机名替换 B 和 C。
现在您可以在 B 上
ssh -p 3300 localhost
并连接到主机 C。当您想要拆除隧道时,在主机 A 上将 ssh 命令从后台调出并输入Ctrl-C。
答案2
与此问题密切相关的变体是,B 和 C 都无法访问,但都可以访问 A。目标是允许 C 访问 B。
即 B -> A,C -> A,C -> B?
来自B
ssh -n A -R 9007:localhost:22 sleep 999999999 &
来自C
ssh -n A -L 9008:localhost:9007 sleep 999999999 &
来自C
ssh -p 9008 localhost
答案3
听起来您需要研究“端口转发”或甚至可能允许 DNZ。这样,您的 LAN 之外的任何人都必须知道您的公共 IP 是什么。以及您的 VPN 服务器/客户端所连接的端口号。(我假设您正在尝试使用 PPTP“隧道”与 VPN 结合使用,而不是尝试运行 Web 服务器或类似的东西。)
否则,如果所有这些都发生在同一个 LAN 上,那么可能是防火墙问题(我首先怀疑)、DNS 问题,甚至可能是 DHCP 问题。更奇怪的是,也可能是交换机故障。但我非常怀疑您自己的 LAN 中存在 NAT(网络地址转换)问题。