У меня есть сервер, которому назначено несколько IP-адресов. Я хотел бы настроить его как гипервизор Xen, чтобы у каждой виртуальной машины был свой выделенный IP-адрес. Сейчас я настраиваю несколько IP-адресов следующим образом:
#IP addresses are examples, actual server has public IPs
auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.0
auto eth0:0
iface eth0:0 inet static
address 192.168.1.11
netmask 255.255.255.0
auto eth0:1
iface eth0:1 inet static
address 192.168.1.12
netmask 255.255.255.0
Я пробовал много вещей с мостом и, честно говоря, я немного теряю надежду найти решение самостоятельно. Как мне заставить Xen использовать один определенный IP для каждого из доменов?
решение1
IP-адреса для каждой виртуальной машины должны быть настроены в самой виртуальной машине, а не на хост-машине.
Полезно представить каждую виртуальную машину и хост с собственными интерфейсами, однако физический кабель выходит только из хоста, поэтому интерфейсы гостевых виртуальных машин необходимо соединить мостом с интерфейсом хоста.
Мост создается в файле /etc/networks/interfaces следующим образом:
auto lo br0 eth0
iface lo inet loopback
iface br0 inet static
bridge_ports eth0
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1
Это создаст новый мост при запуске сетевого стека (например, при загрузке), добавит к нему ваш интерфейс и даст мосту IP-адрес хоста. Здесь вы можете увидеть мост:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.60a4ecf28d84 no eth0
С интерфейсом br0 можно обращаться так же, как с интерфейсом eth0, который он содержит.
Затем в гостевых конфигурационных файлах у вас есть такая строка:
vif = ['bridge=br0, mac=00:16:3E:12:16:19']
Это означает: «дайте этой виртуальной машине виртуальный интерфейс, добавьте ее в мост br0 и дайте ей следующий MAC».
Обратите внимание, что указывать MAC-адрес здесь не обязательно, но я предпочитаю это, поскольку могу использовать DHCP для назначения гостям статического IP-адреса — таким образом мне не нужно жестко кодировать какие-либо IP-адреса, кроме адреса хоста (и DHCP-сервера, который в моем случае сам является виртуальной машиной).
Затем в гостевой системе вы просто настраиваете ее так же, как и любую другую машину Linux:
auto eth0
iface eth0 inet static
address 192.168.1.11
netmask 255.255.255.0
gateway 192.168.1.1
Обратите внимание, что это вгостьконфигурация сети машины.
Когда вы запустите виртуальную машину, вы увидите, что теперь в мосту есть два интерфейса:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.60a4ecf28d84 no eth0
vif1.0
Этот vif1.0 — виртуальный интерфейс гостя. Теперь гость сможет пинговать шлюз и общаться так же, как если бы он был напрямую подключен к вашей сети с помощью кабеля.