NAT(网络地址转换模式)

使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟系统里访问互联网。很显然,如果你只有一个外网地址,此种方式很合适。
KVM虚拟机Nat方式上网:
virsh net-list
查看当前活跃的网络,可以看到一个default网络,这个就是一个默认的Nat网络了。
virsh net-dumpxml default
可以查看该网络的详细配置如下:
    <network>
      <name>default</name>
      <uuid>75dbebde-fc15-4350-8a06-f1432f9e6d30</uuid>
      <forward mode='nat'>
        <nat>
          <port start='1024' end='65535'/>
        </nat>
      </forward>
      <bridge name='virbr0' stp='on' delay='0' />
      <mac address='52:54:00:bc:f2:65'/>
      <ip address='192.168.122.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.122.2' end='192.168.122.254' />
        </dhcp>
      </ip>
    </network>
可以看到该网络搭建在一个网桥virbr0上,这个网桥在安装并启动libvirt的时候自动生成。然后在客户机的XML配置文件中添加标签interface内容如下:
    <interface type='network'>
       <mac address='52:54:00:c7:18:b5'/>
       <source network='default'/>
       <model type='virtio'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
 
则可以让客户机用nat方式来上网了,经验证,客户机可以获取到122网段,2到254之间的一个ip地址。
我们可以直接编辑修改default网络的配置:
virsh net-edit default
也可以直接将default网络干掉,然后再重新定义:
virsh net-undefine default
重新创建一个default.xml文件,自定义其中的内容,可以指定某个mac地址对应某个ip,指定某个ip段。例如下面的内容,name对应的是客户机的名字。
 
    <network>
      <name>default</name>
      <uuid>dc69ff61-6445-4376-b940-8714a3922bf7</uuid>
      <forward mode='nat'/>
      <bridge name='virbr0' stp='on' delay='0' />
      <mac address='52:54:00:81:14:18'/>
      <ip address='192.168.122.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.122.2' end='192.168.122.254' />
          <host mac='00:25:90:eb:4b:bb' name='guest1' ip='192.168.5.13' />
          <host mac='00:25:90:eb:34:2c' name='guest2' ip='192.168.7.206' />
          <host mac='00:25:90:eb:e5:de' name='guest3' ip='192.168.7.207' />
          <host mac='00:25:90:eb:7e:11' name='guest4' ip='192.168.7.208' />
          <host mac='00:25:90:eb:b2:11' name='guest5' ip='192.168.7.209' />
        </dhcp>
      </ip>
    </network>
 
然后用命令:
virsh net-define default.xml
virsh net-start default
 
启用一个客户机,检查网络时候可用。
 
 

端口转发

下面均为介绍iptables相关内容,如果愿意使用rinetd或者其他的工具,或者使用桥接模式的,可以不用看了。
 
如果需要远程管理我们可以使用自带的vnc,但如果认为vnc不如系统自带的3389或ssh方便,我们可将NAT网络内的端口转发出来。
 
操作完上面第三步内开启转发的功能后,进行如下操作。
 
注:第四步已经将防火墙关闭,现在是在关闭防火墙的环境下操作,如果要开启防火墙,请自行检查iptables规则是否与防火墙冲突。
 
下面两条规则为将宿主机的2009端口,自动转发到虚机的3389端口。
 
iptables -t nat -A PREROUTING -p tcp --dport 2009 -j DNAT --to-destination 192.168.122.101:3389
iptables -t nat -A POSTROUTING -p tcp --dport 2009 -d 192.168.122.101 -j SNAT --to 192.168.122.1
开启转发后一直不通,因为对iptables不熟,这个坑了我2天,网上查询资料后,终于解决。因为默有两条拒绝规则,删除即可。
首先将规则列出:
iptables -nL -v --line-numbers -t filter
会有两条如下规则:
4        7   420 REJECT     all  —  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
5        0     0 REJECT     all  —  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
然后删除这两条规则,删除两次第四条即可,因为删除第四条后,第五条又变成第四条了。
iptables -D FORWARD 4 -t filter   #删除编号为4的FORWARD规则
然后进行保存并重启iptables服务:
service iptables save #保存规则
service iptables resart #重启服务
转发端口即可工作了。
 
 
 
下面要有一个大坑介绍。
 
我们上面已经了“save”保存了,但宿主机重启后,iptables自行恢复,屏蔽规则也恢复了,端口转发又无法工作了。
 
因为在centos7下,需要把配置写入文件,然后开机后再从配置文件读取才可以。目前只找到这个方法。
 
