Я провел свое исследование, прежде чем спросить здесь; пробовал так много разных вещей, но я уже потерял об этом.
Я использую 20.04 (модифицированная версия, виртуальная машина GNS3 на ESXi) с 10 сетевыми адаптерами. Время от времени, если я вношу изменения в настройки или топологию, имена сетевых карт меняются, поэтому мне нужно, чтобы они были постоянными.
Основное приложение, которое я запускаю, ожидает старое соглашение об именах, в моем случае от Eth0 до Eth9. Ничего страшного.
Вот содержимое файла, который приложение использует в /etc/netplan:
сеть:
  версия: 2
  визуализатор: сетевой
  Ethernet:
    эт0:
      соответствовать:
        макадрес: 00:50:56:00:0a:01
      DHCP4: нет
      адреса:
        - 192.168.100.3/24
      шлюз4: 192.168.100.1
      серверы имен:
        адреса: [1.1.1.1, 8.8.8.8]
    эт1:
      соответствовать:
        макадрес: 00:50:56:00:0a:04
      DHCP4: да
    эт2:
      соответствовать:
        макадрес: 00:50:56:00:0b:01
      DHCP4: да
    эт3:
      соответствовать:
        макадрес: 00:50:56:00:0b:02
      DHCP4: да
    эт4:
      соответствовать:
        макадрес: 00:50:56:00:0b:03
      DHCP4: да
    эт5:
      соответствовать:
        макадрес: 00:50:56:00:0b:04
      DHCP4: да
    эт6:
      соответствовать:
        макадрес: 00:50:56:00:0c:01
      DHCP4: да
    эт7:
      соответствовать:
        макадрес: 00:50:56:00:0c:02
      DHCP4: да
    эт8:
      соответствовать:
        макадрес: 00:50:56:00:0c:03
      DHCP4: да
    эт9:
      соответствовать:
        макадрес: 00:50:56:00:0c:04
      DHCP4: да
