当前位置: 首页 > 知识库问答 >
问题:

mysql - 使用 openwrt + netmaker 组网时发生非常怪异的 tcp 丢包?

谢哲瀚
2024-04-07

网络拓扑图

阿里云节点环境

  • 操作系统:ubuntu 22.04LTS
  • 网络配置:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo     valid_lft forever preferred_lft forever  inet6 ::1/128 scope host     valid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000  link/ether 00:16:3e:08:3c:50 brd ff:ff:ff:ff:ff:ff  altname enp0s3  altname ens3  inet 172.19.27.60/20 metric 100 brd 172.19.31.255 scope global dynamic eth0     valid_lft 295876523sec preferred_lft 295876523sec  inet6 fe80::216:3eff:fe08:3c50/64 scope link     valid_lft forever preferred_lft forever38: netmaker: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000  link/none  inet 192.168.10.1/24 brd 192.168.10.255 scope global netmaker     valid_lft forever preferred_lft forever
  • 路由信息:

    default via 172.19.31.253 dev eth0 proto dhcp src 172.19.27.60 metric 100100.100.2.136 via 172.19.31.253 dev eth0 proto dhcp src 172.19.27.60 metric 100100.100.2.138 via 172.19.31.253 dev eth0 proto dhcp src 172.19.27.60 metric 100172.19.16.0/20 dev eth0 proto kernel scope link src 172.19.27.60 metric 100172.19.31.253 dev eth0 proto dhcp scope link src 172.19.27.60 metric 100192.168.10.0/24 dev netmaker proto kernel scope link src 192.168.10.1192.168.31.0/24 via 192.168.10.1 dev netmaker

    办公室节点环境

  • 操作系统:openwrt 23.05
  • 网络配置:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  inet 127.0.0.1/8 scope host lo     valid_lft forever preferred_lft forever  inet6 ::1/128 scope host     valid_lft forever preferred_lft forever2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000  link/sit 0.0.0.0 brd 0.0.0.03: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-lan state UP qlen 1000  link/ether 00:e0:4c:69:1a:62 brd ff:ff:ff:ff:ff:ff4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000  link/ether 30:9c:23:a3:db:56 brd ff:ff:ff:ff:ff:ff  inet6 fe80::329c:23ff:fea3:db56/64 scope link     valid_lft forever preferred_lft forever24: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000  link/ether 00:e0:4c:69:1a:62 brd ff:ff:ff:ff:ff:ff  inet 192.168.31.1/24 brd 192.168.31.255 scope global br-lan     valid_lft forever preferred_lft forever  inet6 240e:370:4312:eee0::1/64 scope global dynamic noprefixroute     valid_lft 256217sec preferred_lft 169817sec  inet6 fe80::2e0:4cff:fe69:1a62/64 scope link     valid_lft forever preferred_lft forever25: pppoe-wan: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc fq_codel state UNKNOWN qlen 3  link/ppp  inet 100.64.215.177 peer 100.64.128.1/32 scope global pppoe-wan     valid_lft forever preferred_lft forever  inet6 240e:370:4312:eee1::1/64 scope global dynamic noprefixroute     valid_lft 256217sec preferred_lft 169817sec  inet6 240e:370:4211:c759:997:9f43:7f6:e31/64 scope global dynamic noprefixroute     valid_lft 258851sec preferred_lft 172451sec  inet6 fe80::997:9f43:7f6:e31/128 scope link     valid_lft forever preferred_lft forever26: netmaker: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1420 qdisc fq_codel state UNKNOWN qlen 500  link/[65534]  inet 192.168.10.3/24 brd 192.168.10.255 scope global netmaker     valid_lft forever preferred_lft forever
  • 防火墙配置:

    config defaults  option input 'ACCEPT'  option output 'ACCEPT'  option forward 'ACCEPT'  option fullcone '1'  option synflood_protect '1'  option drop_invalid '1'config zone  option name 'lan'  option input 'ACCEPT'  option output 'ACCEPT'  option forward 'ACCEPT'  list network 'lan'config zone  option name 'dmz'  option input 'REJECT'  option output 'ACCEPT'  option forward 'ACCEPT'  option auto_helper '0'  option log '1'  list network 'netmaker'config zone  option name 'wan'  option input 'REJECT'  option output 'ACCEPT'  option forward 'REJECT'  option masq '1'  option mtu_fix '1'  option log '1'  list network 'wan'  list network 'wan6'config rule  option name 'Allow-DHCP-Renew'  option src 'wan'  option proto 'udp'  option dest_port '68'  option target 'ACCEPT'  option family 'ipv4'config rule  option name 'Allow-Ping'  option src 'wan'  option proto 'icmp'  option icmp_type 'echo-request'  option family 'ipv4'  option target 'ACCEPT'config rule  option name 'Allow-IGMP'  option src 'wan'  option proto 'igmp'  option family 'ipv4'  option target 'ACCEPT'config rule  option name 'Allow-DHCPv6'  option src 'wan'  option proto 'udp'  option dest_port '546'  option family 'ipv6'  option target 'ACCEPT'config rule  option name 'Allow-MLD'  option src 'wan'  option proto 'icmp'  option src_ip 'fe80::/10'  list icmp_type '130/0'  list icmp_type '131/0'  list icmp_type '132/0'  list icmp_type '143/0'  option family 'ipv6'  option target 'ACCEPT'config rule  option name 'Allow-ICMPv6-Input'  option src 'wan'  option proto 'icmp'  option family 'ipv6'  option target 'ACCEPT'  list icmp_type 'bad-header'  list icmp_type 'destination-unreachable'  list icmp_type 'echo-reply'  list icmp_type 'echo-request'  list icmp_type 'neighbour-advertisement'  list icmp_type 'neighbour-solicitation'  list icmp_type 'packet-too-big'  list icmp_type 'router-advertisement'  list icmp_type 'router-solicitation'  list icmp_type 'time-exceeded'  list icmp_type 'unknown-header-type'config rule  option name 'Allow-ICMPv6-Forward'  option src 'wan'  option dest '*'  option proto 'icmp'  option family 'ipv6'  option target 'ACCEPT'  list icmp_type 'bad-header'  list icmp_type 'destination-unreachable'  list icmp_type 'echo-reply'  list icmp_type 'echo-request'  list icmp_type 'packet-too-big'  list icmp_type 'time-exceeded'  list icmp_type 'unknown-header-type'config forwarding  option src 'lan'  option dest 'wan'config forwarding  option src 'wan'  option dest 'lan'config forwarding  option src 'dmz'  option dest 'lan'config forwarding  option src 'lan'  option dest 'dmz'
  • 路由信息:

    default via 100.64.128.1 dev pppoe-wan100.64.128.1 dev pppoe-wan scope link  src 100.64.215.177172.19.0.0/16 via 192.168.10.3 dev netmaker192.168.10.0/24 dev netmaker scope link  src 192.168.10.3192.168.31.0/24 dev br-lan scope link  src 192.168.31.1

    问题

    在阿里云主机 172.19.227.25 上安装 mysql 服务,端口为 30000。

