KVM-网络配置

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,e1000,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/net/ipv4/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协议
  • 不能从宿主机和外部网络访问客户机
reference

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容