2019/07/18 kvm虚拟化(04)

本文详细介绍KVM虚拟机的网络配置过程,包括使用veth虚拟以太网卡和桥接设备实现虚拟机间的通信,以及如何通过网络名称空间隔离网络。文章还介绍了如何配置虚拟机的网络选项,如网卡模型、MAC地址和桥接接口,以及如何使用DHCP服务器自动分配IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何去使用kvm命令行工具去尝试管理虚拟机当中的,比如创建虚拟机的时候的,指明硬盘说明文件,光盘什么文件的,来尝试安装虚拟机实例,
企业在用虚拟机的实例的时候,很多时候显示不是关键的,更多的是磁盘io和网络

kvm的网络建构是如何进行
没准将来使用的是虚拟机管理平台

网络模型,同一个物理服务器上,启动两个虚拟机实例,这两个虚拟机通信,需要有虚拟网卡,需要介入到2层的通信设备上,交换机(网桥)
对于linux系统,这个网卡构建是独特的,可以通过名称空间中来实现,窗口一个成对的以太网设备,并将其一部分关联到主机上,另外一部分送到,虚拟机实例内部来,虚拟网络名称空间就可以隔离网络的,基于内核中的网络名称空间技术,实现可以创建多个网络,使用容器的时候,就是实现网络名称空间隔离,来构建出多个用户空间的,几个核心技术之一,网卡是成对出现的,可以把一对当作一半放到虚拟机上,另外一半放到虚拟交换机上。
创建出这么一对网卡,ip命令即可实现
ip link add 添加一个设备,还可以指定类型,veth虚拟的以太网卡
在这里插入图片描述
veth虚拟以太网卡
在这里插入图片描述
linux内建有模块可以让你创建桥接接口,直接在内核模拟出一个交换机设备,而这个内核模块输出的应该是系统调用
在这里插入图片描述
brctl命令行工具 show 可以显示你有几个桥设备
在这里插入图片描述
添加网桥addr
addif 向桥添加一个虚拟网卡,
delbr删除桥
delif 删除桥上的网络接口
peer另外一端
创建一堆虚拟网卡,一半关联桥上,相当于把网线插进来,把另外一半放到虚拟机上、
add 随便起个名字veth。1 type类型,
12 是一对网卡设备

在这里插入图片描述
给它个地址并激活这个设备,彼此间就能通信 了,
网络名称空间,list可以列出已经有多少空间
add可以添加 空间 router
可以把刚才创建的接口一半扔到router1里

在这里插入图片描述set可以指明哪个设备在这里插入图片描述
在这里插入图片描述
show的时候就看不到2了,exec在哪个名称空间使用命令,网卡没有激活所有不显示在这里插入图片描述
这就是一个网卡怎么去创建一半一半,如果把网卡激活各自赋予地址,它们是可以进行通信的,相当于veth就是个虚拟机一样,虚拟的是网络地址空间
在本机的vethx。1也给个地址

在这里插入图片描述
在这里插入图片描述
现在可以ping通
在这里插入图片描述

现在就可以删除网卡了
在这里插入图片描述

创建一个内部通信的桥
在这里插入图片描述
还没有激活,ifconfig -a显示,激活可以使用ifconfig br-int up
在这里插入图片描述
就能显示了
在这里插入图片描述
相当于一半在虚拟机上,插网线类似
在这里插入图片描述
在每个虚拟机上需要指定两个nat选项
第一个用来指明自己一段网卡怎么创建
第二个指明添加到哪个网络中去

在这里插入图片描述
网络选项:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v] 指明网卡怎么创建
为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,
virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:

-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]: 加入到哪个桥
	通过物理的TAP网络接口连接至vlan n;
	script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
	downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
	ifname=NAME:自定义接口名称;
	
	/etc/qemu-ifup + 参数(是你的网卡接口)
	
		#!/bin/bash
		#
		bridge=br0

		if [ -n "$1" ];then 判定网卡接口是否非空
			ip link set $1 up  如果不空就激活
			sleep 1
			brctl addif $bridge $1  添加到这个桥上来
			[ $? -eq 0 ] && exit 0 || exit 1 如果正常添加了就退出返回0 
		else
			echo "Error: no interface specified."
			exit 1
		fi	

