通过 VPN 路由到 LAN 中的计算机时出现“SIOCADDRT:网络不可达”

通过 VPN 路由到 LAN 中的计算机时出现“SIOCADDRT:网络不可达”
  +--->---->----->-----YES----->---->----->--+
  |                |WiFi-Internet|           |
sys1(Linux) <-LAN->|sys2(Windows)|<-VPN-> sys3(Linux)
  |                                          |
  +---<----<-----<-----NO------<----<-----<--+

我无法sys1从ssh 到sys3但我可以通过在以太网适配器的 VPN 适配器上启用互联网共享来sys3从ssh 到。sys1sys2

# 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实际上并未发送任何数据包到sys1viasys2来检查是否可达。

我怎样才能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上运行服务器,我想将应用程序连接到端口sys18888sys3sys18888

答案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> _

相关内容