У меня сейчас 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