如何在Amazon Linux 2023的DHCP路由上持久化应用initcwnd/initrwnd配置
我完全懂你遇到的麻烦——手动改路由参数后DHCP续租就失效,硬编码网关又会搞出重复路由,确实挺闹心的。好在systemd-networkd本身就支持在DHCP动态获取路由时自动套用这些TCP窗口参数,不用折腾脚本或者硬写固定配置。
下面是适配Amazon Linux 2023环境的具体解决方案:
核心思路
别手动添加新路由,也不用硬编码网关信息,而是通过systemd-networkd的drop-in配置,告诉DHCP客户端在获取路由时自动带上initcwnd和initrwnd参数。这样既能保留DHCP的动态配置能力,又能持久化你的TCP窗口设置。
操作步骤
确认网卡的默认配置文件
先找到对应网卡(比如你的enX0)的systemd默认网络配置文件,通常在/usr/lib/systemd/network/目录下,文件名类似10-enX0.network。可以用以下命令查看:ls /usr/lib/systemd/network/ | grep enX0创建drop-in配置目录
为了不修改系统默认配置,我们用drop-in方式添加自定义设置。创建对应配置文件的子目录:mkdir -p /etc/systemd/network/10-enX0.network.d(注意把
10-enX0.network替换成你实际查到的文件名)编写自定义配置文件
在刚才创建的目录下新建一个配置文件,比如20-tcp-window.conf:vi /etc/systemd/network/10-enX0.network.d/20-tcp-window.conf写入以下内容:
[Match] Name=enX0 [DHCPv4] RouteInitialCongestionWindow=50 RouteInitialAdvertisedReceiveWindow=50这个配置的作用是:匹配
enX0网卡,在处理DHCPv4返回的路由时,自动将初始拥塞窗口和初始接收窗口设置为50。应用配置并验证
重新加载systemd-networkd配置:systemctl reload systemd-networkd然后重新配置网卡让设置生效:
networkctl reconfigure enX0现在查看路由,应该已经带上了目标参数:
ip route show你会看到类似这样的输出:
default via 10.0.0.1 dev enX0 proto dhcp src 10.0.0.211 metric 1024 initcwnd 50 initrwnd 50验证DHCP续租后的效果
可以手动触发DHCP续租来测试:networkctl renew enX0再次查看路由,参数应该依然存在,且不会出现重复的默认路由。
补充说明
- 如果你的环境使用IPv6,只需在配置中添加
[DHCPv6]段,同样设置RouteInitialCongestionWindow和RouteInitialAdvertisedReceiveWindow即可。 - 这种方式完全依赖DHCP的动态配置,不需要硬编码网关、metric等信息,完美适配你的需求。
备注:内容来源于stack exchange,提问作者Bobby Impollonia

