Итак, я, наконец, придумал решение, которое я подробно:
В этом Exemple, мы имеем один физический сетевой интерфейс (eth0
), 3 IP-адресов и 3 виртуальных машин:
a.a.a.a
(которые будут использоваться совместно dom0 и один Domů называется VM_A
)
b.b.b.b
(для одного Domů VM_B
)
b.b.b.c
(для одного Domů 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_[BC].cfg) мы будем иметь:
vif = [ 'ip=b.b.b.b,mac=XX:XX:XX:XX:XX:XX' ]
Для сценария конфигурации VM_A
(/ и т.д./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