默认部署的KVM环境使用了一个NAT方式的虚拟网络环境,这样创建的虚拟机可以访问外网,但是外部却不能访问虚拟机的服务。
要在NAT网络提供对外服务,需要在物理主机上设置IP Forwarding,将物理主机的网络端口映射到虚拟主机的网络端口。不过,在此之前还需要确保每个虚拟机启动时获得固定的IP地址,以保证端口映射正确。
libvirt和DHCP
在NAT模式下,libvirt使用了内建的dnsmasq来提供DHCP和DNS解析,可以通过在virsh中设置固定的DHCP IP地址和虚拟机MAC地址绑定来确保每次分配给vm相同的IP地址。
首先找出vm的MAC地址
virsh dumpxml $VM_NAME | grep 'mac address'
编辑网络
virsh net-list
virsh net-edit $NETWORK_NAME
这里 $NETWORK_NAME 通常是default
编辑<dhcp>段落
<dhcp>
<range start='192.168.122.100' end='192.168.122.254'/>
<host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/>
<host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/>
<host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.13'/>
</dhcp>
重启虚拟网络
virsh net-destroy default
virsh net-start default
在kvm宿主机的hosts中加入对应条目后,建议重启KVM宿主机。