在这里插入图片描述
在这里插入图片描述
-n测一下有没有语法错误
在这里插入图片描述
在这里插入图片描述
下一次启动虚拟机的时候,就可以尝试连接到这个网络上来了、
qemu会创建网卡,一半链接桥一半链接虚拟机上
启动两个实例
可以使用 --daemonize 以守护进程方式运行
-m 256m 内存
-name c1 名字
-smp 2个核心
-drive 映像文件
media 媒介 磁盘
-net 加哪个桥上去 tap可以设置脚本,script
-vnc 显示为0
-daemonize 以守护进程方式运行
mac地址开头必须是 54:54:00 因为是kvm得到的,后面自己去些即可


在这里插入图片描述
在这里插入图片描述
创建另外一个虚拟机在这里插入图片描述
**br-int已经关联了两个网卡 ,tap0,tap1
**在这里插入图片描述
每个网卡都有两半,tap0另外一半在c1上,tap1在c2上
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
他们之前可以通信,但是无法和外部通信,因为这个桥是在主机没有地址的,宿主机通信没办法实现
在这里插入图片描述
br-init虽然叫桥,但是显示是个网卡,如果配置个地址,就相当于宿主机的网卡,直接可以当网卡用
跟宿主机就可以通信了,这就是仅主机了

在这里插入图片描述
在这里插入图片描述
也可以变为nat,物理机有网卡连接到外部网络中去的,如果打开了宿主机的核心转发,这两个虚拟主机指向254,254收到报文以后,2层到网桥用,3层当网卡路由用,
报文发给宿主机,宿主机发现报文地址不是自己,找一个网卡转发出去

在这里插入图片描述
配置网关
在这里插入图片描述
在这里插入图片描述
最后一条记录
按照道理对方收到,但是是不知道你在什么位置的,所以用了地址转换

在这里插入图片描述
其实是67去ping的68在这里插入图片描述
现在已经使用nat模式了,现在是外部访问不到里面的
在这里插入图片描述
在c1主机上试图去启动ssh服务
在这里插入图片描述
现在是路由信息不可到达,要有dnat规则
在这里插入图片描述
如果目标地址是172.16.0.67 目标端口是 22922 -j DNAT为10…1.1.1的22端口
在这里插入图片描述
-p指定端口
在这里插入图片描述
如果有两个虚拟机和两个宿主机,每宿主机都跑了虚拟机实例,现在期望两个宿主机上的虚拟机能互相通信,最简单就是每个宿主机上的虚拟机都用桥接,但是这样主机就等于暴露在外部网络,所有端口都能被人访问
A主机是私有网络,要想被外部访问,加一个DNAT规则才可以
B主机是私有网络
事实上就是两个宿主机的网卡在进行通信,那就再两个虚拟机上做vpn,是可信可达的

在这里插入图片描述
要想两个虚拟机之间无障碍通信,用叠加网络的方式,隧道网络模型,可以想象成vpn模式,非加密的隧道网络,比如
可以使用GRE,建立一个4层的udp协议隧道,中间的2层的任何报文都可以通过隧道发往另外一台交换机上,这两台交换机好像就直接用网线链接起来了一样,就等 两个都在同一个2层网络,
需要借助一个物理网络,构建出一个隧道网络来,

在这里插入图片描述
哪怕物理上是隔离的,链接交换机,再交换机上基于端口划分vlan
现在A1和A2可以通信,B1B2可以通信