Когда я запускаю netplan, применяется там кажется быть без проблем; но фактический вывод sudo netplan --debug generate позволяет мне думать иначе:
** (генерация: 1473): ОТЛАДКА: 14:22:26.352: Обработка входного файла /etc/netplan/01-netcfg.yaml..
** (генерация: 1473): ОТЛАДКА: 14:22:26.353: Обработка входного файла /etc/netplan/90_gns3vm_static_netcfg.yaml..
** (генерация: 1473): DEBUG: 14:22:26.353: запуск нового прохода обработки
** (generate:1473): DEBUG: 14:22:26.353: У нас есть несколько netdefs, пропустите их через последний раунд проверки
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth5: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth4: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth3: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth9: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth2: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth8: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth1: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth7: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth0: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (сгенерировать: 1473): DEBUG: 14:22:26.354: eth6: установка серверной части по умолчанию на 1
** (генерация: 1473): DEBUG: 14:22:26.354: Конфигурация действительна
** (создать: 1473): ОТЛАДКА: 14:22:26.355: Создание выходных файлов..
** (генерация: 1473): DEBUG: 14:22:26.355: openvswitch: определение eth0 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.355: NetworkManager: определение eth0 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.355: openvswitch: определение eth1 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.355: NetworkManager: определение eth1 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: openvswitch: определение eth2 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: NetworkManager: определение eth2 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: openvswitch: определение eth3 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: NetworkManager: определение eth3 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: openvswitch: определение eth4 не для нас (бэкэнд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: NetworkManager: определение eth4 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: openvswitch: определение eth5 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: NetworkManager: определение eth5 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: openvswitch: определение eth6 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.356: NetworkManager: определение eth6 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.357: openvswitch: определение eth7 не для нас (бэкэнд 1)
** (генерация: 1473): DEBUG: 14:22:26.357: NetworkManager: определение eth7 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.357: openvswitch: определение eth8 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.357: NetworkManager: определение eth8 не для нас (бэкенд 1)
** (генерация: 1473): DEBUG: 14:22:26.357: openvswitch: определение eth9 не для нас (бэкэнд 1)
** (генерация: 1473): DEBUG: 14:22:26.357: NetworkManager: определение eth9 не для нас (бэкенд 1)
(генерация: 1473): GLib-DEBUG: 14:22:26.357: posix_spawn избегается (запрошено закрытие fd) 
(генерация: 1473): GLib-DEBUG: 14:22:26.365: posix_spawn избегается (запрошено закрытие fd) 
Вывод dmesg | grep эт
[ 4.621720] e1000e 0000:03:00.0 eth0: (PCI Express:2.5GT/s:Width x1) 00:50:56:00:0a:01
[ 4.621723] e1000e 0000:03:00.0 eth0: сетевое подключение Intel(R) PRO/1000
[4.621865] e1000e 0000:03:00.0 eth0: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 4.733469] e1000e 0000:04:00.0 eth1: (PCI Express:2.5GT/s:Width x1) 00:50:56:00:0b:03
[ 4.733472] e1000e 0000:04:00.0 eth1: сетевое подключение Intel(R) PRO/1000
[4.733577] e1000e 0000:04:00.0 eth1: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 4.845864] e1000e 0000:05:00.0 eth2: (PCI Express:2.5GT/s:ширина x1) 00:50:56:00:0c:03
[ 4.845868] e1000e 0000:05:00.0 eth2: сетевое подключение Intel(R) PRO/1000
[4.845977] e1000e 0000:05:00.0 eth2: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 4.956955] e1000e 0000:0b:00.0 eth3: (PCI Express:2.5GT/s:Width x1) 00:50:56:00:0a:04
[ 4.956959] e1000e 0000:0b:00.0 eth3: сетевое подключение Intel(R) PRO/1000
[4.957087] e1000e 0000:0b:00.0 eth3: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 5.070404] e1000e 0000:0c:00.0 eth4: (PCI Express:2,5 ГТ/с:ширина x1) 00:50:56:00:0b:04
[ 5.070407] e1000e 0000:0c:00.0 eth4: сетевое подключение Intel(R) PRO/1000
[ 5.070531] e1000e 0000:0c:00.0 eth4: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 5.182248] e1000e 0000:0d:00.0 eth5: (PCI Express:2.5GT/s:Width x1) 00:50:56:00:0c:04
[ 5.182251] e1000e 0000:0d:00.0 eth5: сетевое подключение Intel(R) PRO/1000
[ 5.182374] e1000e 0000:0d:00.0 eth5: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 5.294284] e1000e 0000:13:00.0 eth6: (PCI Express:2.5GT/s:Width x1) 00:50:56:00:0b:01
[ 5.294287] e1000e 0000:13:00.0 eth6: сетевое подключение Intel(R) PRO/1000
[ 5.294410] e1000e 0000:13:00.0 eth6: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 5.406343] e1000e 0000:14:00.0 eth7: (PCI Express:2.5GT/s:ширина x1) 00:50:56:00:0c:01
[ 5.406346] e1000e 0000:14:00.0 eth7: сетевое подключение Intel(R) PRO/1000
[ 5.406471] e1000e 0000:14:00.0 eth7: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 5.518208] e1000e 0000:1b:00.0 eth8: (PCI Express:2.5GT/s:ширина x1) 00:50:56:00:0b:02
[ 5.518211] e1000e 0000:1b:00.0 eth8: сетевое подключение Intel(R) PRO/1000
[ 5.518335] e1000e 0000:1b:00.0 eth8: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 5.631213] e1000e 0000:1c:00.0 eth9: (PCI Express:2.5GT/s:ширина x1) 00:50:56:00:0c:02
[ 5.631216] e1000e 0000:1c:00.0 eth9: сетевое подключение Intel(R) PRO/1000
[ 5.631408] e1000e 0000:1c:00.0 eth9: MAC: 3, PHY: 8, номер PBA: 000000-000
[ 9.627269] e1000e 0000:1c:00.0 eth9: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[9.628754] IPv6: ADDRCONF(NETDEV_CHANGE): eth9: ссылка готова
[ 9.729352] e1000e 0000:1b:00.0 eth8: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[9.813525] IPv6: ADDRCONF(NETDEV_CHANGE): eth8: ссылка готова
[ 9.817031] e1000e 0000:14:00.0 eth7: соединение с сетевой картой установлено на скорости 1000 Мбит/с, полный дуплекс, управление потоком: нет
[ 9.913124] e1000e 0000:13:00.0 eth6: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[10.001200] IPv6: ADDRCONF(NETDEV_CHANGE): eth7: ссылка готова
[10.002240] IPv6: ADDRCONF(NETDEV_CHANGE): eth6: ссылка готова
[ 10.004976] e1000e 0000:0d:00.0 eth5: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[ 10.096982] e1000e 0000:0c:00.0 eth4: соединение с сетевой картой установлено на скорости 1000 Мбит/с, полный дуплекс, управление потоком: нет
[10.099025] IPv6: ADDRCONF(NETDEV_CHANGE): eth5: ссылка готова
[10.100038] IPv6: ADDRCONF(NETDEV_CHANGE): eth4: ссылка готова
[ 10.204745] e1000e 0000:0b:00.0 eth3: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[ 10.296669] e1000e 0000:05:00.0 eth2: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[ 10.416662] e1000e 0000:04:00.0 eth1: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[ 10.509219] e1000e 0000:03:00.0 eth0: соединение с сетевой картой установлено, скорость 1000 Мбит/с, полный дуплекс, управление потоком: нет
[10.511526] IPv6: ADDRCONF(NETDEV_CHANGE): eth3: ссылка готова
[10.512287] IPv6: ADDRCONF(NETDEV_CHANGE): eth2: ссылка готова
[10.512964] IPv6: ADDRCONF(NETDEV_CHANGE): eth1: ссылка готова
[10.513602] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: ссылка готова
Вывод ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости 
       valid_lft навсегда
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0a:01 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp3s0
    альтернативное имя ens160
    инет 192.168.100.3/24 brd 192.168.100.255 глобальный охват eth0
       valid_lft навсегда
    ссылка на область inet6 fe80::250:56ff:fe00:a01/64 
       valid_lft навсегда
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0b:03 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp4s0
    альтернативное имя ens161
    ссылка на область inet6 fe80::250:56ff:fe00:b03/64 
       valid_lft навсегда
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0c:03 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp5s0
    альтернативное имя ens162
    ссылка на область inet6 fe80::250:56ff:fe00:c03/64 
       valid_lft навсегда
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0a:04 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp11s0
    альтернативное имя ens192
    ссылка на область inet6 fe80::250:56ff:fe00:a04/64 
       valid_lft навсегда
