Я использую сервер Debian Linux на Ленни. В нем я запускаю еще один экземпляр Lenny с использованием KVM. Оба сервера доступны извне, с общедоступными IP-адресами, а также со вторым интерфейсом с частными IP-адресами для локальной сети. Все работает нормально, за исключением того, что виртуальная машина видит весь сетевой трафик как исходящий от хост-сервера. Я подозреваю, что это может иметь какое-то отношение к брандмауэру на основе iptables, который я использую на хосте.
Я хотел бы выяснить следующее: как правильно настроить сеть хоста, чтобы выполнялись все эти требования?
В настоящее время сетевые интерфейсы хоста настроены как мосты. eth0 и eth1 не имеют назначенных им IP-адресов, но br0 и br1 имеют.
/etc/network/interfaces
на хосте:
# The primary network interface
auto br1
iface br1 inet static
address 24.123.138.34
netmask 255.255.255.248
network 24.123.138.32
broadcast 24.123.138.39
gateway 24.123.138.33
bridge_ports eth1
bridge_stp off
auto br1:0
iface br1:0 inet static
address 24.123.138.36
netmask 255.255.255.248
network 24.123.138.32
broadcast 24.123.138.39
# Internal network
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports eth0
bridge_stp off
Это файл конфигурации libvirt / qemu для виртуальной машины:
<domain type='kvm'>
<name>apps</name>
<uuid>636b6620-0949-bc88-3197-37153b88772e</uuid>
<memory>393216</memory>
<currentMemory>393216</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='i686' machine='pc'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='cdrom'>
<target dev='hdc' bus='ide'/>
<readonly/>
</disk>
<disk type='file' device='disk'>
<source file='/raid/kvm-images/apps.qcow2'/>
<target dev='vda' bus='virtio'/>
</disk>
<interface type='bridge'>
<mac address='54:52:00:27:5e:02'/>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
<interface type='bridge'>
<mac address='54:52:00:40:cc:7f'/>
<source bridge='br1'/>
<model type='virtio'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target port='0'/>
</console>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' keymap='en-us'/>
</devices>
</domain>
Наряду с остальными моими правилами брандмауэра сценарий брандмауэра включает эту команду для передачи пакетов, предназначенных для гостевой системы KVM:
# Allow bridged packets to pass (for KVM guests).
iptables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT
(Не применимо к этому вопросу, но побочным эффектом моей конфигурации моста, похоже, является то, что я не могу полностью завершить работу. В конечном итоге ядро сообщает мне «unregister_netdevice: ожидание освобождения br1», и мне нужно выполнить полный сброс система. Может знак, что я наделал глупостей?)
Вы подключили свои виртуальные машины к неправильному интерфейсу. Они должны быть подключены к сетевому интерфейсу, который подключается к внешнему миру (br1
в твоем случае).
Имейте в виду, что для каждой виртуальной машины также должен быть установлен свой IP-адрес в гостевой системе, не на хосте.
зачем тебе алиас на br1: 0? это может быть в пути
Помимо псевдонима, идея состоит в том, чтобы использовать следующую схему:
eth0-> br0 <- устройство разветвления ВМ
хост должен иметь возможность использовать br0 в качестве IF, а виртуальные машины будут использовать устройства с ответвлением в качестве виртуальных сетевых адаптеров, подключенных к виртуальному коммутатору (который здесь фактически становится br0)
то же самое, конечно, касается каждой сети, поэтому для eth1 вам нужно будет настроить br1 и поднять виртуальные машины, которые будут подключены к br1
У меня такая же настройка с Lenny / Squeeze VM внутри хоста Lenny с использованием lib-virt и virtio для подключения к br0 (без br1 и br0: 0). Он работает правильно без какой-либо специальной настройки iptables на хосте. Я выполняю всю настройку брандмауэра внутри каждой гостевой виртуальной машины.
Я думаю, вам может быть полезно проверить сетевые маршруты, чтобы узнать, использует ли ваша виртуальная машина хост в качестве шлюза. Мой настроен на использование внешнего маршрутизатора в качестве шлюза. Конечно, моя виртуальная машина и хост находятся на разных IP-адресах в одном диапазоне.