+--->---->----->-----YES----->---->----->--+
| |WiFi-Internet| |
sys1(Linux) <-LAN->|sys2(Windows)|<-VPN-> sys3(Linux)
| |
+---<----<-----<-----NO------<----<-----<--+
我无法sys1
从ssh 到sys3
但我可以通过在以太网适配器的 VPN 适配器上启用互联网共享来sys3
从ssh 到。sys1
sys2
# LAN
sys1: 192.168.137.2
sys2: 192.168.137.1
# VPN
sys2: 10.252.85.135
sys3: 10.136.136.80
在sys3
:
$ sudo route add -net 192.168.137.0 netmask 255.255.255.0 gw 10.252.85.135
SIOCADDRT: Network is unreachable
我是否应该检查防火墙sys2
?但似乎该route
命令sys3
实际上并未发送任何数据包到sys1
viasys2
来检查是否可达。
我怎样才能sys1
从ssh 到sys3
?
--更新--
我正在使用 Global Protect VPN 客户端。
在sys3
:
$ sudo ip -4 route
[sudo] password for amd:
default via 10.136.139.254 dev enx00249b30540f proto dhcp metric 100
10.136.136.0/22 dev enx00249b30540f proto kernel scope link src 10.136.136.80 metric 100
169.254.0.0/16 dev enx00249b30540f scope link metric 1000
--更新--
实际上我不想从 sshsys3
到;我在端口sys1
上运行服务器,我想将应用程序连接到端口sys1
8888
sys3
sys1
8888
答案1
但看起来 sys3 上的路由命令实际上并没有通过 sys2 向 sys1 发送任何数据包来检查是否可达。
这不是“活跃度”检查——可达性检查完全基于 sys3 上的本地路由表。路由的“via”地址实际上是网关的替代地址第 2 层(MAC)地址,因此指定网关必须是本地的(尚未位于另一个网关后面),因此如果 sys3 没有到请求的网关 IP 地址的直接路由,则网关自动“不可达”。
目前,唯一与 10.252.85.135 匹配的路由是间接路由via 10.136.139.254
,这意味着您想要的网关已经位于至少一个其他网关(可能更多)后面,因此 sys3 无法仅通过 MAC 地址访问它。
(通过网关路由数据包是通过将数据包发送到该网关的第 2 层 (MAC) 地址作为目的地来完成的 - IP 标头保持完整 - 并且数据包中只有一个“目标 MAC”字段。没有本机支持的方法来描述通过两跳的路由;虽然 IP 曾经支持“源路由”选项,但网关可能在 1990 年代就已经停止遵守它了,因为它使地址欺骗变得太容易了。)
我无法从 sys3 ssh 到 sys1,但我能够通过在 sys2 的 VPN 适配器上启用以太网适配器的互联网共享,从 sys1 ssh 到 sys3。
这在一个方向上是有效的,因为 Windows“Internet 连接共享”包含 NAT – 你可以从 sys1 到 sys3 进行 SSH,因为后者认为它正在接收连接来自 sys2(即来自 10.252.85.135)并且仍然可以回复。
我怎样才能从 sys3 ssh 到 sys1?
在 sys2 和 sys3 之间建立隧道(最好从 sys2 到 sys3,因为可能有防火墙阻止新的 sys3→sys2 连接),或者从 sys1 到 sys3 的隧道(由 sys1 发起以利用 ICS NAT),然后通过该隧道进行 SSH。
例如,如果您可以通过 SSH 连接到 sys3,那么您也可以使用 SSH 的“反向转发”,ssh -R
它将在现有的出站(来自 sys1)SSH 连接上搭载任何类型的入站 TCP 连接。
sys1> ssh sys3 -R 5022:localhost:22
sys3> ssh localhost -p 5022
sys1> _
sys2> ssh sys3 -R 5022:sys1:22
sys3> ssh localhost -p 5022
sys1> _
或者,您可以将 sys3 设置为 OpenVPN 服务器、WireGuard 端点或任何其他 IP-over-IP 隧道。只要隧道保持活动状态,它就可以将连接传回。
如果 sys3 到 sys2 的连接没有被阻止,你可以做相反的事情,在 sys2 上设置 VPN 服务器 –或者SOCKS 代理、HTTP CONNECT 代理等。SSH 也可以在这里使用其-L
本地转发:
sys3> ssh sys2 -L 6022:sys1:22 -fN
sys3> ssh localhost -p 6022
sys1> _