kvm 虚拟机可以直接连接宿主机和外部网络,而且完全由 qemu
自身完全实现,不依赖于(bridge,dnsmasq,iptables 等),不需要 root 权限。Qemu 使用 slirp 实现了一套 TCP/IP协议栈
,而且用这个协议栈实现了一套虚拟的 NAT
网络
说明
优点:
- 简单、独立性好、不需要 root 权限、客户机网络隔离性好
缺点:
- 性能差
- 不支持部分网络功能(如 ICMP),所以不能再客户机中使用 ping 命令测试
- 不能从宿主机或外部网络直接访问客户机
使用
- -netdev user 介绍
-netdev user[,option][,option][,...]
常用参数:
- net=addr[/mask] 设置客户机可以看到的 IP 地址
- host=addr 指定客户机可见宿主机地址,默认值为客户机所在网络的第 2 个地址
- restrict=y|yes|n|no 如果将此项打开,则客户机将会被隔离,客户机不能与宿主机通信,IP 数据包不能与外部通信,这个选项不会影响到 hostfwd 指定的转发规则
- hostname=hostname 设置在宿主机 DHCP 服务器中保存的客户机主机名
- dhcpstart=addr 设置分配给客户机的第一个 IP,在 qemu 内嵌的 DHCP 服务器中有 16 个 IP 地址可以分配,默认是(如 10.0.2.15~10.0.2.30)
- dns=addr 指定虚拟的 DNS 地址,该地址不能与宿主机一样,默认为网络中的第三个 IP 地址(如:10.0.2.3)
- tftp=dir 激活 QEMU 内嵌的 TFTP 服务器,dir 为 TFTP 服务器的根目录;客户机连接服务器的时候需要使用 binary 模式来操作
- hostfwd=[tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport 将访问宿主机的 hostport 端口的 TCP/UDP 连接重定向到客户机(guestaddr)的 guestport 端口
- guestfwd=[tcp]:server:port-dev 将客户机中访问 ip 地址为 server 的端口的连接转发到宿主机的 dev 字符设备上,可以多次重复使用
- bootfile=file 让 file 文件成为客户机可以使用的 BOOTP 启动镜像文件,它与
tftp
选项联合使用,可以实现从网络启动客户机的功能 - smb=dir[,smbserver=addr]激活 samba 服务器,可以让客户机访问宿主机的 dir 目录,addr 为 samba 服务器地址,addr 为用户网络的第四个地址.(宿主机必须安装 samba 服务器软件)
- 使用 TCP socket 连接客户机
-netdev socket,id=str[,fd=h][,udp=host:port][,localaddr=host:port]
- 使用 UDP 的多播 socket 建立客户机间的连接
-netdev socket,id=str[,fd=h][,mcast=maddr:port[,localaddr=addr]]
- 不分配任何网络设别
-netdev none
- vga 设备
- -vga type 选择为客户机模拟 VGA 卡的类型,可以选类型有如下 4 类:
- cirrus 为客户及模拟出 Cirrus Logic GD5466 显卡,客户机 lspci | grep VGA 可以查看 VGA 卡的类型。
- std 模拟标准的 VGA 卡,带有 Bochs VBE 扩展
- vmware 提供 VMware SVGA-II 支持
- none 关闭 VGA 卡
- -no-frame 使用 SDL 显示时没有边框
- -full-screen 启动客户机时,就自动使用全屏显示
- -alt-grab 使用 ctrl+alt+shift 组合键抢占和释放鼠标
- -ctrl-grab 使用
右ctrl键
去抢占和释放鼠标
root@ubuntu:~# cat /etc/libvirt/qemu/networks/default.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit default
or other application using the libvirt API.
-->
<network>
<name>default</name>
<uuid>fa3964d8-b294-4b23-a600-6e79954bc168</uuid>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:0f:d0:15'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>