通过以下几种方式执行 mysql -uroot -p'xxxx' -P30000 -h172.19.227.25 命令都能正
常的连接并返回“Server version: 5.7.43-log MySQL Community Server (GPL)”响应。

但是继续执行 use mysql; 命令时:

主机 结果
192.168.31.1(openwrt主机) 成功
192.168.31.160(局域网的另一台主机) 无响应,命令行 hang 住了
192.168.31.222(安装了 netclient 的主机) 成功

抓包日志

  • 192.168.31.160 丢包日志:https://tmp-repo.oss-cn-shanghai.aliyuncs.com/mysql.cap
  • 192.168.31.222 正常日志:https://tmp-repo.oss-cn-shanghai.aliyuncs.com/mysql3.cap

    其他

    我也试过在 192.168.31.160 上部署 mysql 服务,能从阿里云的 172.19.227.25 上正常访问。

测试下来只有 yintan 内网主机 -> 192.168.31.1(br-lan) -> 192.168.10.3(netmaker/yintan-gw) -> 192.168.10.1(netmaker/aliyun-gw) -> 172.19.227.25 这条链路会丢包

共有1个答案

葛兴发
2024-04-07

根据您提供的信息和抓包日志,这个问题看起来可能是由于网络配置或路由问题导致的 TCP 丢包。让我们来分析一下可能的原因和解决方案:

  1. 路由问题:从您提供的路由信息来看,数据包在 192.168.31.160172.19.227.25 之间可能经过了一个或多个不稳定的路由路径。您可以尝试检查 192.168.31.160172.19.227.25 的路由路径,并确认是否存在任何不稳定或配置错误的路由。
  2. 防火墙配置:尽管您的 OpenWrt 防火墙配置看起来相对简单,但仍有可能存在一些规则导致了丢包。您可以尝试临时禁用 OpenWrt 防火墙以检查是否仍然出现丢包问题。如果问题解决了,那么您可能需要重新审查防火墙规则,确保没有阻止 MySQL 连接的规则。
  3. 网络硬件问题:在某些情况下,网络硬件(如交换机、路由器等)可能会导致丢包问题。您可以尝试检查网络硬件的状态和配置,以确保它们工作正常并且配置正确。
  4. TCP 协议问题:TCP 协议的某些参数可能会影响连接的稳定性和丢包率。您可以尝试调整 TCP 协议的参数,例如窗口大小、重传超时等,以查看是否可以改善连接质量。
  5. 抓包日志分析:从您提供的抓包日志中,我们可以看到一些 TCP 重传和丢包的情况。您可以尝试使用网络分析工具(如 Wireshark)对抓包日志进行更详细的分析,以找出导致丢包的具体原因。

