我正在努力建立跨两个 VLAN 的连接。除非我先发起 ping,否则不同 VLAN 上的两个设备不会相互通信(SSH、traceroute 等)。Ping 最初也会超时,有时甚至根本不起作用(不一致)。有问题的网络如下:

我有一台具有第 3 层功能的 HPE 1920S 交换机,可托管两个 VLAN(VLAN 100 和 300)。每个 VLAN 都有自己的网关(名为 ASUS1 和 ASUS2,型号为 DSL-AC88U)。VLAN 100 上的所有设备都配置为使用 ASUS1(192.168.1.2)作为网关,同样,VLAN 300 上的所有设备都配置为使用 ASUS2(192.168.4.2)作为网关。每个路由器都托管一个 DHCP 服务器。两个 DHCP 服务器都已作为 DHCP 中继添加到交换机上,并具有各自的 IP。每个路由器都启用了防火墙。ASUS1 还在 TUN 配置中提供 OpenVPN 服务器,我使用它(windows1 使用)远程连接到网络。

我已在交换机上启用两个 VLAN 之间的路由。我还添加了以下静态路由:

  1. OpenVPN 客户端配置文件

    • 192.168.1.0/24 通过 10.8.0.1
    • 192.168.4.0/24 通过 10.8.0.1
  2. ASUS1 路由器

    • 10.8.0.0/24 经由 10.8.0.1
    • 192.168.4.0/24 通过 192.168.1.3
  3. 转变

    • 10.8.0.0/24 通过 192.168.1.2(下一跳接口:VLAN 100)
    • 192.168.1.0/24 通过 192.168.1.3(下一跳接口:VLAN 100)
    • 192.168.4.0/24 通过 192.168.4.3(下一跳接口:VLAN 300)
  4. ASUS2路由器

    • 10.8.0.0/24 通过 192.168.4.3
    • 192.168.1.0/24 通过 192.168.4.3

我已确认以下几点:

  • 交换机的 ARP 表中有源设备和目标设备的正确条目
  • 目标设备和源设备、两个路由器和交换机上的 ARP 表在 ping 解析之前或之后不会改变
  • 即使路由器上的防火墙被禁用,问题仍然存在
  • linux1 和 linux2 上没有防火墙
  • 我可以从交换机 ping 所有源设备和目标设备(10.8.0.2 – VPN 客户端除外),并且它们立即开始工作
  • 没有 IP 冲突

为了进行诊断,我包含了各种转储,以显示我在设备之间进行的跟踪路由、ping 和 SSH 尝试。我还按顺序包含了它们,因为我认为这很重要,因为跟踪路由和 ping 的行为会因一次尝试而异。

第一个转储显示了我从 10.8.0.2 上的 VPN 客户端 (windows1) 分别到 192.168.1.19、192.168.4.20 和 192.168.4.21 的跟踪路由尝试。请注意跨越 VLAN 时最后一跳上的第一个星号。

(base) PS C:\Users\myuser> tracert -d 192.168.1.19
 
Tracing route to 192.168.1.19 over a maximum of 30 hops
 
  1   141 ms   141 ms   143 ms  10.8.0.1
  2   143 ms   142 ms   142 ms  192.168.1.19
 
Trace complete.
 
(base) PS C:\Users\myuser> tracert -d 192.168.4.20
 
Tracing route to 192.168.4.20 over a maximum of 30 hops
 
  1   142 ms   142 ms   142 ms  10.8.0.1
  2   143 ms   143 ms   143 ms  192.168.1.3
  3     *      142 ms   142 ms  192.168.4.20
 
Trace complete.
 
(base) PS C:\Users\myuser> tracert -d 192.168.4.21
 
Tracing route to 192.168.4.21 over a maximum of 30 hops
 
  1   142 ms   142 ms   142 ms  10.8.0.1
  2   143 ms   143 ms   145 ms  192.168.1.3
  3     *      141 ms   141 ms  192.168.4.21
 
Trace complete.

第二个转储显示了我从 192.168.4.20 到 192.168.1.19 的跟踪路由和 ping 尝试。第一个跟踪路由以“!H”和两个星号结束。第二个跟踪路由无法解析,我发送了键盘中断。ping 成功,但数据包丢失率为 33%。ping 后,最后一次跟踪路由尝试成功。

myuser@192.168.4.20:~$ sudo traceroute -d 192.168.1.19
[sudo] password for myuser:
traceroute to 192.168.1.19 (192.168.1.19), 30 hops max, 60 byte packets
 1  _gateway (192.168.4.2)  0.464 ms  0.515 ms  0.649 ms
 2  192.168.4.3 (192.168.4.3)  3.674 ms  5.102 ms  11.126 ms
 3  192.168.4.3 (192.168.4.3)  14.924 ms !H * *
 
myuser@192.168.4.20:~$ sudo traceroute -d 192.168.1.19
traceroute to 192.168.1.19 (192.168.1.19), 30 hops max, 60 byte packets
 1  _gateway (192.168.4.2)  0.488 ms  0.504 ms  0.640 ms
 2  192.168.4.3 (192.168.4.3)  2.594 ms  3.597 ms  4.354 ms^C
 
