我正在努力建立跨两个 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 之间的路由。我还添加了以下静态路由:
OpenVPN 客户端配置文件
- 192.168.1.0/24 通过 10.8.0.1
- 192.168.4.0/24 通过 10.8.0.1
ASUS1 路由器
- 10.8.0.0/24 经由 10.8.0.1
- 192.168.4.0/24 通过 192.168.1.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)
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 后,最后一次跟踪路由尝试成功。
[email protected]:~$ 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 * *
[email protected]:~$ 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
[email protected]:~$ 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
[email protected]:~$ 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) [email protected]:~$ ssh [email protected] -p [redacted]
ssh: connect to host 192.168.1.19 port [redacted]: Connection timed out
(base) [email protected]:~$ 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) [email protected]:~$ 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) [email protected]:~$ 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) [email protected]:~$ ssh [email protected] -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 [email protected]
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 一下,就好像它们在同一个子网上一样?