[虚拟化]连载No2之网络+配置Bridge

时间:2022-02-13 19:32:34
-------常用命令--------
virsh命令:
  domiflist [虚拟机id]: 查看虚拟机绑定的网络接口 
  tcpdump:网络抓包工具
   安装:yum install tcpdump -y
   -i 指定监听的网络接口。 
   icmp(只抓取ping的包,ping走的icmp协议)
   eg: tcpdump -n -i vnet0 icmp 
  brct1 [options]: (安装网桥管理工具包:bridge-utile) 网桥配置工具
    options:
      show: 查看,也可以直接看net地址配置文件 /etc/libvirt/qemu/networks/default.xml
      [root@localhost qemu]# brctl show
         bridge name bridge id        STP enabled interfaces
         virbr0        8000.fe54004cb742 yes          vnet0
                                                                                          vnet0

解释:两台虚拟机的网线(vnet0,vnet1)连接在了桥接器(交换机)virbr0上


-------网络相关------------
1、ip转发说明
配置文件/proc/sys/net/ipv4/ip_forward控制一个操作系统,当一个操作系统收到一个数据包,如果目标地址不是自己持有的ip地址之后,触发转发数据包,
如果为0,则丢弃数据包,如果为1,则有路由功能,即如果目标地址不是自己,根据自己路由规则,将这个数据包转发出去
echo 0 >  /proc/sys/net/ipv4/ip_forward  及时生效,立马停止转发功能,其中转发是遵循防火墙表路由规则


2、防火墙表路由表之nat表
命令 iptables -t nat -S

3、网络第二层之路由表
记录 局入网中ip地址和网卡硬件地址的映射关系
命令 arp -n
示例
[root@master ~]# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
192.168.1.100            ether   d0:81:7a:ca:95:10   C                     enp0s3



4、网络第三层之路由表
作用:当前主机数据包最终是从哪个接口发出去,发送给谁,就是下一跳是谁,是由这个路由表条目经过算法判定出来的
命令:route -n
[root@localhost networks]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp2s0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 enp2s0

运算过程,拿目标ip地址与掩码(Genmask)做按位与运算(有1为1,有0为0),比如 192.193.11.11 ,运算结果为 192.193.11.0 ,然后与Destination 做比较,最终找到出口为 0.0.0.0 ,那么就会找到下一跳出口网关Gateway =192.168.0.1 ,接口为enp2s0



5、网络第四层之访问关系表
命令 netstat -nap
记录 ip之间访问关系表
示例
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1304/master         
tcp        0      0 192.168.1.150:22        192.168.1.100:49213     ESTABLISHED 2030/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1304/master         
udp        0      0 127.0.0.1:323           0.0.0.0:*                           606/chronyd         
udp6       0      0 ::1:323                 :::*                                606/chronyd 



6、抓包查看数据
1、虚拟机1用的是vnet0接口(网线),在虚拟一1上ping www.baidu.com
2、在宿主机抓虚拟机一是否有数据接收到  tcpdump -n -i  vnet0 icmp
    显示有,其他接口 vnet1无
    那么,宿主机会通过 vnet0 > virbr0>eth0 请求外网,此时桥接器virbr0、eth0 也会有数据,命令 tcpdump -n -i  virbr0 icmp

----nat模式过程(桥接器virbr0到eth0之间发生的事) (图虚拟化05-02Nat网络流程图.png)
1、首先,虚拟机ping百度,把数据包发给了接口vnet0后,然后发送给了桥接器virbr0之后,就变成了对宿主机进入的数据包,又因为内核开启了地址转发功能,所有这时候我们的宿主机会拿着虚拟机的数据包要做向外发送的动作,那么无论是自己发送,还是受到别人的数据包,帮别人转发这个操作,都会经历一个模块(功能),
叫做路由判定

2、nat模式bug:不能听过宿主机访问虚拟机地址,一般家里,公司都是这么模式

--------添加桥接模式(虚拟化05-03Brade网络流程图)
说明:虚拟机可以直接上网,不需要nat地址转换,宿主机可以访问虚拟机,是同一网段
步骤:1、虚拟机添加新的网络适配器,模式为桥接模式 
      2、 >cp /etc/sysconfig/network-scripts/ifcfg-enp0s3 cp /etc/sysconfig/network-scripts/ifcfg-eth1
         >vim ifcfg-eth1
           TYPE=Ethernet
           DEVICE=eth1  #设备名
           BOOTPROTO=none #statisc改为node,只作为宿主机访问外网的一个接口使用,不需要配置ip地址的,
           ONBOOT=yes
         > ifconfig eth1 up  
      3、添加新的桥接器(交换机)
        > brctl addbr virbr1
        > 启用 ifconfig virbr1 up
        > brctl addif ivrbr1 eth1  # brctl show 查看
      4、修改centos 虚拟机centos7.0为桥接模式
        > virse > edit centos7.0
          <interface type ="network"> 改为 <interface type ="bredge">
          <source network =="default"> 改为 <source bridge =="virbr1">  
          使用dumpxml centos7.0 查看修改文件是否成功  
          启动虚拟机,宿主机可以访问虚拟机了