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

新手上路,请多包涵

网络拓扑图

阿里云节点环境

  • 操作系统: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 forever
    2: 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 forever
    38: 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 100
    100.100.2.136 via 172.19.31.253 dev eth0 proto dhcp src 172.19.27.60 metric 100
    100.100.2.138 via 172.19.31.253 dev eth0 proto dhcp src 172.19.27.60 metric 100
    172.19.16.0/20 dev eth0 proto kernel scope link src 172.19.27.60 metric 100
    172.19.31.253 dev eth0 proto dhcp scope link src 172.19.27.60 metric 100
    192.168.10.0/24 dev netmaker proto kernel scope link src 192.168.10.1
    192.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 forever
    2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN qlen 1000
      link/sit 0.0.0.0 brd 0.0.0.0
    3: 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:ff
    4: 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 forever
    24: 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 forever
    25: 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 forever
    26: 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-wan
    100.64.128.1 dev pppoe-wan scope link  src 100.64.215.177
    172.19.0.0/16 via 192.168.10.3 dev netmaker
    192.168.10.0/24 dev netmaker scope link  src 192.168.10.3
    192.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 的主机)成功

抓包日志

测试下来只有 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 这条链路会丢包

阅读 457
avatarAI BotBETA

根据您提供的信息和抓包日志,这个问题看起来可能是由于网络配置或路由问题导致的 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)对抓包日志进行更详细的分析,以找出导致丢包的具体原因。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题