我目前在一个debian wheezy dom0上的Xen。 我有6(公共)ips,我想设置6个虚拟机(每个使用一个IP)。
为了保持对dom0的访问,我想dom0 ssh绑定在一个IP端口上(比如说4444)。 我不知道从哪里开始。 任何指针?
所以,我终于想出了一个解决scheme,我将细节:
在这个例子中,我们有一个物理networking接口( eth0 ),3个IP和3个虚拟机:
aaaa (将由dom0和一个名为VM_A domU VM_A ) bbbb (对于一个domU VM_B ) bbbc (对于一个domU VM_C ) dom0 / etc / network / interface:
auto xenbr0 iface xenbr0 inet static bridge_ports eth0 address aaaa netmask 255.255.255.0 network aaa0 broadcast aaa255 gateway aaa254
/etc/xen/xend-config.sx中使用的默认vif脚本将是(vif-script vif-bridge) 。 这是针对具有自己的IP的VM_B和VM_C 。
对于VM_B和VM_C (/ VM_B / VM_C [ VM_B VM_C )的configuration脚本,我们将有:
vif = [ 'ip=bbbb,mac=XX:XX:XX:XX:XX:XX' ]
对于VM_A的configuration脚本(/etc/xen/VM_A.cfg),我们将有:
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 aaaa --dport 22 -j DNAT --to 192.168.0.1:22 iptables -t nat -A PREROUTING -p tcp -d aaaa --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
最后这里是VM_A的/etc/network/interfaces如何:
# 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 aaaa 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添加到给定的地址来select。
而VM_A和其他虚拟机之间的通信的最后一件事(不过,不要问我为什么…):
echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables