如何在Netplan(v0.99/Ubuntu 18)中为同一VLAN子接口配置两个主IP地址
我完全懂你的困扰——在Ubuntu 18.04搭配Netplan v0.99时,直接在VLAN配置里加两个同子网IP,只会得到一个主IP、一个次级IP,没法像以前老款网络配置那样生成eth1.10:0这种带标签的虚拟子接口,而且还没法升级Netplan到支持标签功能的v0.100版本对吧?下面给你两个实用的解决办法,不用升级就能实现需求:
方法一:通过Netplan路由策略实现双主IP功能
虽然Netplan v0.99不支持标签子接口,但可以通过配置源路由策略,让两个IP都能作为主IP主动对外通信(表面上ip addr还是会显示一个主一个次,但实际功能和双主IP完全一致)。
你可以把Netplan配置改成这样:
network: version: 2 ethernets: eth1: dhcp4: false dhcp6: false vlans: vlan10: id: 10 link: eth1 dhcp4: false dhcp6: false addresses: - 50.0.10.254/24 - 50.0.10.253/24 # 为每个IP创建单独的路由表 routes: - to: 0.0.0.0/0 via: 50.0.10.1 # 替换成你的实际网关地址 table: 100 - to: 0.0.0.0/0 via: 50.0.10.1 table: 200 # 配置路由策略:从哪个IP出发的流量用对应路由表 routing-policy: - from: 50.0.10.254/32 table: 100 - from: 50.0.10.253/32 table: 200
配置完成后执行sudo netplan apply生效。这个配置的核心是让两个IP各自拥有独立的默认路由,系统会根据流量的源IP选择对应的路由,这样两个IP都能主动发起连接,完全达到双主IP的效果。
方法二:用传统命令+systemd模拟老款标签子接口
如果你更怀念eth1.10:0这种直观的虚拟子接口形式,可以先通过Netplan配置基础的VLAN,再用ip命令手动添加带标签的IP,然后通过systemd实现开机自动配置。
步骤1:配置基础VLAN的Netplan文件
network: version: 2 ethernets: eth1: dhcp4: false dhcp6: false vlans: vlan10: id: 10 link: eth1 dhcp4: false dhcp6: false addresses: - 50.0.10.254/24
执行sudo netplan apply让基础配置生效。
步骤2:创建systemd服务实现开机自动添加第二个IP
创建一个名为vlan-add-ip.service的服务文件,路径为/etc/systemd/system/vlan-add-ip.service,内容如下:
[Unit] After=network.target [Service] Type=oneshot ExecStart=/sbin/ip addr add 50.0.10.253/24 dev vlan10 label vlan10:0 RemainAfterExit=yes [Install] WantedBy=multi-user.target
然后执行以下命令启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable vlan-add-ip.service sudo systemctl start vlan-add-ip.service
现在你用ip addr就能看到vlan10:0这个虚拟子接口,两个IP都是主IP,和你之前老配置的效果完全一致。
额外说明:关于VRRP的选择
你提到的VRRP配置确实能实现VIP,但它主要是为多主机高可用场景设计的。如果只是单服务器需要两个同子网主IP,上面两种方法会更直接、轻量,不需要额外的VRRP服务依赖。
备注:内容来源于stack exchange,提问作者dandreye