myuser@192.168.4.20:~$ ping 192.168.1.19
PING 192.168.1.19 (192.168.1.19) 56(84) bytes of data.
64 bytes from 192.168.1.19: icmp_seq=2 ttl=63 time=0.410 ms
64 bytes from 192.168.1.19: icmp_seq=3 ttl=63 time=0.462 ms
^C
--- 192.168.1.19 ping statistics ---
3 packets transmitted, 2 received, 33.3333% packet loss, time 2080ms
rtt min/avg/max/mdev = 0.410/0.436/0.462/0.026 ms
 
myuser@192.168.4.20:~$ sudo traceroute -d 192.168.1.19
traceroute to 192.168.1.19 (192.168.1.19), 30 hops max, 60 byte packets
 1  192.168.4.3 (192.168.4.3)  1.671 ms  2.486 ms  3.258 ms
 2  192.168.1.19 (192.168.1.19)  0.477 ms  0.464 ms  0.451 ms

第三个转储显示了从 192.168.4.21 到 192.168.19 的 SSH 连接最初如何超时,但在 ping 之后最终开始工作。在 ping 开始工作之前,请注意“重定向主机(新下一跳:192.168.4.3)”警告。

(base) myuser@192.168.4.21:~$ ssh myuser@192.168.1.19 -p [redacted]
ssh: connect to host 192.168.1.19 port [redacted]: Connection timed out
 
(base) myuser@192.168.4.21:~$ sudo traceroute -d 192.168.1.19
[sudo] password for myuser:
traceroute to 192.168.1.19 (192.168.1.19), 30 hops max, 60 byte packets
 1  _gateway (192.168.4.2)  0.373 ms  30.085 ms  30.066 ms
 2  192.168.4.3 (192.168.4.3)  2.299 ms  3.130 ms  3.890 ms
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * *^C
 
(base) myuser@192.168.4.21:~$ ping 192.168.1.19
PING 192.168.1.19 (192.168.1.19) 56(84) bytes of data.
From 192.168.4.2: icmp_seq=2 Redirect Host(New nexthop: 192.168.4.3)
64 bytes from 192.168.1.19: icmp_seq=2 ttl=63 time=0.632 ms
64 bytes from 192.168.1.19: icmp_seq=3 ttl=63 time=0.483 ms
64 bytes from 192.168.1.19: icmp_seq=4 ttl=63 time=0.389 ms
64 bytes from 192.168.1.19: icmp_seq=5 ttl=63 time=0.395 ms
^C
--- 192.168.1.19 ping statistics ---
5 packets transmitted, 4 received, 20% packet loss, time 4132ms
rtt min/avg/max/mdev = 0.389/0.474/0.632/0.098 ms
 
(base) myuser@192.168.4.21:~$ sudo traceroute -d 192.168.1.19
traceroute to 192.168.1.19 (192.168.1.19), 30 hops max, 60 byte packets
 1  192.168.4.3 (192.168.4.3)  1.483 ms  2.294 ms  3.037 ms
 2  192.168.1.19 (192.168.1.19)  0.439 ms  0.405 ms  0.385 ms
 
(base) myuser@192.168.4.21:~$ ssh myuser@192.168.1.19 -p [redacted]
The authenticity of host '[192.168.1.19]:[redacted] ([192.168.1.19]:[redacted])' can't be established.
ED25519 key fingerprint is SHA256:[redacted].
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? ^C

最后的转储显示 10.8.0.2 和 192.168.4.21 之间的 SSH 和跟踪路由尝试均失败。两者之间的跟踪路由如第一次转储中所示有效,但尝试之间显然发生了一些变化……

(base) PS C:\Users\myuser> ssh myuser@192.168.4.21
ssh: connect to host 192.168.4.21 port 22: Connection timed out
 
(base) PS C:\Users\myuser> tracert -d 192.168.4.21
 
Tracing route to 192.168.4.21 over a maximum of 30 hops
 
  1   142 ms   142 ms   142 ms  10.8.0.1
  2   143 ms   143 ms   143 ms  192.168.1.3
  3     *        *        *     Request timed out.
  4     *        *        *     Request timed out.
  5

我的问题是:如何让 SSH 和 traceroute 通过 VPN 以及现场两个设备但位于不同 VLAN 上时能够持续工作,而无需先 ping 一下,就好像它们在同一个子网上一样?


最佳答案
1

那个“主机重定向”可能就是泄密的线索。

为您的主机(linux1 和 2 等)提供到其他子网的静态路由,以便它们不会总是通过发送到其默认网关来获取主机重定向。

1

  • 谢谢!向每台主机添加静态路由就成功了。我不再收到“主机重定向”警告,现在我可以从 windows1 发起到 linux1 和 2 的 SSH 连接,而不必先 ping 任何一个。我相信这还可以节省与 VLAN 100 上的其他主机通信时从交换机到 VLAN 300 上的默认网关的不必要的往返。


    –