接上篇,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模块,还需要重新编译内核

(2)提供为客户机建立nat用的qemu-ifup-nat脚本和关闭的脚本qemu-ifdown-nat模式

qemu-ifup-nat脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/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脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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

(3)启动客户机

首先给予脚本执行权限: chmod +x  /etc/qemu*

qemu-system-x86_64  -m 4096 -smp 8 -net nic -net tap,ifname=tap1,script=/etc/qemu-ifup-nat,downscript=/etc/qemu-ifdown-nat  kvm_vhost/redhat6.qcow2  -daemonize

(4) 查看结果

客户机:ip a查看是否获取到了192.168.7.0段的地址,并测试是否能与外网ip通信

宿主机:ip a可以看到有个虚拟网口virbr0,并且ip地址为192.168.7.1

(5)如果想让客户机提供的某些服务,外网可以访问,那么可以在宿主机加这么一条规则

iptables -t nat  -I PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.7.2:80

# 这里假设提供web服务,且客户端获取到的ip为192.168.7.2

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

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

命令:

qemu-system-x86_64 -net user[,option][,option][,...]

vlan=n : 将用户模式网络栈连接到编号为n的vlan中,默认0

name=NAME :网络别名

net=addr[/mask]:设置客户机可以看到的ip地址,默认10.0.2.0/24

host=addr:指定客户机可见宿主机的地址

restrict=y|yes|no|n:如果此选项被打开,那么客户机会被隔离,即客户机无法与外界通信,默认no

hostname=name :设置在宿主机dhcp服务器中保存的客户机主机名

dhcpstart=addr :设置分配给客户机的第一个ip

dns=addr:指定虚拟dns的地址

tftp=dir:激活qemu内嵌的tftp服务器

hostfwd=[tcp/udp]:[hostaddr]:hostport-[guestaddr]:guestport :将访问宿主机的hostport端口tcp/udp链接重定向到客户机的guestport端口上,可以多次使用

guestfwd=[tcp]:server:port-dev,将客户机中访问ip地址为server的端口连接转发到宿主机的dev这个字符设备上

bootfile=file:让file文件成为客户机可以使用的bootp启动镜像文件,它与tftp选项联合使用,可以实现从网络启动客户机的功能

smb=dir[,smbserver=addr]:激活samba功能

例子:

qemu-system-x86_64 -m 4096 -smp 8 -net nic -net user,tftp=/root/tftp,hostfwd=tcp::5022-:22 redhat6.qcow2

这里我们把宿主机的5022端口转发到客户机的22端口,结果如下:

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

kvm 网络配置之nat、用户模式相关推荐

  1. Ubuntu网络配置(NAT模式)

    补充:之前刚开始接触Ubuntu的网路,对这些还是一知半解,随手写下这篇东西,回头去看发现其实还是有点问题,不知道看了这篇文章的各位网友会不会依旧没有配置成功,今天回去再看了一下,又百度了一下,做一下 ...

  2. CentOS 7 网络配置(NAT模式)

    参考: VMware 的安装 和 虚拟机自定义安装:https://mp.weixin.qq.com/s/0Ms-XnKUzi3m_hvSZ7XXsw 安装选择选项 和 部分虚拟机网络配置:https ...

  3. VirtualBox网络配置:NAT+Host-Only实现连接外网+主机互通

    目录 引言 官方解释 步骤 测试 引言 最近在玩虚拟机,配置网络的时候遇到了点坑,顺便回忆了下计算机网络算是.记录一下防止下次继续迪掉坑,也给大家借鉴一下. 官方解释 官方文档 NAT 网络.NAT ...

  4. VMware Fusion网络配置 - 设置Nat静态IP

    准备把主力机器从ThinkPad T460P替换到MacMini上, MacOS版本: 10.15.7 当前最新MacOS版本是13 于是面临一个问题, 很多最新的工程软件不支持我这IntelCPU的 ...

  5. vsftpd安装配置_CentOS7配置vsftpd虚拟用户模式详解

    玩过vsftpd的都知道有三种模式:匿名开放模式.本地用户模式.虚拟用户模式(相对较安全) 想玩玩vsftpd的小伙伴请参照我的教程一步步配置,如果有什么问题请留言,我会回复! a.先安装 yum - ...

  6. Linux网络配置(NAT)

    在搭配好一台虚拟机的时候想要下载,安装些什么但一直失败 这个时候就可以检查一下网络是否连接 这里我们使用centos7举例子 使用命令--ifconfig 由此可见我们的系统中目前有3个网卡 ens3 ...

  7. 静态配置_Linux网络配置之NAT静态ip配置

    我们在学习及开发中的环境基本都是多个节点,所以我们肯定是需要每个几点的ip是固定的,而且学习的时候我们也希望当我们从学校回到宿舍或者去到小伙伴那的时候节点的ip也不会改变,所以本文我们就来介绍下NAT ...

  8. 华为网络配置(NAT)

    目录 前言 一.NAT概述 1.NAT介绍 2.NAT优点 3.NAT分类 (1)源NAT (2)目的NAT 4.NAT应用场景 (1)私网主机访问公网 (2)公网主机访问私网 二.NAT配置 1.案 ...

  9. IPv6网络配置LVS的DR模式

    本文主要包括LVS DR模式在IPv4网络和IPv6网络下配置的一些差异对比. 1.LVS DR via IPv4 首先这里我们使用三台主机配置lvs集群,对应的系统和内核版本如下 [root@lvs ...

最新文章

  1. “画中画”效果--谈IFRAME标签的使用
  2. ViewPager的简单使用说明
  3. Xilinx的ISE14.7和PlanAhead与win10系统的兼容性问题解决方案
  4. Python 二分查找算法
  5. CVE-2018-14418 擦出新火花
  6. 利用位运算实现加减乘除
  7. java字符串不可变_Java字符串真的是不可变的吗?
  8. 组件的data属性 (有别于Vue实例的data属性)
  9. [译]git fetch
  10. 【李宏毅2020 ML/DL】P60-61 Unsupervised Learning - Deep Generative Model
  11. 九度OJ 1133:学分绩点 (加权平均数)
  12. Windows10远程连接服务器时出现“这可能是由于CredSSP加密数据库修正”的错误提示的解决办法
  13. 收藏商品表设计_babycare商品价格及销售情况分析
  14. 2022最新分布式面试题合集,轻松应对Java面试
  15. 数据库持久层框架iBatis、myBatis、Hibernate对比
  16. 给群联PS3111/inic6081量产工具添加闪存颗粒支持
  17. Netflix时代之后Spring Cloud微服务的未来
  18. Hololens2开机无法启动无法开机问题
  19. SVN客户端的安装和简单使用
  20. 归约指令Reduction Instructions

热门文章

  1. UA MATH636 信息论8 纠错码简介
  2. VS2012调试ReactOS源码环境搭建4 - 生成ReactOS镜像和VS解决方案成功
  3. 图文解说oracle视图
  4. 学习笔记95—不要错过的科研神器
  5. Python虚拟机类机制之descriptor(三)
  6. 以太坊、Hyperledger Fabric和Corda,哪个更好?
  7. springMVC图片的上传与下载
  8. bzoj3522 Hotel
  9. React 入门之路
  10. 使用jquery的getJSON从服务器端获得数据