在这里插入图片描述
没准一家公司中的A1A2配置了不同的网络地址,还期望双方路由以后互相通信,中间就需要设置虚拟的路由,不光是交换机设备,linux内核在内核级就支持,虚拟路由设置叫NATNS,可以当虚拟路由来用
现在交换机和路由都是软件实现的,但是彼此他通信还是要硬件设备的,每一个网络设备都是自制系统,对我们是不利的
SDN,交由软件统一控制和驱动的网络
NFV,将来建立云化的IDC的话,这些技术需要了解
一般不会用内核里的桥更多的是使用OVS开放的虚拟交换机(OPEN Vswitch

在这里插入图片描述
刚才的地址是自己配置的,能否自己获取,启动一个dhcp服务器即可,在刚才的交换机那里,设置一个dhcp服务,只负责这个网段的
在这里插入图片描述
dnsmsq,是非常轻量化的,dns转发器和dhcp服务器
在这里插入图片描述
man dnsmsq
在这里插入图片描述
在这里插入图片描述
监听所有地址
在这里插入图片描述
-i表示只监听在哪个端口上
在这里插入图片描述
在这里插入图片描述
dhcp地址池
在这里插入图片描述
-i仅监听 在哪个网卡接口上

选项,42代表ntp-server
在这里插入图片描述
-Fdhcp地址范围,-O 3,网关,
在br-init上 67号端口已经被监听 了

在这里插入图片描述
一旦在网络名称空间中,地址什么冲突了,再启用一个名称空间即可,把这个dnsmsq单独运行再网络名称空间 中

在这里插入图片描述
1,2成对出现,没有问题
在这里插入图片描述
一半放到网络名称空间去,因此先去激活前一半,添加到桥br-int上,类似插网线到交换机上
在这里插入图片描述
add一个dhcpserver,y。2添加到dhcpsrv的虚拟机上,启动dnsmasq
在这里插入图片描述
现在dnsmsq已经运行起来了
在这里插入图片描述
现在重启第二个虚拟机查看能否获取地址
在这里插入图片描述
获取到地址了
在这里插入图片描述
网关指向254
在这里插入图片描述
到此dhcp服务功能的再单机下构建网络

网络选项:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v] 为虚拟机定义网卡
为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,
virtio;
-net nic,model=?
macaddr=mac:指明mac地址;52:54:00:

-net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:  把网卡另外一头插到交换机上去
	通过物理的TAP网络接口连接至vlan n;
	script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
	downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown

在这里插入图片描述

示例1:
~]# qemu-kvm -name c2 -smp 2,maxcpus=4,sockets=2,cores=2 -m 128 -drive file=/images/kvm/cos-i386.qcow2,if=virtio -vnc :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup
示例2:
~]# qemu-kvm -name winxp -smp 1,maxcpus=2,sockets=1,cores=2 -m 1024 -drive file=/data/vms/winxp.qcow2,media=disk,cache=writeback,format=qcow2 file=/tmp/winxp.iso,media=cdrom -boot order=dc,once=d -vnc :1 -net nic,model=rtl8139,macaddr=52:54:00:00:aa:11 -net tap,ifname=tap1,script=/etc/qemu-ifup -daemonize

要想启动多个centos虚拟机,需要先安装centos7虚拟机,当作模板,复制模板几个,完全克隆,每个虚拟机之间是没有关系的,当然也可以每个虚拟机间做快照,去克隆出多个链接克隆来,
但如果基于同一个镜像文件复制多份,启动很多的虚拟机,很多信息是冲突的,尤其是mac地址,
我们需要装好系统后,把里面的地址删除,比如mac地址,把当面主机的私有信息,比如主机名之类的,全部删除,
下次重启再初始化即可,
cloud-init 是一系列的初始化脚本,这个脚本可以尝试把你删除的mac地址i,初始化出来,在这之前要剥离与内核相干的东西
没必要自己去创建,因为centos官方给你做好了镜像文件,也要继续cloud-init做一些初始化

在这里插入图片描述
或者基于OZ的工具做初始化
在这里插入图片描述
kvm管理起来太麻烦了,还是建议用其他的管理工具,virsh命令行工具,对于虚拟机的管理,是基于xml文件来实现的
其他命令还挺好用,比qemu-kvm容易些

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值