设置netplan静态ip时,如果离开一段时间,连接似乎会休眠

设置netplan静态ip时,如果离开一段时间,连接似乎会休眠

我试图通过禁用 cloud-init 在 ubuntu 20.04 服务器上设置静态本地 IP,然后设置我的50-cloud-init.yaml

这是在具有有线连接的 Raspberry Pi 4 上。

network:
    ethernets:
        eth0:
            addresses: [192.168.1.11/24]
            dhcp4: false
            gateway4: 192.168.1.1
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
    version: 2

执行netplan生成然后netplan尝试。成功了,并成功设置静态本地IP。

然而,这会导致“睡眠”。当我通过 ssh 连接到它,然后将其放置一会儿时,输入将需要几秒钟才能再次响应。这不仅是在 SSH 上,我还运行了一个 TCP 服务器,同样的事情发生了,如果离开一段时间,它似乎会休眠。

只有设置静态ip后才会出现这种情况。

任何人都可以建议发生了什么事吗?

答案1

Linux 内置了对keepalive.您可以更改它的设置,sysctl 以便能够在运行时配置内核参数。

涉及 keepalive 的过程使用三个用户驱动的变量:

tcp_keepalive_time:最后发送的数据包(简单的 ACK 不被视为数据)与第一个 keepalive 探测之间的间隔;连接被标记为需要保持活动后,该计数器不再使用

tcp_keepalive_intvl:后续保活探测之​​间的间隔,无论连接同时交换了什么

tcp_keepalive_probes:在考虑连接死亡并通知应用程序层之前发送的未确认探测的数量

您可以尝试使用以下方法更改这些值:

echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes

如果这解决了您的问题,您可以通过以下方式使更改永久化/etc/sysctl.conf

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 20

答案2

我意外地发现了问题的可能原因,我尝试安装 netsniff-ng,不知何故它的安装消除了滞后,唯一显着的变化是 Systemd-timesyncd 被删除,我正在调查这与我的网络问题有何关系。

相关内容