0x01 前言

前些天我购置并安装了新的交换机,因为是第一次接触网管型交换机,所以非常激动。

在参考技术文档摸索几个小时后我终于完成交换机的安全设定并配置了vlan、acl等。这过程异常顺利,不到一个小时的时间我去的从0到入门的成就。

配置好的交换机中的各个vlan都可以成功地从DHCP服务器获取IP和NTP服务器地址,acl也按预设发挥作用,一切都很完美,就连布线也赏心悦目。

然而问题来了,两个vlan中的所有设备访问公网都很正常,当跨vlan访问获取数据时却异常的慢,最高速度只有4k/s。

0x02 拓扑

问题简单明了,就是vlan间的数据传输出现问题,跨vlan的访问速度只有4k/s左右。

下面是一张简单的拓扑图:

最顶层是路由器(pfsense软路由),紧接着是交换机,交换机中配置了两个vlan,vlan相关信息如下:

  • vlan 1:10.1.1.0/24
  • vlan 2:10.1.2.0/24

因为我的服务器有空余的网口,所以不使用单臂路由的架构让vlan间通讯,而是让流量经过路由器,让路由器处理跨vlan的数据包。

我服务器的核心服务都在vlan 1中,而Wi-Fi、硬件设备都接入vlan 2。因为小米盒子、电脑和手机需要访问媒体服务器;Apple 设备需要访问time machine,所以导致跨vlan访问的问题必须要解决。

0x03 排查

我尝试通过以下方式排查:

  1. 尝试越过Wi-Fi、二级交换机等设备,用网线直连交换机的vlan 2端口,问题依旧;
  2. 尝试越过Wi-Fi、二级交换机等设备,用网线直连交换机的vlan 1端口,速度正常;
  3. 尝试越过交换机,用网线直连路由器的Port 2端口,问题依旧。

尝试2的结果说明只有在跨vlan的情况下才异常;尝试3的结果说明问题并不在交换机,而在路由器中。

在仔细查看pfsense中的相关配置后可以肯定,这问题和DHCP服务器、DNS服务器都没多大的关系。

再花一点时间想想,因为两个vlan是不同网段且不同端口的,路由器需要使用NAT的方式进行转发,所以需要审查NAT的配置信息;再一个就是因为从不同端口接入,所以肯定会经过防火墙,所以需要审查防火墙的配置信息。

0x04 debug

首先审查防火墙:

  • 以下是vlan 1的防火墙配置:

  • 以下是vlan 2的防火墙配置:

vlan 2的防火墙配置中关于mibox的条目是后来添加的,请忽略。

防火墙规则都是放行所有流量,所以不存在备阻挡的情况。以下是流量控制的规则:

流量控制规则也是正常的,并没有将速度限制在4k/s以下。

最后检查NAT配置:

这个NAT主要是将访问公网的数据包通过WAN口转发出去,也没有什么问题。

关于NAT的配置,在pfsense的高级设置中还有相关的选项:

在Network Address Translation栏目中的NAT Reflection mode for port forwards选项需要选择为 pure NAT模式。

我发现我系统中相关的选项被设置为NAT + proxy模式,这就是导致vlan间数据传输速度问题的根源:

0x05 结语

这花了我一整天的时间,一切准备就绪后再测试内网速度。在全千兆的网络中,文件传输的速度可以达到理论值的80%,在100m/s上下。因为vlan间的数据要经过路由器,所以在大流量的情况下,CPU使用率也很高,以下是相关截图:

  • pfsense虚拟机:

  • pfsense内部:

不过这种情况不多见,到目前为止一切都很好。