kernel : ubuntu server LTS 22.04.1
我正在尝试在 ubuntu 中通过 netplan 创建子接口,但不幸的是,这不起作用,有人能帮助我吗?我宁愿不使用 vlan,但如果您可以使用 vlan 来做到这一点,那将是一个很大的帮助,我觉得使用 netplan 是不可能的,我可以使用任何其他工具吗?
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
dhcp6: no
addresses:
- <ip>/24
gateway4: <gateway>
eth0:1:
dhcp4: no
dhcp6: no
答案1
同一链路上的辅助 IP 与 VLAN 配置之间存在差异。我猜你想在同一链路上使用辅助 IP,而无需 VLAN 配置。同一链路上有多个 IP 的 netplan 文件如下所示
network:
version: 2
renderer: networkd
ethernets:
ens192:
dhcp4: no
dhcp6: no
addresses:
- 1.2.3.4/24
- 1.2.3.5/24 # same subnet
- 6.7.8.9/24 # different subnet
请注意:您可以使用该命令看到辅助 Ips ip a
,但使用传统命令则看不到ifconfig
。
如果您需要 2 个桥接接口并且只有一个物理接口,则必须使用 VLAN。
The netplan config looks like
network:
version: 2
renderer: networkd
ethernets:
ens192:
dhcp4: no
dhcp6: no
vlans:
vlan10:
accept-ra: no
id: 10
link: ens192
vlan20:
accept-ra: no
id: 20
link: ens192
bridges:
br-internal:
interfaces: [ vlan10 ]
addresses: [ 10.3.99.25/24 ]
br-external:
interfaces: [ vlan20 ]
请参阅 netplan 文档以了解所有选项。 https://netplan.io/examples/#configuring-network-bridges
答案2
总结
Netplan 没有别名(按照您的说法是“子接口”)但允许标记接口。
详细答案
我也在寻找类似的东西。这里有几件事需要解析。
首先,“子接口”严格来说是一种接口别名,现在已经“过时”了。根据: https://www.kernel.org/doc/html/latest/networking/alias.html
IP 别名是管理每个接口的多个 IP 地址/掩码的过时方法。较新的工具(如 iproute2)支持每个接口的多个地址/前缀,但为了向后兼容,仍支持别名。
在这个基本层面上,Linux 内核支持别名。不过,我认为为接口创建别名的能力来自较旧的网络配置工具,如ifconfig
和route
其次,该iproute2
软件包及其实用程序是网络配置的现代方法。它允许为一个接口分配多个地址,而无需别名。
第三,netplan,这是另一种通过 yaml 文件配置网络和接口的新方法。
具体到您的问题,您最终将在您的接口上为每个 IP 地址定义不同的路由。Netplan做提供接口标签,但我不认为这对于你实现目标来说是必要的。(摘自文档)
ethernets:
enp3s0:
addresses:
- 10.100.1.37/24
- 10.100.1.38/24:
label: "enp3s0:0"
- 10.100.1.39/24:
label: "enp3s0:some-label"
注意!在 netplan 配置中,gateway4
已弃用,因此请routes
按照文档中显示的方式使用。(目前还不会出错,但会给出警告。)
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.0.0.10/24
- 11.0.0.11/24
routes:
- to: default
via: 10.0.0.1
metric: 200
- to: default
via: 11.0.0.1
metric: 300
进一步阅读,特定于在环回上添加多个地址的链接,以防有人来寻找。
https://bugs.launchpad.net/ubuntu/+source/netplan.io/+bug/1968287
https://github.com/canonical/netplan.io/pull/225
renderer: networkd
ethernets:
lo:
match:
name: lo
addresses: [ "127.0.0.1/8", "::1/128", "7.7.7.7/32" ]