Назад | Перейти на главную страницу

Как использовать один и тот же IP для dom0 и одного domU в XEN

У меня сейчас Xen на debian wheezy dom0. У меня 6 (общедоступных) IP-адресов, и я хотел бы настроить 6 виртуальных машин (каждая с одним IP).

Чтобы сохранить доступ к dom0, я бы хотел, чтобы dom0 ssh привязался к одному IP-порту (скажем, 4444). Я действительно не знаю, с чего начать. Есть указатели?

Итак, я наконец придумал решение, которое подробно опишу:

В этом примере у нас есть один физический сетевой интерфейс (eth0), 3 IP и 3 ВМ:

  • a.a.a.a (который будет общим для dom0 и одного domU с именем VM_A)
  • b.b.b.b (для одного дома VM_B)
  • b.b.b.c (для одного дома VM_C)

dom0 / и т.д. / сеть / интерфейс:

auto xenbr0 
iface xenbr0 inet static
    bridge_ports eth0
    address a.a.a.a
    netmask 255.255.255.0
    network a.a.a.0
    broadcast a.a.a.255
    gateway a.a.a.254

Скрипт vif по умолчанию, используемый в /etc/xen/xend-config.sx будет (vif-script vif-bridge). Это для VM_B и VM_C у которых есть свой ip.

Для сценария конфигурации VM_B и VM_C (/etc/xen/VM_[BCpting.cfg) у нас будет:

vif = [ 'ip=b.b.b.b,mac=XX:XX:XX:XX:XX:XX' ]

Для сценария конфигурации VM_A (/etc/xen/VM_A.cfg) у нас будет:

vif = [ 'ip=192.168.0.1,script=vif-nat']

Нам нужно добавить правила iptables, чтобы VM_A видны в Интернете:

iptables -t nat -A POSTROUTING -s 192.168.0.1 -o xenbr0  -j MASQUERADE
# One rule for each port that need to be forwarded to `VM_A`
iptables -t nat -A PREROUTING -p tcp -d a.a.a.a --dport 22 -j DNAT --to 192.168.0.1:22
iptables -t nat -A PREROUTING -p tcp -d a.a.a.a --dport 80 -j DNAT --to 192.168.0.1:80

Также необходимо включить пересылку пакетов (/etc/sysctl.conf):

net.ipv4.ip_forward=1
net.ipv4.conf.eth0.proxy_arp=1

И, наконец, вот как /etc/network/interfaces из VM_A выглядит как :

 # The loopback network interface
 auto lo
 iface lo inet loopback

 # 'Fake' loopback interfaces (was needed in my case for some applications)
 auto lo:1
 iface lo:1 inet static
  address a.a.a.a
  netmask 255.255.255.255

 # The primary network interface
 auto eth0
 iface eth0 inet static
  address 192.168.0.1
  gateway 192.168.0.128
  netmask 255.255.255.0

Адрес шлюза 192.168.0.128 выбран vif_script добавив 127 к данному адресу.

И последнее, что касается общения между VM_A и другие виртуальные машины (правда, не спрашивайте меня, почему ...):

echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables