Ubuntu 22.04双网卡独立默认网关的Netplan与iproute2配置问题求助
嘿,我来帮你搞定这个双网卡配置的问题!Ubuntu 22.04确实彻底换掉了旧的/etc/network/interfaces配置方式,改用Netplan来管理网络,而且你之前的iproute2配置也犯了个小错误,咱们一步步来解决:
一、用Netplan替代旧的interfaces配置
首先,Netplan的配置文件都在/etc/netplan/目录下,通常是类似00-installer-config.yaml这样的文件(如果没有就新建一个)。你需要把原来的静态IP和双网关需求转换成Netplan的YAML格式,注意YAML对缩进要求很严格,一定要用空格不要用Tab:
network: version: 2 renderer: networkd # 服务器环境用networkd,桌面版可以替换为NetworkManager ethernets: enp7s0: addresses: [192.168.0.101/24] routes: - to: default via: 192.168.0.1 table: 100 # 给这个网卡指定专属路由表,编号自定义即可 routing-policy: - from: 192.168.0.101/32 table: 100 # 让从该IP发出的流量走专属路由表 enp8s0: addresses: [192.168.1.16/24] routes: - to: default via: 192.168.1.1 # 这里替换为你这个网段的实际网关地址 table: 200 routing-policy: - from: 192.168.1.16/32 table: 200
配置好之后,执行以下命令生效:
sudo netplan generate # 生成配置文件 sudo netplan apply # 应用配置
你可以用下面的命令验证是否配置成功:
ip route show table 100 # 查看enp7s0的专属路由表 ip route show table 200 # 查看enp8s0的专属路由表 ip rule show # 查看路由规则
二、修复iproute2的rt_tables错误
你之前犯了一个关键错误:把路由命令直接写到了/etc/iproute2/rt_tables文件里!这个文件的作用只是定义路由表的编号和名称的映射关系,只能写[编号] [表名]这种格式,不能放任何ip route或ip rule命令,这就是你执行ip rule show时提示文件损坏的原因。
正确的rt_tables配置应该是这样的:
打开/etc/iproute2/rt_tables文件,添加以下两行(编号要和Netplan里的table对应):
100 rt2 200 rt3
其实如果用了上面的Netplan配置,Netplan会自动帮你配置路由和规则,不需要再手动执行那些ip route和ip rule命令了,省了不少事~
最后验证
配置完成后,你可以分别从两个网卡的IP发起请求,测试是否各自走对应的网关,比如用curl --interface enp7s0 ifconfig.me和curl --interface enp8s0 ifconfig.me来查看出口IP是否符合预期。
备注:内容来源于stack exchange,提问作者God of Money

