На моем сервере есть файл /etc/netplan/50-cloud-init.yaml со следующим содержимым:
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
version: 2
ethernets:
ens3:
dhcp4: true
match:
macaddress: fa:**:**:**:**:**
set-name: ens3
В результате получается следующая конфигурация интерфейса:
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
link/ether fa:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 10.0.0.5/24 brd 10.0.0.255 scope global dynamic ens3
...
Все идет нормально. Но теперь мне нужно добавить 10.0.0.250 в качестве дополнительного вторичного статического IP-адреса к этому интерфейсу. Как лучше всего это сделать? Я создал новый файл /etc/netplan/60-service-ip.yaml с помощью:
network:
version: 2
ethernets:
ens3:
addresses:
- 10.0.0.5/24
- 10.0.0.250/24
Кажется, это работает, но он переопределяет динамический IP-адрес как статический.
На самом деле это проще, вы просто добавляете dhcp4: true
к вашей статической конфигурации (и отключите v6, если она вам не нужна):
network:
version: 2
ethernets:
ens3:
dhcp4: yes
dhcp6: no
addresses:
- 10.0.0.250/24
Копия:
Решение было довольно простым: просто установили статический IP-адрес и включили DHCP. В основном вам просто нужно добавить dhcp4: yes
к вашей конфигурации.
Эта конфигурация дала мне первичный статический IP-адрес и вторичный IP-адрес, назначенный DHCP:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: yes
dhcp6: no
addresses:
- 10.1.2.15/24
gateway4: 10.1.2.1
nameservers:
search:
- example.com
addresses: [10.1.2.10]
Результат показа ip-адреса enp0s3 дал мне:
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:ab:cd:ef brd ff:ff:ff:ff:ff:ff
inet 10.1.2.15/24 brd 10.0.1.255 scope global enp0s3
valid_lft forever preferred_lft forever
inet 10.1.2.96/24 brd 10.0.1.255 scope global secondary dynamic enp0s3
valid_lft 3224sec preferred_lft 3224sec
inet6 fe80::a00:27ff:fe20:2c40/64 scope link
valid_lft forever preferred_lft forever
Адрес 10.1.2.96 - это вторичный адрес, назначенный DHCP, как указано вторичными динамическими ключевыми словами.
У меня была такая же проблема, когда у меня DHCP-адрес был вторичным, а статический - первичным в Azure. Важно оставить адрес DHCP в качестве основного, поскольку виртуальная сеть Azure предоставляет информацию о шлюзе и сервере имен.
Я нашел обходной путь:
network:
version: 2
ethernets:
eth0:
dhcp4: true
addresses:
- 10.0.2.6/24 (IP acquired by DHCP)
- 10.0.2.21/24
match:
macaddress: 00:0d:3a:4f:45:f0
set-name: eth0
В частности, в Azure мы назначаем статический IP-адрес на стороне ресурсов Azure, и обычно он передается гостевой ОС с помощью dhcp. Следовательно, даже если гостевая ОС рассматривает его как динамический IP-адрес, он всегда будет получать тот же статический IP-адрес от Azure.
Выше я заставлял ставить dhcp IP перед вторичным IP.
В моем случае все заработало, как ожидалось.