iptables-save > /etc/sysconfig/iptables #文件路径可自行指定。
在 /etc/rc.local内加入如下内容;
 
iptables-restore < /etc/sysconfig/iptables
service iptables save
service iptables restart
好了,现在全部搞定了!!
 
另外由于宿主机映射到外网的端口是由网管分配,附一条转发本地ssh端口的iptables规则。
 
-A PREROUTING -p tcp -m tcp --dport 3000 -j REDIRECT --to-ports 22

KVM NAT(网络地址转换模式)的更多相关文章

  1. bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)-VMware下三种网络配置方式

    VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...

  2. VMware中的桥接模式、NAT(网络地址转换模式)、Host-only(主机模式):转自:http://blog.chinaunix.net/uid-11798538-id-3061551.html

    其中VMnet1是虚拟机Host-only模式的网络接口,VMnet8是NAT模式的网络接口,这些后面会详细介绍.在个虚拟交换机,分别是-个虚拟机交换机,而在VMware Workstation 5以 ...

  3. vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...

  4. vmware虚拟机Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)详解

    原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...

  5. NAT 网络地址转换

    NAT  网络地址转换(Network Address Translation) NAT(Network Address Translation,网络地址转换)是1994年提出的. 属接入广域网(WA ...

  6. CCNA学习 NAT网络地址转换

    CCNA基础 NAT网络地址转换 在计算机网络中,网络地址转换(Network Address Translation,缩写为NAT),也叫做网络掩蔽或者IP掩蔽(IP masquerading),是 ...

  7. NAT网络地址转换模拟过程

    原理图,如图1 图1 以下为配置NAT网络地址转换的实验: eNSP模拟图,如图2 图2 Step1.给路由器的每个接口赋予一个地址,如图3,图4 图3 图4 AR1和AR2中添加路由表项,如图5,图 ...

  8. [译] NAT - 网络地址转换(2016)

    [译] NAT - 网络地址转换(2016) Published at 2019-02-17 | Last Update 译者序 本文翻译自 2016 年的一篇英文博客 NAT - Network A ...

  9. iptables做nat网络地址转换

    iptables做nat网络地址转换. 0. 权威文档 http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html e文好的直接跳过本文 ...

随机推荐

  1. Jenkins 实现 ldap认证

    使用自己搭建的openldap: 使用Test LdapSetting测试的结果: 所测试的用户在:svn,jenkins,gitlab,sonarqube,wpsadmin组下 若用户不在jenki ...

  2. 【雕爷学编程】Arduino动手做(60)---WS2812直条8位模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  3. 类linux 系统上端口被占用

    好几次遇到这问题,明明Ctrl+C退出了node,但是下次启动的时候总是会报错: listen EADDRINUSE :::80 之类的. 这时候可能是被占用,也可能是上次进程没有真的退出. ps - ...

  4. 前后端分离产生的跨域问题的解决方案之--jsonp、nginx代理、设置头信息等

    前言 在前后端没有分离的时候,前端开发要么是写静态页面,数据渲染后端来做,要么就是前端的页面和后端的代码刚开始的时候就合并在一起,每次后端代码更新了之后,前端也要更新一下代码,然后重启一下服务,还是比 ...

  5. 数据分析之Numpy、Matplotlib库

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 菜鸟教程:https://www.run ...

  6. 1.1Go环境搭建之Linux

    1.ssh远程登录Linux服务器,可选用iTerm.xshell ssh root@ip 2.建议配置好阿里云yum源.epel源 安装git yum install git 3.下载go源码包 / ...

  7. 高版本Jenkins关闭跨站请求伪造保护(CSRF)

    前言 根据官网描述,Jenkins版本自2.204.6以来的重大变更有:删除禁用 CSRF 保护的功能. 从较旧版本的 Jenkins 升级的实例将启用 CSRF 保护和设置默认的发行者,如果之前被禁 ...

  8. 【Spring】Spring AOP详解(转载)

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  9. .NET Core HttpClient+Consul实现服务发现

    简介 随着.NET Core的不断发展与成熟,基于.NET Core实现微服务的解决方案也越来越多.这其中必然需要注册中心,Consul成为了.NET Core实现服务注册与发现的首选.类似的解决方案 ...

  10. Golang源码学习:调度逻辑(二)main goroutine的创建

    接上一篇继续分析一下runtime.newproc方法. 函数签名 newproc函数的签名为 newproc(siz int32, fn *funcval) siz是传入的参数大小(不是个数):fn ...