Как добавить статический вторичный IP к интерфейсу DHCP с помощью netplan?

На моем сервере есть файл /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 как статический.

4 ответа

Это на самом деле намного проще, вы просто добавляете dhcp4: true к вашей статической конфигурации, как это (и отключите v6, если вам это не нужно):

network:
    version: 2
    ethernets:
        ens3:
            dhcp4: yes
            dhcp6: no
            addresses:
              - 10.0.0.250/24

У меня была та же проблема, когда у меня был адрес 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.
Выше я вынужден поставить IP-протокол DHCP перед вторичным IP-адресом.
В моем случае все заработало как положено.

Ответил на вопрос Ubuntu

Копирование:

Решение было довольно простым, просто установите статический 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, как указано вторичными динамическими ключевыми словами.

Самый простой способ (и его проще автоматизировать) — создать второй файл с именем «/etc/netplan/60-static.yaml» с содержимым:

      network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      addresses:
        - 10.0.0.250/24

и выполните:

      netplan try
Другие вопросы по тегам