6: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0b:04 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp12s0
    альтернативное имя ens193
    ссылка на область inet6 fe80::250:56ff:fe00:b04/64 
       valid_lft навсегда
7: eth5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0c:04 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp13s0
    альтернативное имя ens194
    ссылка на область inet6 fe80::250:56ff:fe00:c04/64 
       valid_lft навсегда
8: eth6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0b:01 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp19s0
    альтернативное имя ens224
    ссылка на область inet6 fe80::250:56ff:fe00:b01/64 
       valid_lft навсегда
9: eth7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0c:01 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp20s0
    альтернативное имя ens225
    ссылка на область inet6 fe80::250:56ff:fe00:c01/64 
       valid_lft навсегда
10: eth8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0b:02 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp27s0
    альтернативное имя ens256
    ссылка на область inet6 fe80::250:56ff:fe00:b02/64 
       valid_lft навсегда
11: eth9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel состояние UP группа по умолчанию qlen 1000
    ссылка/эфир 00:50:56:00:0c:02 брд ff:ff:ff:ff:ff:ff
    альтернативное имя enp28s0
    альтернативное имя ens257
    ссылка на область inet6 fe80::250:56ff:fe00:c02/64 
       valid_lft навсегда
12: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    ссылка/эфир 52:54:00:6f:81:c9 brd ff:ff:ff:ff:ff:ff
    инет 192.168.122.1/24 brd 192.168.122.255 глобальная область действия virbr0
       valid_lft навсегда
13: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 состояние DOWN группа по умолчанию qlen 1000
    ссылка/эфир 52:54:00:6f:81:c9 brd ff:ff:ff:ff:ff:ff
14: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    ссылка/эфир 02:42:02:d0:f1:69 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 глобальная область действия docker0
       valid_lft навсегда
Когда я начал пробовать что-то, я понял, что в /etc/network/interfaces (пусто) не было установлено ни network-manager, ни cloud-init, ни что-либо еще.
Любые идеи или решения будут оценены.