我目前在 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
(针对一个 domUVM_B
)b.b.b.c
(针对一个 domUVM_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/interfaces
of 的样子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