2018 年 1 月 2 日 11:51 KVM-网络配置
eesly_yuan
关注 2015.12.13 20:58* 字数 1153 阅读 5483评论 0喜欢 7 qemu支持的网络模式
qemu向客户机提供了如下四种不同模式的网络 1、基于网桥的虚拟网卡 2、基于nat的虚拟网络 3、QEMU内置的用户网络模式 4、直接分配网络设备的网络(这里先略过) 网络配置参数如下 -net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vertors=v]
默认未配置情况下为 -net nic -net user 即使用上面的第三种模式的网络 查看支持的模拟网络 root@kvm- host1: /disk
qemu-system-x86_64 -net nic,model=?
qemu:
Supported NIC
models:
ne2k_pci,i82551,i82557b,i82559er,rtl8139,e100 0 ,pcnet,virtio 网桥模式
网桥模式1、可以让客户机和宿主机共享一个物理网络设备连接网络,2、也可以让客户机有自己的IP直连与宿主机一摸一样的网络。 这里介绍一下共享一个物理网络设备连接网络的情况,具体示意图如下图所示 基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据,具体做法为:虚拟出一个bridge,将这个bridge绑定到物理网卡上并分配一个对外的地址,再将对应的虚拟机网络设备绑定到这个虚拟bridge的一个端口上。 利用网桥模式使虚拟机共享一个网络设备 qemu-kvm配置网桥模式的步骤如下 在宿主机中安装工具,bridge-utils和tunctl yum install bridge-utils tunctl
| lsmod | grep tun |
#查看是否加载tun模块
modprobe tun
#加载tun模块 建立bridge,并绑定到一个可以正常对外访问的网络接口上,同时让bridge成为本机与外部网络的接口 brctl addbr br0
#添加bridge
brctl addif br0 eth0
#将br0和eth0绑定起来 (可能让网络断掉,最好在本机操作,不要通过网络)
brctl stp br0 on
#将br0设置为启用STP协议
ifconfig eth0 0
#将eth0的IP设置为0
dhclient br0
#将br0网络配置好 建立好bridge后的状态是:eth0进入混杂模式,接收网络中所有数据包,网桥br0进入转发状态 准备开启和关闭客户机的网络配置脚本(创建客户机时带上参数后,客户机开启关闭会自动调用) ################################qemu-ifup.sh
#!/bin/bash
switch=br0
if
[ -n
” $1 “
];
then
#create a tap interface
#tunctl -u $(whoami) -t $1
#start up the tap interface
ip link
set
$ up
sleep 1
#add tap interface to the bridge
brctl addif
${switch} $1
exit
0
else
echo
“error: no interface specified”
exit
1
fi
################################qemu-ifdown.sh
#!/bin/bash
switch=br0
if
[ -n
” $1 “
];
then
#delete the specified interface
tunctl -d
$1
#rlease tap interface from bridge
brctl delif $(switch)
$1
#shutdown the tap interface
ip link
set
$1
down
exit
0
else
echo
“error: no interface specified”
exit
1
fi qemu-kvm启动网桥模式,参数如下 -net tap[,vlan=n][,name=str][,fd=h][,fds= x:y: … :z ][,ifname=name][,script=file]
| [,downscript=dfile][,helper=helper][,sndbuf=nbytes][,vnet_hdr=on | off][,vhost=on | off] |
[,vhostfd=h][,vhostfds= x:y: … :z ][,vhostforce=on|off][,queues=n]
该配置表示连接宿主机的TAP(TAP是模拟数据链路层的虚拟网络设备)网络端口到n号VLAN,
并使用file和dfile作为启动和关闭客户机时的网络配置脚本。
example
qemu-system-x86_64 ***.img -smp 2 -m 1024 -net nic
-net tap,ifname=tap1,script=/etc/qemu-ifup.sh,downscript=no -vnc :0 -daemonize NAT模式
network address translation, 网络地址转换,将内网IP数据包包头中的源IP地址转换为一个外网的IP地址,因此内部IP对外是不可见的,隐藏了内部结构更加安全,但对外提供服务则是其局限性,目前通常采用iptables工具进行端口映射解决。具体示意图如下所示 1、相比使用网桥共享同一个网络设备,其区别在于virbr0并未直接绑定到实际的物理网卡,数据包经过virbr0,进行nat后转到IP包转发后从实际的物理网络设备中出去 2、在nat模式下,需要在宿主机上运行一个DHCP服务器给内网的机器分配IP地址,可以使用dnsmasq工具实现 NAT 配置虚拟机已nat方式连接网络的步骤如下 1检查Linux内核网络配置和nat相关配置是否已经配好 2安装必要的软件包bridge-utils、iptables、dnsmasq 3建立bridge,设置bridge内网IP brctl addbr virbr0
brctl stp virbr0 on
brctl setfd virbr0 0 #设置网络转发延时
ifconfig virbr0 192.168.122.1 netmask 255.255.255.0 up 4将客户机的网络接口与bridge绑定 ifconfig tap0 0.0.0.0 up
brctl addif virbr0 tap0 5打开系统中网络IP包转发功能 echo
1
/proc/sys et/ipv 4/ip_forward 6设置iptables NAT转发规则(采用地址伪装的方式进行nat masquerade服务器的网卡上,自动获取当前ip地址来做SNAT,其中!表示除了这个IP之外的IP) iptables -t nat -A POSTROUTING -s 内网ip/24 ! -d
内网ip/24 -j MASQUERADE 7启动dnsmasq作为为DHCP服务器 将上面3-7写成脚本qemu-ifup-NAT.sh,然后建立qemu-ifdown-NAT.sh脚本实现在关闭虚拟机时解除bridge绑定,删除bridge和清空iptables ################################qemu-ifdown.sh
#!/bin/bash
switch=virbr0
if
[ -n
” $1 “
];
then
#shutdown the tap interface
ip link
set
$1
down
brctl delif
$switch $1
ip link
set
$switch
down
brctl delbr
$switch
iptables -t nat -F
exit
0
else
echo
“error: no interface specified”
exit
1
fi 最后的启动虚拟机的命令行格式如下 qemu-system-x86_64 ***.img -smp
2
-m
1024
-net nic
-net tap,script= /etc/ qemu-ifup-NAT.sh,downscript= /etc/ qemu-ifdown-NAT.sh
-vnc : 0
-daemonize 此时虚拟机应该可以正常访问外部网络,如果需要对外提供服务,则可以采用iptables进行映射,以http服务为例 iptables -t nat -A PREROUTING -p tcp -d 对外的IP –dport 80 -j DNAT –to 192.168.122.140:80 QEMU内部用户模式网络
用户模式网络(默认的网络模式)完全由qemu实现,不依赖其他工具,是qemu使用slirp实现的一整套TCP/IP协议栈,并使用这个协议栈实现了一整套虚拟的NAT网络 这种方式优点在于简单、独立性好、不需要root权限,但存在以下三个缺点 性能较差 不支持部分网络功能,例如ICMP协议 不能从宿主机和外部网络访问客户机
来自
< https://www.jianshu.com/p/110b60c14a8b
已使用 Microsoft OneNote 2016 创建。