Запускаю две qemu kvm, я их пингую, они меня пингуют, они пингуют интернет, но внезапно, они не видят друг друга в рамках своей же локальной сети построенной на бридже. Может я что-то упустил...
Запускаем две KVM отличающиеся только именами интерфейсов.
for TAP in tap0 tap1; do
qemu-system-x86_64 -bios OVMF.fd \
-enable-kvm \
-snapshot \
-boot c \
-drive file=CRUX.qemu-image.raw,format=raw \
-nic tap,ifname=$TAP
done
Как положено qemu дёргает /etc/qemu-{ifup,ifdown}, содержания:
#!/bin/bash
NETWORK_BRIDGE="br0"
NETWORK_INTERFACE="$1"
/sbin/ip link set $NETWORK_INTERFACE master $NETWORK_BRIDGE
/sbin/ip link set $NETWORK_INTERFACE up
На хост системе в ifconfig виднеются два сетевых интерфейса, tap0 и tap1, без IP-адресов, но в режиме UP, будем считать что так быть и должно(?).
br0 это виртуальный сетевой интерфейс (бридж), который поднимается при запуске хост системы в /etc/rc.local
ip link add br0 type bridge
ip link set br0 up
ip addr add 10.0.0.1/8 dev br0 broadcast +
Которому, конечно, присваивается огроменная подсеть для моего подкроватного энтерпрайза уровня локалхост.
ISC DHCP раздаёт адреса в этой подсети.
subnet 10.0.0.0 netmask 255.0.0.0 {
option domain-name "VirtualMachine";
option domain-name-servers 10.0.0.1;
option routers 10.0.0.1;
range 10.0.0.2 10.255.255.254;
}
Простым запуском qemu
без всяких параметров можно убедиться что оно работает, нажать Ctrl + B для захода в консоль SeaBIOS'а и выполнить dhcp, и убедиться что IP-адрес выдал именно наш DHCP, работающий на br0.
Ну и iptables, в том же /etc/rc.local, который всё это дело маршрутизирует.
WAN=enp2s0 # интерфейс с интернетами провайдера
iptables -P FORWARD DROP
iptables -t filter -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A FORWARD -i br0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o $WAN -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
Так почему же виртуальные машины не видят друг друга, но видят интернет, и я вижу их с хост системы?