综上所述,解决这个问题可能需要您进行一些网络调试和配置调整。建议您从检查路由和防火墙配置开始,并逐步排除其他可能的问题。如果您需要进一步的帮助,可以考虑联系网络管理员或网络专家以获取更详细的指导。

 类似资料:
  • 网络拓扑图 阿里云节点环境 操作系统:ubuntu 22.04LTS 网络配置: 路由信息: 办公室节点环境 操作系统:openwrt 23.05 网络配置: 防火墙配置: 路由信息: 问题 在阿里云主机 172.19.227.25 上安装 mysql 服务,端口为 30000。 通过以下几种方式执行 mysql -uroot -p'xxxx' -P30000 -h172.19.227.25 命令

  • 我通过Spring Boot中编写的侦听器使用JMS对象消息。我正在通过我的Camel应用程序将ObjectMessage发送到ActiveMQ队列,我正在Spring Boot应用程序中的侦听器类中侦听队列。 代码: 这是我的POJO类: 在ActiveMQ队列中,我收到的消息为: 我在Spring Boot中的JMS侦听器: 我得到一个Exception@line: 通过堆栈溢出和网络上的其他

  • 当我使用poi JAR在excel工作簿中写入一些数据时,代码中出现了以下异常: 我添加了以下罐子: > xmlbeans-2.4.0 poi-ooxml-schemas-3.11 poi-3.11 commons-logging-1.1 dom4j-1.6.1 log4j-1.2.17

  • 我试图在Python3.4中创建一个ping服务器的函数。目前它只需要在Windows(可能是XP及以上)上工作。 我发现可以使用WMI Win32_PingStatus(Reference)类ping服务器,并编写了以下函数: 当您可以ping IP时,它返回True,当您不能ping IP时,它返回false。然而,每次运行它时,我都会在末尾出现一系列错误: 每次运行脚本时都会发生这种情况,尽

  • 我正在为tcp服务器使用winsock和C++11线程。对于每个客户端,我都创建一个新的ReceiveThread对象,它有一个std::Thread对象。Tcp客户端在Java。我想创建一个简单的广播功能。(如果某人发送了一条消息,那么服务器将它转发给每个人)。我为客户端套接字使用了一个包装类,其中包括一个互斥体。(synchronized unordered_map)。每个消息都是结构化的。第

  • 问题内容: 我在做什么 : 我预期的输出: 平均=(10 + 20 + 30)/ 5 = 12 MYSQL的输出: 平均值=(10 + 20 + 30)/ 3 = 20 理想情况下,我想要的是MYSQL应该得到5行的总和并除以5,但是它只能除以3(非NULL行) 为什么会发生这种情况,我该怎么做才能获得正确的AVG,即60/5?PS:我不能使标记字段NOT NULL,在我的数据库设计中,标记字段允