[ kvm ] 三种基础网络模型创建及分析
1. 前言
最近在模拟生产环境在做测试,本来准备用 vmware 直接来实现的,本着学以致用的道理,选择直接在linux 环境使用 kvm 来模拟测试,遇到的第一个问题就是,网络环境的模拟。这里对比vmware三种网络模式:桥接、nat、仅主机模式 来做一一对比说明。
2. 网络环境
2.1 桥接模式
桥接模式的定义:在该模式下,宿主机会虚拟出来一张虚拟网卡作为宿主机本身的通信网卡,而宿主机的物理网卡则成为桥设备(交换机),所以虚拟机相当于在宿主机所在局域网内的一个单独的主机,他的行为和宿主机是同等地位的,没有依存关系。
宿主机网段:192.168.118.0/24
(1)配置桥接设备
方法1:
# systemctl start NetworkManager ; systemctl start libvirtd
# virsh iface-bridge ens33 br0
其实不建议使用这种方式,因为使用这种方式不太稳定,如果出错,就无法连接到主机了,慎用!
方法2:
# cd /etc/sysconfig/network-scripts/
# cp -a ifcfg-ens33 ifcfg-br0 修改配置两个配置文件: ifcfg-ens33:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens33
DEVICE=ens33
ONBOOT=yes
BRIDGE=br0 ifcfg-br0:
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.118.11
NETMASK=255.255.255.0
GATEWAY=192.168.118.1
DNS1=61.134.1.4
DNS2=61.134.1.5 # systemctl restart network # ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.118.11 netmask 255.255.255.0 broadcast 192.168.118.255
inet6 fe80::20c:29ff:fe1d:cfd9 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:1d:cf:d9 txqueuelen 1000 (Ethernet)
RX packets 31 bytes 2696 (2.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7 bytes 586 (586.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:1d:cf:d9 txqueuelen 1000 (Ethernet)
RX packets 259364 bytes 150072812 (143.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21622 bytes 1734123 (1.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c291dcfd9 no ens33
手动修改的方式很简单,但是一定要注意单词的拼写正确无误。到目前为止,已经为物理机创建了虚拟网桥设备。写来就是为 KVM 配置桥接网络。
(2)编写 桥接 XML 文件
# cd /etc/libvirt/qemu/networks/
# cat br0.xml
<network>
<name>br0</name>
<forward mode='bridge' />
<bridge name='br0' />
</network> 将 br0.xml 导入 virsh管理 # virsh net-define br0.xml
# virsh net-start br0
# virsh net-autostart br0
(3)创建虚拟机选择 br0 网络测试
桥接网络配置成功。在桥接中,虚拟机的网络是直接通过桥接设备对外访问的,因此不需要 iptables 任何路由转发:
查看 iptables
# iptables -L -nv
Chain INPUT (policy ACCEPT 79143 packets, 69M bytes)
pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 43622 packets, 110M bytes)
pkts bytes target prot opt in out source destination
2.2 nat模型
nat模型定义:
该模式网桥要作为路由器对虚拟机地址进行转发,NAT模式则是将源地址ip改为物理网卡ip发送给目标地址,目标地址ip回传给物理网卡,再将报文发送至虚拟主机。
宿主机网络:192.168.118.0/24
(1)配置桥接设备
(在桥接模式中已经配置过,略过)
(2)编写nat XML 文件
# vim nat.xml <network>
<name>nat</name>
<forward dev='br0' mode='nat'>
<interface dev='br0'/>
</forward>
<bridge name='vir-nat' />
<ip address='192.168.100.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.2' end='192.168.100.253' />
</dhcp>
</ip>
</network> # virsh net-define nat.xml
# virsh net-start nat
# virsh net-autostart nat
# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
br0 active yes yes
nat active yes yes
在这个 XML 文件中,定义了一个 interface 名为:virt-nat 并配置为 192.168.100.1
# ifconfig vir-nat
vir-nat: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255
ether 52:54:00:24:b1:ac txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 # brctl show vir-nat
bridge name bridge id STP enabled interfaces
vir-nat 8000.52540024b1ac yes vir-nat-nic
简单来说,就是为虚拟机配置了一个网关接口,然后这个网关 192.168.100.1 可以和 宿主机的网络通信,这里就需要开通 ip_forward
# sysctl -a | egrep ip_forward
net.ipv4.ip_forward = 1
再次查看下 iptables 规则:
# iptables -L -nv -t nat
Chain PREROUTING (policy ACCEPT 1056 packets, 184K bytes)
pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 67 packets, 11740 bytes)
pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * br0 192.168.100.0/24 224.0.0.0/24
0 0 RETURN all -- * br0 192.168.100.0/24 255.255.255.255
0 0 MASQUERADE tcp -- * br0 192.168.100.0/24 !192.168.100.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * br0 192.168.100.0/24 !192.168.100.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- * br0 192.168.100.0/24 !192.168.100.0/24
重点关注下 POSTROUTING 中最后三条规则:
当 192.168.100.0/24 网段的主机访问非本网段的目标时,则转发到 br0 网卡出去。
这就是nat网络的实现,说白了nat网络就是借助了 iptables 规则来实现转发,iptables 是非常强大的。
(3)创建虚拟机测试nat网络模式
通过上面的测试 nat 网络模式能够访问外网,完成实现。
2.3 仅主机模式
仅主机模式也叫隔离模式,仅仅在宿主机内部进行通信使用。宿主机、宿主机内的虚拟机网络相互连通,但是虚拟机无法访问外部网络。
(1)编写 host-only.xml 文件
# cat host-only.xml
<network>
<name>host-only</name>
<bridge name='vir-host' />
<ip address='192.168.200.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.200.2' end='192.168.200.253'/>
</dhcp>
</ip>
</network> # virsh net-define host-only.xml
# virsh net-start host-only
# virsh net-autostart host-only
在这个XML文件中,创建了一个网桥设备 vir-host 并配置 IP 为: 192.168.200.1 ,对比上面 nat 模式不难发现,host-only 网桥并没有和 br0 建立联系。
(2)创建虚拟机并测试
创建两台虚拟机,测试二者是否可以相互通信且能够与宿主机通信。
、
仅主机模式网络配置完成。
[ kvm ] 三种基础网络模型创建及分析的更多相关文章
- Tomcat内存溢出的三种情况及解决办法分析
Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出.造成内存溢出是不一样的,当然处理方式也不一样. 这里根据平时遇到的情况和相关资料进行一个总结.常见的一般会有下面三种 ...
- Spring 中如何自动创建代理(spring中的三种自动代理创建器)
Spring 提供了自动代理机制,可以让容器自动生成代理,从而把开发人员从繁琐的配置中解脱出来 . 具体是使用 BeanPostProcessor 来实现这项功能. 这三种自动代理创建器 为:Bean ...
- SoapUI、Jmeter、Postman三种接口测试工具的比较分析
前段时间忙于接口测试,也看了几款接口测试工具,简单从几个角度做了个比较,拿出来与诸位分享一下吧.各位如果要转载,请一定注明来源,最好在评论中告知博主一声,感谢.本报告从多个方面对接口测试的三款常用工具 ...
- SoapUI、Jmeter、Postman三种接口测试工具的比较分析——灰蓝
前段时间忙于接口测试,也看了几款接口测试工具,简单从几个角度做了个比较,拿出来与诸位分享一下吧.各位如果要转载,请一定注明来源,最好在评论中告知博主一声,感谢.本报告从多个方面对接口测试的三款常用工具 ...
- 02 Spring框架 简单配置和三种bean的创建方式
整理了一下之前学习Spring框架时候的一点笔记.如有错误欢迎指正,不喜勿喷. 上一节学习了如何搭建SpringIOC的环境,下一步我们就来讨论一下如何利用ioc来管理对象和维护对象关系. <? ...
- 斐波那契数列的三种C++实现及时间复杂度分析
本文介绍了斐波那契数列的三种C++实现并详细地分析了时间复杂度. 斐波那契数列定义:F(1)=1, F(2)=1, F(n)=F(n-1) + F(n-2) (n>2) 如何计算斐波那契数 F( ...
- Spring创建对象的三种方式以及创建时间
创建对象的三种方式: 1.采用默认的构造函数创建 2.采用静态工厂方法 1.写一个静态工厂方法类 public class HelloWorldFactory { public static Hell ...
- 通过GCD、NSOperationQueue队列、NSThread三种方法来创建多线程
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...
- map遍历的三种基础用法
java中遍历MAP的几种方法 Java代码 Map<String,String> map=new HashMap<String,String>(); map.put(& ...
随机推荐
- Vuex之store仓库计算属性Getter
(1)简介 Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里可以通过定义vuex的Getter来获 ...
- 洛谷【P1498】:南蛮图腾(分治算法)
传送门 题目描述就不用看了,直接上样例就行: 输入样例#1: 2 输出样例#1: /\ /__\ /\ /\ /__\/__\ 输入样例#2: 3 输出样例#2: /\ /__\ /\ /\ /__\ ...
- 使用icepdf将pdf文件转换成照片(以及隐藏的一个bug)
首先引入依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox ...
- Redis的入门
什么是NOSQL? NOSQL(Not Only SQL)不仅仅是数据库,是一种全新的理念,泛指非关系型的数据库. 为什么需要NOSQL? 随着互联网的高速崛起,网站的用户群的增加,访问量的上升,传统 ...
- underscore 工具
=============== 通知: 博主已迁至<掘金>码字,博客园可能以后不再更新,掘金地址:https://juejin.im/post/5a1a6a6551882534af25a8 ...
- Go语言 - 反射
reflect包 在Go语言的反射机制中,任何接口值都由是一个具体类型和具体类型的值两部分组成的(我们在上一篇接口的博客中有介绍相关概念). 在Go语言中反射的相关功能由内置的reflect包提供,任 ...
- Nginx 代理到Jetty 页面跳转端口改变问题
Nginx安装 Windows下部署Nginx只需下载安装包,解压启动服务器即可.下载官网:http://nginx.org/en/download.html 操作Nginx首先进入安装文件夹: 查看 ...
- Traefik 2.0 发布了
Traefik 2.0 发布了,包含了很多不错的行特性 tcp 路由(同时也支持sni 路由) 参考配置 tcp: routers: to-db-1: entrypoints: - web-secur ...
- cogs 997. [東方S2] 射命丸文
二次联通门 : cogs 997. [東方S2] 射命丸文 /* cogs 997. [東方S2] 射命丸文 二维前缀和 枚举每个子矩阵 更新最大值.. 莫名rank1 */ #include < ...
- python爬虫出现ProxyError: HTTPSConnectionPool错误
在今天刚刚打开pycharm运行爬虫时,发现所有的爬虫都不能运行,会出现如下的错误: 错误出现的主要原因是;代理错误(其实自己根本没有设置代理) 解决方法: 在网上查阅了许多类似的错误解决方法,试过后 ...