You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 22.04 LTS使用Netplan配置静态公网IP频繁断开丢包求助

Ubuntu 22.04 LTS使用Netplan配置静态公网IP频繁断开丢包求助

看起来你遇到的是Netplan配置下公网接口间歇性丢包的棘手问题——毕竟18.04用传统/etc/network/interfaces跑的好好的,换22.04用Netplan就出状况,确实闹心。我先理清楚你的场景:双网卡(公网+内网)静态IP,内网通信正常,但公网丢包率25-35%,已经禁用IPv6但没改善。下面是几个我觉得值得尝试的排查和修复方向:

1. 先清理内网接口的冗余路由配置

你的Netplan里给内网接口ens192加了一条指向192.168.1.32/28的路由,还指定了网关192.168.1.33,但其实这个子网就是ens192本身所在的网段(192.168.1.38/28的子网范围是192.168.1.32~192.168.1.47),这类本地子网的流量根本不需要指定网关,直接通过接口转发就行。多余的路由可能会干扰系统的路由表,导致公网流量被错误转发。

建议修改Netplan配置文件(通常是/etc/netplan/*.yaml),去掉ens192下的routes段:

network:
  ethernets:
    ens160:
      dhcp4: no
      addresses:
        - 80.90.100.44/29
      routes:
        - to: default
          via: 80.90.100.41
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
        search: [local]
    ens192:
      dhcp4: no
      addresses:
        - 192.168.1.38/28
  version: 2

修改后执行sudo netplan apply生效,或者重启网络服务sudo systemctl restart systemd-networkd,观察丢包情况是否缓解。

2. 排查网卡驱动/硬件层面的兼容性问题

Ubuntu 22.04用的内核版本比18.04高很多,部分旧网卡的驱动可能存在兼容性问题,导致间歇性丢包。你可以先试试关闭网卡的TCP卸载功能(这是常见的丢包诱因):

# 临时关闭ens160的TCP收发卸载
sudo ethtool -K ens160 tx off rx off

如果临时关闭后丢包消失了,就把这个设置永久化到Netplan里:

network:
  ethernets:
    ens160:
      dhcp4: no
      addresses:
        - 80.90.100.44/29
      routes:
        - to: default
          via: 80.90.100.41
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
        search: [local]
      ethtool:
        tx: off
        rx: off
    ens192:
      dhcp4: no
      addresses:
        - 192.168.1.38/28
  version: 2

另外,你也可以用lshw -class network查看网卡型号,确认是否有可用的驱动更新,或者尝试切换到旧版本的驱动(如果兼容性问题明确的话)。

3. 查看网络服务的日志找线索

systemd-networkd是Netplan背后的网络管理服务,你可以实时查看它的日志,看看有没有接口断开重连的报错:

journalctl -u systemd-networkd -f

如果日志里频繁出现ens160: Carrier lost或者ens160: Gained carrier的信息,那大概率是物理层的问题——比如网线松动、交换机端口故障,换个网线或者端口试试就行。

4. 确认公网IP是否存在冲突

虽然你说没有IP重叠,但还是可以用arping工具确认下公网IP 80.90.100.44是否被其他设备占用:

sudo arping -I ens160 80.90.100.44

如果有其他设备回应,说明确实存在IP冲突,需要更换公网IP。另外,也可以清理下系统的ARP缓存试试:

sudo ip -s -s neigh flush all

5. 对齐18.04和22.04的网络参数

18.04用的ifupdown和22.04用的systemd-networkd,有些默认网络参数可能不一样,比如MTU值、TCP keepalive参数。你可以先查看18.04上ens160的MTU:

ip link show ens160

然后在22.04的Netplan里给ens160设置相同的MTU:

ens160:
  dhcp4: no
  addresses:
    - 80.90.100.44/29
  mtu: 1500 # 替换成18.04里查到的MTU值
  routes:
    - to: default
      via: 80.90.100.41
  # 其他配置...

你可以先从第一个方法开始试,因为冗余路由的问题最常见也最容易修复。如果还有问题,再逐步排查后面的方向。

备注:内容来源于stack exchange,提问作者erdimeola

火山引擎 最新活动