В Windows, если мы создадим внешний виртуальный коммутатор в диспетчере Hyper-V, у него будет MAC-адрес сетевой карты, к которой он подключен.
Поэтому я хочу делать подобные вещи в Linux, с помощью systemd-networkd. Моя конфигурация следующая:
[tom@localhost ~]$ ls /etc/systemd/network/
br0.netdev br0.network enp3s0.network
[tom@localhost ~]$ cat /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
MACAddress=ac:22:0b:29:e6:0c
[tom@localhost ~]$ cat /etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
DHCP=ipv4
IPv6AcceptRouterAdvertisements=no
[tom@localhost ~]$ cat /etc/systemd/network/enp3s0.network
[Match]
Name=enp3s0
[Network]
Bridge=br0
IPv6AcceptRouterAdvertisements=no
где ac:22:0b:29:e6:0c
- это MAC-адрес только NIC в системе (который служит в качестве подчиненного устройства br0
).
Вот результат:
[tom@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether ac:22:0b:29:e6:0c brd ff:ff:ff:ff:ff:ff
inet6 fe80::ae22:bff:fe29:e60c/64 scope link
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether ac:22:0b:29:e6:0c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.111/24 brd 192.168.1.255 scope global dynamic br0
valid_lft 85622sec preferred_lft 85622sec
inet6 fe80::ae22:bff:fe29:e60c/64 scope link
valid_lft forever preferred_lft forever
Как видите, теперь enp3s0
и br0
имеют одинаковые link/ether
и inet6
(локальный адрес ссылки).
Пока что, похоже, хорошо сработало. Виртуальные машины, созданные с помощью qemu/kvm, имеют работающую мостовую сеть (с -net bridge -net nic
, которая использует qemu-bridge-helper
). И хозяин, и гости могут нормально подключиться к Интернету.
Однако у меня есть некоторые сомнения относительно того, может ли такая конфигурация вызвать конфликт при определенных обстоятельствах. Итак, мой вопрос, это правильно? Или это плохая / уродливая практика? Если таковые имеются, какие будут возможные проблемы?
РЕДАКТИРОВАТЬ: будет ли какая-либо разница, если я отключу локальный адрес enp3s0
и / или заставить br0
принять объявление маршрутизатора ipv6?
[tom@localhost ~]$ ls /etc/systemd/network/
br0.netdev br0.network enp3s0.network
[tom@localhost ~]$ cat /etc/systemd/network/br0.netdev
[NetDev]
Name=br0
Kind=bridge
MACAddress=ac:22:0b:29:e6:0c
[tom@localhost ~]$ cat /etc/systemd/network/br0.network
[Match]
Name=br0
[Network]
DHCP=ipv4
[tom@localhost ~]$ cat /etc/systemd/network/enp3s0.network
[Match]
Name=enp3s0
[Network]
LinkLocalAddressing=no
IPv6AcceptRouterAdvertisements=no
Bridge=br0
[tom@localhost ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether ac:22:0b:29:e6:0c brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether ac:22:0b:29:e6:0c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.111/24 brd 192.168.1.255 scope global dynamic br0
valid_lft 86357sec preferred_lft 86357sec
inet6 2404:c805:e00:5300:ae22:bff:fe29:e60c/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 1756sec preferred_lft 1756sec
inet6 fe80::ae22:bff:fe29:e60c/64 scope link
valid_lft forever preferred_lft forever