Nat模式

在这里插入图片描述

注意:
[root@localhost ~]# yum info firewalld
不同版本的firewalld工具,对iptables规则的影响不一样,如果使用的是 centos7.7之前的版本,那么防火墙版本应该在: 0.6.3.2.el7版本,这时候,防火墙必须是打开的状态才可以看到路由转发规则。
在这里插入图片描述
而到了centos7.8版本的时候,firewalld防火墙版本已经更新,现在 firewalld工具必须是关闭状态,才可以看到路由转发规则。
在这里插入图片描述

查看路由转发规则,或者iptables-save命令 ,都可以

[root@localhost ~]# iptables -t nat -L

KVM默认的网络方式,如果想要使用这种模式(centos7.7之前)防火墙需要打开,因为需要用到iptables规则

# 防火墙添加规则,打开5900端口
[root@localhost ~]# firewall-cmd --add-port=5900/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all

添加路由转发

[root@localhost ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1

NAT模式自定义网段

1、直接修改我们现在使用的default网络的信息
[root@kvm01 ~]# virsh net-edit default
……
  <ip address='192.168.120.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.120.2' end='192.168.120.254'/>
    </dhcp>
……

[root@kvm01 ~]# virsh net-destroy --network default
[root@kvm01 ~]# virsh net-start --network default

[root@kvm01 ~]# virsh net-dumpxml default 
<network>
  <name>default</name>
  <uuid>795e355e-4265-498a-ac30-336d7af9c47a</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:6d:6b:d9'/>
  <ip address='192.168.120.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.120.2' end='192.168.120.254'/>
    </dhcp>
  </ip>
</network>

此时,kvm虚拟机的virbr0网卡的IP地址就改变了

[root@kvm01 ~]# ip a
……
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:6d:6b:d9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.120.1/24 brd 192.168.120.255 scope global virbr0
       valid_lft forever preferred_lft forever
……

打开虚拟机test01,仍然用dhcp的方式获取IP地址,就会看到kvm虚拟机域获取到的IP地址已经变了

[root@kvm01 ~]# virsh start test01
[root@kvm01 ~]# virsh vncdisplay test01 
:0
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp
ONBOOT=yes

[root@localhost ~]# systemctl restart network

在这里插入图片描述

2、可以去自定义一个网段
[root@kvm01 ~]# virsh net-dumpxml default > test.xml
[root@kvm01 ~]# vim test.xml
<network>
<name>test</name>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr1' stp='on' delay='0'/>
<ip address='192.168.110.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.110.2' end='192.168.110.254'/>
</dhcp>
</ip>
</network>
[root@kvm01 ~]# virsh net-create test.xml
Network test created from test.xml

[root@kvm01 ~]# virsh net-list
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              active     yes           yes
 test                 active     no            no

[root@kvm01 ~]# virsh net-dumpxml test
<network>
<name>test</name>
<uuid>c620e968-5c5e-48fc-8319-5fd8a1fbdab7</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:b0:36:b9'/>
<ip address='192.168.110.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.110.2' end='192.168.110.254'/>
</dhcp>
</ip>
</network>

[root@kvm01 ~]# ip a
...
5: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500
qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:b0:36:b9 brd ff:ff:ff:ff:ff:ff
inet 192.168.110.1/24 brd 192.168.110.255 scope global
virbr1
valid_lft forever preferred_lft forever
6: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc
pfifo_fast master virbr1 state DOWN group default qlen
1000
link/ether 52:54:00:b0:36:b9 brd ff:ff:ff:ff:ff:ff

修改想要使用此网络的虚拟机域,这里我们使用test01虚拟机域

[root@kvm01 ~]# virsh edit test01
...
67 <interface type='network'>
68 mac地址这里直接删除即可。
69 <source network='test'/>
...

[root@kvm01 ~]# virsh start test01

PS:虚拟机域的IP获取方式改为dhcp,直接启用,即可看到分配到的IP地址,当然是在我们test网络同一个网段的

总结:nat模式支持主机与虚拟机的互访,也支持虚拟机访问互联网,但不支持外网访问虚拟机域

桥接网络

在这里插入图片描述

1、创建虚拟桥接网卡br0

[root@kvm01 ~]# systemctl stop NetworkManager
[root@kvm01 ~]# virsh iface-bridge ens33 br0	#过程有可能报错,先看/etc/sysconfig/network-scripts/有没有自动生成 br0
[root@kvm01 ~]# cd /etc/sysconfig/network-scripts/
[root@kvm01 network-scripts]# ls
ifcfg-br0

查看配置文件会看到,ens33桥接到了br0上

[root@kvm01 network-scripts]# cat ifcfg-ens33 
DEVICE="ens33"
ONBOOT="yes"
BRIDGE="br0"

[root@kvm01 network-scripts]# cat ifcfg-br0 
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO="none"
IPADDR="192.168.1.150"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"

[root@kvm01 network-scripts]# brctl show
bridge name		bridge id			STP enabled		interfaces
br0				8000.000c29efc727	yes				ens33
virbr0			8000.5254006d6bd9	yes				virbr0-nic
													vnet0

2、修改kvm虚拟机域的xml配置文件

[root@kvm01 ~]# virsh edit test02
...
69     <interface type='bridge'>				#修改
70       <mac address='52:54:00:97:98:6f'/>		#无须修改
71       <source bridge='br0'/>					#修改
...

3、开启虚拟机域,配置IP,验证是否能够连通外网

[root@kvm01 ~]# virsh start test02 
[root@kvm01 ~]# virsh vncdisplay test02 
:0
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp
ONBOOT=yes

[root@localhost ~]# systemctl restart network

在这里插入图片描述

也可配置静态IP验证
在这里插入图片描述

在这里插入图片描述

PS:这时候需要注意,往往到这一步,很可能会报一个错,说要开启虚拟网卡的混杂模式,出于安全考虑是不允许的,然后就会出现,dhcp模式获取不到IP,即使手动设置好IP之后,仍然ping不通外网。
因为要开启网卡的混杂模式,需要我们对VMware的vmnet0网卡有权限进行操作,如果使用的是Windows操作系统装的VMware,只要使用管理员运行VMware就可以了,如果是Linux操作系统上安装的VMware,需要更改一下/dev/vmnet0网卡的权限,当然如果想要使用nat网络,更改/dev/vmnet8就可以了。

练习:

1、由test01虚拟机,克隆一台虚拟机test02
2、test01使用默认的nat模式访问外网,并部署一个httpd服务。test02使用bridge模式访问外网,并部署一个nginx服务
3、两台虚拟机域哪一台能给外网提供服务,并总结两种网络模式的优缺点

练习实操:

1、由test01虚拟机,克隆一台虚拟机test02
[root@kvm01 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7.0                      shut off
 -     test01                         shut off

[root@kvm01 ~]# virt-clone --auto-clone -o test01 -n test02

[root@kvm01 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     centos7.0                      shut off
 -     test01                         shut off
 -     test02                         shut off

[root@kvm01 ~]# ls /kvm-vm/
centos7.0.qcow2  test01.raw  test02.raw
[root@kvm01 ~]# ls /etc/libvirt/qemu/
centos7.0.xml  networks  test01.xml  test02.xml
2、test01使用默认的nat模式访问外网,并部署一个httpd服务。test02使用bridge模式访问外网,并部署一个nginx服务
1)test01使用默认的nat模式访问外网,并部署一个httpd服务

继上边的实验继续部署httpd服务:

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo 1231111111111 > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd
[root@localhost ~]# curl 192.168.110.45
1231111111111

外界访问不到:

[root@kvm01 ~]# curl 192.168.110.45
curl: (7) Failed connect to 192.168.110.45:80; No route to host

例图:
在这里插入图片描述

2)test02使用bridge模式访问外网,并部署一个nginx服务

继上边的实验继续部署nginx服务:
在kvm虚拟机中编写nginx.repo文件,scp到test02虚拟机域中

[root@kvm01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[root@kvm01 ~]# scp /etc/yum.repos.d/nginx.repo root@192.168.1.143:/etc/yum.repos.d/

在test02虚拟机域中安装nginx

[root@localhost ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@localhost ~]# yum -y install nginx

[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx

[root@localhost ~]# curl 192.168.1.143			#本机访问
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
……

[root@localhost ~]# firewall-cmd --add-port=5900/tcp --permanent		#防火墙添加规则,打开5900端口
success
[root@localhost ~]# firewall-cmd --add-port=80/tcp --permanent		#防火墙添加规则,打开80端口
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all
……
  ports: 5900/tcp 80/tcp
……

外界访问:

[root@kvm01 ~]# curl 192.168.1.143
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

例图:
在这里插入图片描述

3、两台虚拟机域哪一台能给外网提供服务,并总结两种网络模式的优缺点

test02可以给外界提供服务;

优缺点:

nat:nat模式支持主机与虚拟机的互访,也支持虚拟机访问互联网,但不支持外网访问虚拟机域
bridge:bridge模式支持主机与虚拟机的互访,也支持虚拟机访问互联网,支持外网访问虚拟机域
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