如何在 XEN 中为 dom0 和一个 domU 使用相同的 IP

如何在 XEN 中为 dom0 和一个 domU 使用相同的 IP

我目前在 debian wheezy dom0 上有一个 Xen。我有 6 个(公共)ip,我想设置 6 个虚拟机(每个使用一个 IP)。

为了保持对 dom0 的访问,我希望 dom0 ssh 绑定到一个 IP 端口(比如说 4444)。我真的不知道从哪里开始。有什么提示吗?

答案1

因此,我最终想出了一个解决方案,我将详细说明:

在此示例中,我们有一个物理网络接口(eth0)、3 个 IP 和 3 个 VM:

  • a.a.a.a(将由 dom0 和一个名为 的 domU 共享VM_A
  • b.b.b.b(针对一个 domU VM_B
  • b.b.b.c(针对一个 domU VM_C

dom0 /etc/网络/接口:

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)。这是针对拥有自己 ip 的VM_B和的。VM_C

VM_B对于和(/etc/xen/VM_[BC].cfg)的配置脚本VM_C,我们将有:

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

对于 (/etc/xen/VM_A.cfg) 的配置脚本VM_A,我们将有:

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

我们必须添加 iptables 规则才能使其VM_A对 Internet 可见:

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/interfacesof 的样子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

相关内容