接上篇,kvm的网络配置,参考书本:《kvm虚拟化技术 实现以及原理解析》

2. nat模式

nat模式自动获取ip需要dhcp服务,nat功能本身需要ip伪装,既然是一个网络,所以还需要虚拟网桥功能,所以需要的软件如下:

dhcp功能:dnsmasq

ip伪装:iptables

虚拟网桥:bridge-utils

实现:

    (1)yum install dnsmasq iptables bridge-utils -y#如果iptables是为内核的netfilter模块提供规则,如果内核不支持nat模块,还需要重新编译内核


qemu-ifup-nat脚本如下:


#!/bin/bash         
          #         
                    
          BRIDGE=virbr0         
                    
          NETWORK=192.168.7.0          #设置nat的网段         
          NETMASK=255.255.255.0         
          GATEWAY=192.168.7.1          #网关         
          DHCPRANGE=192.168.7.2,192.168.7.30          #地址池         
                    
          function           check_bridge()          #检测虚拟网桥是否存在         
          {                
                    if           brctl show |          grep           -q           "^$BRIDGE"           ;          then         
                    return           1         
                    else         
                    return           0         
                    fi         
          }         
          function           create_bridge()          #创建虚拟网桥         
          {         
                    brctl addbr $BRIDGE          
                    brctl stp $BRIDGE on         
                    brctl setfd $BRIDGE 0          #设置网桥转发延迟         
                    ifconfig           $BRIDGE $GATEWAY netmask $NETMASK up         
          }         
          function           enable_ip_forward()          #开启数据包转发         
          {                
                    echo           1 >           /proc/sys/net/ipv4/ip_forward         
          }         
          function           add_filter_rules()          #nat功能,即出去的包修改源地址,masquerade表示iptables自己会探测自己的ip,不用手动指定         
          {         
                    iptables -t nat -A POSTROUTING -s $NETWORK/$NETMASK ! -d  $NETWORK/$NETMASK -j MASQUERADE         
          }         
          function           start_dnsmasq()          #开启dnsmasq功能,即dhcp功能,这里使用最简单的写法,更多参数参考dnsmasq --help         
          {         
                    ps           -ef |          grep           dnsmasq |          grep            -          v           grep           &>           /dev/null         
                    if           [ $? -          eq           0 ];          then         
                    return           1         
                    fi         
                    dnsmasq   --listen-address=$GATEWAY  --dhcp-range=$DHCPRANGE         
          }         
          function           setup_bridge_nat()          #启动所有功能         
          {         
          check_bridge $BRIDGE         
          if           [ $? -          eq           0 ];          then         
          create_bridge         
          fi         
          enable_ip_forward         
          add_filter_rules          
          start_dnsmasq           
          }         
          if           [ -n $1 ];          then         
          setup_bridge_nat          #真正的程序开始的地方,其实是引用上面的函数         
          ifconfig           $1 0.0.0.0 up          #$1被虚拟成网桥,所以本身不需要ip,但是要启用         
          brctl addif $BRIDGE $1          #把$1绑定到虚拟网桥         
          else         
          exit           1         
          fi




qemu-ifdown-nat脚本如下:

#!/bin/bash         
          #         
                    
          BRIDGE=virbr0         
          if           [ -n $1 ];          then         
          ip link           set           $1 down         
          brctl delif $BRIDGE $1         
          brctl delbr $BRIDGE         
          iptables -t nat -F         
          exit           0         
          else         
          exit           1         
          fi





kvm 固定IP kvm配置ip_ip地址

    

kvm 固定IP kvm配置ip_ip地址_02



3.qemu内部的用户模式网络


默认情况下,qemu-kvm启动客户机的时候使用slirp实现tcp/ip协议栈,并虚拟出一套nat网络,它使用简单易用,独立性好,但是不能跟宿主机和外部网络直接通信

命令:


例子:

kvm 固定IP kvm配置ip_运维_03


本文转自biao007h51CTO博客,原文链接:http://blog.51cto.com/linzb/1877755 ,如需转载请自行联系原作者