KVM + netplan: отключить шлюзы по умолчанию DHCP на гостевой машине с несколькими сетевыми картами (cloud-init/netplan)
Я хотел бы настроить очень "простую" конфигурацию в гостевом Ubuntu Server 18.04 LTS под KVM:
сетевой интерфейс NIC, управляемый DHCP, способный получать некоторые статические правила маршрутизации от DHCP и некоторое локальное разрешение DNS в "локальном" домене
исходящий доступ NAT к Интернету через другой интерфейс, управляемый через DHCP, с открытым разрешением DNS
На хосте (Ubuntu Desktop) в KVM я определил две сети, обе из которых включены для DHCP:
- "по умолчанию" как NAT
- "public1" как маршрутизированный
На хосте доступ в Интернет настроен с помощью NetworkManager для подключения к Wi-Fi.
В гостевой системе я определил два сетевых адаптера, которые обрабатываются DHCP в обеих сетях.
При такой настройке гостевая ОС получает два шлюза"по умолчанию" с неоднозначностью маршрутизации, которая вызывает проблемы с подключением к Интернету.
# at guest
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.122.1 0.0.0.0 UG 100 0 0 ens5
0.0.0.0 192.168.200.1 0.0.0.0 UG 100 0 0 ens4
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 ens5
192.168.122.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens5
192.168.200.0 0.0.0.0 255.255.255.0 U 0 0 0 ens4
192.168.200.1 0.0.0.0 255.255.255.255 UH 100 0 0 ens4
На хосте конфигурация сети KVM:
<network>
<name>default</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
<network>
<name>public1</name>
<forward mode='route'/>
<bridge name='virbr2' stp='on' delay='0'/>
<domain name='pub.local.net'/>
<ip address='192.168.200.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.200.128' end='192.168.200.254'/>
</dhcp>
</ip>
<route address='192.168.210.0' prefix='24' gateway='192.168.200.1' metric='3040'/>
</network>
в гостевой системе настроены значения по умолчанию "cloud-init", генерирующие конфигурацию 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:
ethernets:
ens4:
dhcp4: true
ens5:
dhcp4: true
version: 2
Чтобы разрешить неоднозначность шлюза по умолчанию, я попытался вызвать определение метрики шлюза в гостевой системе, но безуспешно:
#/etc/netplan/99-config.yaml
network:
version: 2
ethernets:
# ens4:
# dhcp4: true
ens5:
dhcp4: true
# dhcp4-overrides:
# route-metric: 90
routes:
- to: 0.0.0.0/0
via: 192.168.122.1
metric: 90