执行ip route add时出现RTNETLINK answers: File exists,表示内核认为相关路由表中已经存在与本次新增请求冲突的条目。报错不一定意味着两行显示文本完全相同。
远程VPS改路由前必须保留控制台或第二条管理通道,避免误删默认路由后失联。

File exists为何不只是重复命令
ip-route(8)区分add、change与replace:add只新增,change只修改现有路由,replace则修改或新增。内核会按目标前缀、路由表、类型等属性判断新增请求是否冲突。
现有路由可能由DHCP、RA、VPN、云初始化或网络管理器创建。只看主路由表的一行输出,容易遗漏其他表和策略规则。
先定位路由表与实际选路
执行ip -details route show table all查看全部表及协议来源,用ip rule show检查策略规则,再用ip route get 目标IP观察内核实际选择的出口、源地址和下一跳。IPv6应使用ip -6 route单独检查。
记录冲突前缀的table、metric、proto、scope和设备。不要在未确认目标表时直接删除看起来相似的默认路由。
选择replace、change或精确删除
目标是让配置幂等并允许不存在时创建,可使用完整参数的ip route replace 203.0.113.0/24 via 192.0.2.1 dev eth0;只允许修改既有条目时使用change。必须删除时,先复制完整路由属性,再执行精确的ip route del,确认后添加新项。
replace也会立即改变转发行为,不能把它当无风险的消除报错选项。默认路由、管理网段和策略路由应在维护窗口逐项验证。
运行时修改为何会再次出现
ip route修改的是内核运行时状态。NetworkManager、systemd-networkd、Netplan、ifupdown、DHCP客户端或云初始化可能在续租、重启或链路恢复时重新写入路由。
找到路由的真实配置源,再在对应网络管理工具中持久化。不要同时在多个管理器里声明同一前缀;修改前备份原配置并使用各工具的语法检查功能。
变更后的验收方法
在保留原SSH会话的同时,新开会话执行ip route get、网关连通测试和业务端口测试,并重启对应网络服务或在维护窗口重启验证持久性。可在萤光云或LightNode的测试VPS演练双默认路由与策略表。验收标准是冲突报错消失、选路和源地址符合设计,重载后没有重复项,远程管理链路保持可用。
FAQ
问:直接用replace一定比del再add安全吗?答:replace可缩短空窗,但仍会立即改变路由,参数错误同样可能导致失联。
问:主表没有重复项为什么仍报错?答:应检查指定表、策略规则、路由类型及完整前缀属性。
问:metric不同可以共存吗?答:取决于路由类型、表和完整键值,不能只凭metric判断。
问:重启后路由又回来了怎么办?答:说明持久配置源仍在下发,应检查网络管理器、DHCP、云初始化或VPN配置。
问:可以远程重启network服务吗?答:风险较高,应先准备云控制台、带外管理或可自动回滚的维护方案。
温馨提示
温馨提示:保存修改前后的ip -details route和ip rule输出。涉及默认路由时,设置短时回滚任务并确认带外控制台可用,再进行持久化变更。


