在 CentOS 7 上,某个 IP 范围的性能比其他 IP 范围更差

在 CentOS 7 上,某个 IP 范围的性能比其他 IP 范围更差

我有一台服务器、一台笔记本电脑、一台台式机和一台连接到千兆交换机的家用级路由器。我的问题是服务器到网络的带宽有限192.168.1.0/24。当使用 IPv6 链路本地地址或当客户端(例如笔记本电脑或台式机)从互联网连接到服务器时,不会出现此问题。

我已经排除了该问题是由客户端引起的可能性,因为所有客户端都表现出相同的行为。

我的设置;

  1. 有两个网段,192.168.1.0/24互联网
  2. 我的所有设备都直接连接到同一个交换机
  3. 我的所有设备的 IP 都在该192.168.1.0/24范围内
  4. 可以通过网关(路由器)访问互联网192.168.1.1,NAT显然存在
  5. 除了自动配置的本地链路外,没有 IPv6
  6. 没有其他设备,例如防火墙设备

在这里,我通过使用标志在客户端模式下在服务器上运行 iperf 来演示我的问题-c

[user@srv ~]$ iperf3 -c 192.168.1.115
Connecting to host 192.168.1.115, port 5201
[  4] local 192.168.1.40 port 47062 connected to 192.168.1.115 port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   853 KBytes  6.98 Mbits/sec    0   59.4 KBytes # Only 6,98 Mbits/sec!
...

[user@srv ~]$ iperf3 -c fe80::[redacted]%eth0
Connecting to host fe80::[redacted]%eth0, port 5201
[  4] local fe80::[redacted] port 36236 connected to fe80::[redacted] port 5201
[ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
[  4]   0.00-1.00   sec   111 MBytes   929 Mbits/sec    0    225 KBytes
...
[user@srv ~]$ 

请注意;

  1. 如何连接到网络中的客户端(在本例中为 iperf 服务器)192.168.1.0/24,体验非常差的带宽。
  2. 如何使用 IPv6 链路本地地址不会出现此问题。
  3. 为什么没有从互联网连接的 IPv4 客户端会遇到此问题。

iperf 服务器给出了相同的结果。这告诉我带宽的限制是对称

我使用 IPv4 在笔记本电脑和台式机之间运行了 iperf,没有任何问题。这排除了交换机、链路或设备出现故障的可能性。

一切都指向服务器。我不记得在服务器上配置过任何流量整形。

服务器运行 CentOS 7,桌面运行 Windows 10,笔记本电脑运行 Fedora 26。

关于网络值得注意的192.168.1.0/24是服务器防火墙配置如下:

# firewall-cmd --zone=public --add-interface=eth0
# firewall-cmd --zone=home --add-source=192.168.1.0/24

我不认为这样一个简单的规则会导致如此糟糕的性能。我尝试禁用防火墙:

# systemctl stop firewalld

没有运气。我认为这排除了该问题是由 iptables 引起的可能性。

netstat -i没有什么值得担忧的事情,物理链接很好。

我运行 libvirt,我知道它有能力控制 iptables。有一些虚拟网段,例如 192.168.122.0/24,由 libvirtd 进行 natted/routed/dhcp 服务/dnsmasq。我相信这些无关紧要,因为服务器的路由表是正确的。我还尝试过停止 libvirt 中的所有虚拟机和相关网络。但没成功。

我运行# iptables -L这个程序,生成了一个包含 197 行的列表,规则是正确的。要到达“home”区域,传入数据包必须与 12 条规则进行比较。然后,将数据包与区域中定义的规则进行比较,“home”区域中有 6 条规则。没有过滤 OUTPUT 链的规则。我已经排除了 iptables。

我完全不知道下一步该尝试什么?

答案1

我现在已经解决了这个问题。

我删除了 NetworkManager 中的 eth0 连接:

# nmcli connection delete id eth0

然后创建了一个等效的替代品,现在一切都按预期工作。

相关内容