libvirt
install
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
create vm
#!/bin/sh
vm_name=$1
vm_img="/var/kvm/vm/${vm_name}.qcow2"
qemu-img create -f qcow2 $vm_img 8G
virt-install \
--name $vm_name \
--ram 512 \
--disk path=$vm_img,format=qcow2 \
--accelerate \
--network network=default,model=virtio \
--cdrom /var/kvm/iso/ubuntu-14.04.3-server-amd64.iso \
--boot cdrom \
--vnc
Kvm虚拟机部署方案
涉及的几个概念:
- Domain: 虚拟机的一个运行实例,简单的理解,就是一个虚拟机虚拟出来的操作系统。它的叫法可是多种多样:instance,guest OS,virsual machine,其实都指的同一个概念。
- Hypervisor: 指的就是虚拟机本身,比如qemu, kvm, xen…
- libvirt 由几个不同的部分组成,其中包括应用程序编程接口 (API) 库、一个守护进程 (libvirtd),以及一个默认命令行实用工具 (virsh),libvirtd守护进程负责对虚拟机的管理工作,在用各种工具对虚拟机进行管理的时候,这个守护进程一定要跑起来,而且这个进程可以分为两种,一种是root权限的libvirtd,一种是普通用户权限的libvirtd,前者权限大,可以虚拟计算机的各种设备。
- 开启root权限的libvirtd守护进程要以root身份去运行:sudo libvirtd –daemon
NET
client 无法上网,需要添加MASQUERADE和开启网卡数据交换参考
第5行中,已经说明做了地址转换而且有数据包通过。
sudo iptables -nL -t nat -v
Chain POSTROUTING (policy ACCEPT 10 packets, 936 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 RETURN all -- * * 192.168.122.0/24 224.0.0.0/24
2 0 0 RETURN all -- * * 192.168.122.0/24 255.255.255.255
3 20 1200 MASQUERADE tcp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
4 0 0 MASQUERADE udp -- * * 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
5 2 168 MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24
6 0 0 MASQUERADE all -- * !docker0 172.17.0.0/16 0.0.0.0/0
Centos 中的客户端地址转换命令
注意SNAT发生在POSTROUTING,所以必须要filter表中的forward允许
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
MASQUERADE
如果vclient不能连接外网,则需要MASQUERADE
sudo iptables -t nat -I POSTROUTING -o enp11s0f0 -j MASQUERADE
如果要做DNAT,就需要有来有回,
iptables -t nat -A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j SNAT --to-source 192.168.1.14
iptables -t nat -A PREROUTING -p tcp -d 192.168.1.14 --dport 55389 -j DNAT --to-destination 192.168.122.2:3389
需要内核支持NAT
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
# CONFIG_HIBERNATION is not set
CONFIG_NF_NAT=y
CONFIG_NF_NAT_NEEDED=y
# CONFIG_NF_NAT_AMANDA is not set
# CONFIG_NF_NAT_FTP is not set
# CONFIG_NF_NAT_IRC is not set
# CONFIG_NF_NAT_SIP is not set
# CONFIG_NF_NAT_TFTP is not set
CONFIG_NF_NAT_IPV4=y
# CONFIG_NF_NAT_PPTP is not set
# CONFIG_NF_NAT_H323 is not set
CONFIG_BRIDGE_EBT_T_NAT=y
CONFIG_BRIDGE_EBT_DNAT=y
CONFIG_BRIDGE_EBT_SNAT=y
CONFIG_NET_VENDOR_NATSEMI=y
# CONFIG_NATSEMI is not set
# CONFIG_NATIONAL_PHY is not set
# Native drivers
CONFIG_CHECK_SIGNATURE=y
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_NAT_IPV4=y