Ubuntu 22.04配置Netplan多网卡路由异常:指定子网无法访问服务器
Ubuntu 22.04配置Netplan多网卡路由异常:指定子网无法访问服务器
兄弟,我太懂你这个困扰了——多网卡指定子网路由,结果特定子网连不上服务器,加双默认路由又明显不合理对吧?这问题十有八九是不对称路由搞的鬼,咱们一步步给你捋明白解决。
问题根源分析
你当前的配置里,enp3s0是系统默认路由,所有出站流量都走172.16.8.254。但当10.146.0.0/16这类子网的机器ping你服务器的enp11s0网卡时,服务器收到数据包后,会下意识用默认路由把回包从enp3s0发出去。这就形成了“来的路是enp11s0,回的路是enp3s0”的不对称路径,很多防火墙、路由器会因为安全规则直接丢弃这种回包,所以你就ping不通了。
修正后的Netplan配置
咱们要给服务器加策略路由,让来自指定子网的回包原路返回。修改后的配置如下:
network: version: 2 renderer: networkd ethernets: enp3s0: addresses: - 172.16.8.13/24 nameservers: addresses: [172.16.6.244, 172.16.6.245] routes: - to: default via: 172.16.8.254 metric: 100 # 给主路由加低优先级数值,确保它是系统首选默认路由 enp11s0: addresses: - 10.129.81.215/24 nameservers: addresses: [10.22.73.161, 10.22.73.33] routes: - to: 10.146.0.0/16 via: 10.129.81.10 - to: 10.230.0.0/16 via: 10.129.81.10 - to: 10.138.0.0/16 via: 10.129.81.10 # 关键配置:路由策略,指定来源子网用专属路由表 routing-policy: - from: 10.146.0.0/16 table: 100 - from: 10.230.0.0/16 table: 100 - from: 10.138.0.0/16 table: 100 # 给专属路由表加默认路由,确保回包走enp11s0的网关 routes: - to: 0.0.0.0/0 via: 10.129.81.10 table: 100
配置关键点解释
- metric 100:数值越小路由优先级越高,这个设置保证enp3s0的默认路由始终是系统第一选择,不会被其他路由干扰。
- routing-policy:告诉系统,凡是来自10.146.0.0/16等三个子网的流量,都用编号100的专属路由表处理回包。
- table 100:这个专属路由表里的默认路由指向enp11s0的网关,这样回包就会从enp11s0发出去,和数据包过来的路径完全一致,解决不对称路由的问题。
应用配置并验证
- 生成并应用新配置:
sudo netplan generate sudo netplan apply
- 验证路由是否生效:
# 查看主路由表,确认enp3s0的默认路由优先级最高 ip route show # 查看专属路由表100的内容,确认默认路由指向enp11s0的网关 ip route show table 100 # 查看路由策略规则,确认三个子网的规则已经添加 ip rule show
额外排查点
如果配置后还是不通,可以试试:
- 检查enp11s0所在网络的路由器/防火墙,确保允许10.129.81.0/24到目标子网的回包通行。
- 临时关闭系统的反向路径过滤测试:
sudo sysctl -w net.ipv4.conf.all.rp_filter=0 sudo sysctl -w net.ipv4.conf.enp11s0.rp_filter=0
如果关闭后能通,说明是rp_filter规则拦截了,你可以把这两行加到/etc/sysctl.conf里永久生效。
备注:内容来源于stack exchange,提问作者Gilles Lesire
相关产品推荐
相关产品推荐

