Networking

設置 netplan 靜態 ip 時,如果離開一段時間,連接似乎處於休眠狀態

  • July 7, 2020

我正在嘗試通過禁用 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 generate 然後 netplan 嘗試。它工作,並成功設置靜態本地IP。

但是,這會導致“睡眠”。當我 ssh 到它,然後離開它片刻,輸入將需要幾秒鐘才能再次響應。這不僅在 SSH 上,我還執行了一個 TCP 伺服器,並且發生了同樣的事情,如果離開一段時間,它似乎會休眠。

它僅在設置靜態 ip 後發生。

誰能建議發生了什麼?

我不小心發現了問題的可能原因,我嘗試安裝 netsniff-ng 並且它的安裝以某種方式消除了滯後,唯一值得注意的變化是 Systemd-timesyncd 被刪除,我正在調查這與我的網路問題有何關係。

Linux 內置了對keepalive. 您可以更改設置,sysctl 以便能夠在執行時配置核心參數。

涉及 keepalive 的過程使用三個使用者驅動的變數:

tcp_keepalive_time:最後一個數據包發送(簡單的ACK不被認為是數據)和第一個keepalive探測之間的間隔;在連接被標記為需要保持連接後,此計數器不再使用

tcp_keepalive_intvl:後續keepalive探測之間的間隔,無論連接在此期間交換了什麼

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

引用自:https://unix.stackexchange.com/questions/596058