烂泥:KVM使用NAT联网并为VM配置iptables端口转发
在前面的文章中,我们介绍KVM的虚拟机(以下简称VM)都是通过桥接方式进行联网的。
本篇文章我们来介绍KVM的VM通过NAT方式进行联网,并且通过配置IPtables做端口映射,这个也是前几天一家公司面试我的问题。直接问我KVM如何做端口转发,当时因为确实没有做过这方面的应用,所以就直接回答不知道了。
NAT(网络地址)方式连接网络在桌面虚拟化使用是比较多的,比如VMware Workation。使用NAT方式联网可以节省IP地址。说实话这个对于公网IP地址比较少的公司,也节省了成本。
而KVM默认的网络连接方式就是NAT,只是我们一直没有使用。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网(需要对KVM服务器做配置),但不支持外界访问虚拟机(不过可以通过KVM服务器配置IPtables端口转发解决)。
本篇文章主要包括两个部分:
1、KVM为VM配置NAT网络
2、为VM配置iptables端口转发
一、KVM为VM配置NAT网络
我们可以通过如下命令,查看NAT是否开启。如下:
virsh net-list

通过上图,我们可以看到NAT方式已经开启。而且default是宿主机安装VM支持模块的时候自动安装的。
我们也可以查看,系统中已经存在的网卡。使用ifconfig命令,如下

通过上图,我们可以看出网卡virbr0就是NAT方式连接网络时,所使用到的网卡。
除此之外我们还可以通过配置文件,来查看NAT方式的DHCP地址池。该配置文件为:/etc/libvirt/qemu/networks/default.xml。如下:

通过上图我们可以看出,目前NAT使用的IP地址池是192.168.122.2-192.168.122.254,网关为192.168.122.1,子网掩码为255.255.255.0。
因为是和KVM相关的VM(虚拟机),所以我们首先为VM新建硬盘。今天我们的实验不使用裸设备,直接使用文件的方式为虚拟机创建硬盘。这样有利于虚拟机的迁移,但是性能方面没有裸设备好。有关VM如何使用裸设备,可以参考我的另外一篇文章《烂泥:KVM使用裸设备配置虚拟机》。
创建VM硬盘,使用如下命令:
qemu-img create -f qcow2 /natdisk/nat.img 20G

硬盘创建完毕后,我们使用如下命令创建VM,如下:
virt-install -n nat -r 2048 --vcpus=1 --os-type=linux --boot cdrom,menu=on -c /iso/CentOS-6.4-i386-minimal.iso --disk path=/natdisk/nat.img,format=qcow2,bus=ide --network network=default --vnc --vnclisten=0.0.0.0 --vncport=5991

注意该条命令中有关网络的配置--network network=default,我们使用的是默认网络配置default。这个就是NAT方式。
同时有关硬盘的格式与接口模式也一定要注意:
--disk path=/natdisk/nat.img,format=qcow2,bus=ide
下面开始为VM安装系统,如下:

VM系统安装完毕后,我们进入VM中。默认情况下VM此时使用的DHCP方式获取IP地址,如果你在安装系统时未进行网络配置。我们现在修改VM使用静态IP地址,如下:
more /etc/sysconfig/network-scripts/ifcfg-eth0

网络配置完毕后,我们来测试下网络通信情况。如下:

通过上图我们发现,此时VM通过NAT网络获取的IP地址无法与其他网段的服务器进行通信。是不是我们的NAT配置出错?还是其他原因?
这个其实不是我们NAT配置出错,而是要是NAT网络与其他服务器进行正常通信还需要做其他工作。
现在切换到KVM服务器,开启KVM服务器的IP转发功能。编辑/etc/stsctl.conf文件,把其中的net.ipv4.ip_forward = 0修为net.ipv4.ip_forward = 1,如下:
vi /etc/sysctl.conf

或者使用如下命令:
echo 1 >/proc/sys/net/ipv4/ip_forward
不过这种方法是暂时的,系统重启后消失。要使其永久生效,建议使用直接修改/etc/stsctl.conf文件的方法。
/etc/stsctl.conf文件修该完毕后,我们要使用sysctl –p使其生效。如下

以上配置完毕后,我们还要开启KVM服务器的IPtables的转发功能,使用如下命令:
iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE

注意该命令中的网卡时br0,而不是eth0。
此时,我们再切换VM中测试的网络通信情况。如下:

通过上图我们可以很明显的看到,目前VM可以与服务器以及外网正常通信。
以上就是KVM为VM配置NAT网络的整个过程。下面我们开始为VM配置端口。
二、为VM配置iptables端口转发
为什么要为VM配置iptables端口转发呢?这个是因为有些业务是在公网的,有时候为了资金考虑不得不尽量节省公网IP的个数。比如现在我想管理KVM中的VM,通过SSH方式。但是KVM服务器对外只有一个公网IP,而且KVM服务器是在IDC机房中。
如果要达到我上述的要求,只能在KVM服务器为VM配置IPtables端口转发。
现在我们还以上述VM为例,目前该KVM的公网IP为192.168.1.102,VM的IP为192.168.122.173,现在我要求通过访问KVM的8022端口访问VM的22端口。
要想达到上述功能,我们需要在KVM服务器上设置如下IPtables规则:
iptables -t nat -A PREROUTING -d 192.168.1.102 -p tcp -m tcp --dport 8022 -j DNAT --to-destination 192.168.122.173:22
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.173 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.122.1

注意这两条IPtables规则:
第一条规则很好理解,就是把所有访问192.168.1.102:8022的请求转发到192.168.122.173:22的端口上。
第二条规则我的理解是,把所有来自192.168.122.0/255.255.255.0网段访问192.168.122.173:22的数据全部通过192.168.122.1这个网关转发出去。
现在我们来实际效果,如下:
ifconfig eth0|grep "inet addr"|awk '{print $2}'|cut -d: -f2
ssh -p 8022 root@192.168.1.102

通过上图我们可以看出,我们通过192.168.1.213这台服务器使用ssh通过8022端口登录到IP为192.168.122.173的VM。
很明显这个已经达到我们的要求。
在这只是一个例子,其实我们也完全可以在VM192.168.122.173上搭建一个web,然后通过KVM的IPtables端口转发下,公网就可以访问了。下面再来个例子,如下:
iptables -t nat -A PREROUTING -d 192.168.1.102 -p tcp -m tcp --dport 8023 -j DNAT --to-destination 192.168.122.173:80
iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.173 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.122.1



以上这个例子是通过192.168.102:8023访问VM92.168.122.173的web服务器。
为了在下次重启KVM服务器后,这些IPtables规则继续使用。我们要把这些规则保存下,使用如下命令:
/etc/init.d/iptables save
more /etc/sysconfig/iptables

至此我们有关KVM的NAT方式网络连接以及为VM配置IPtables端口讲解完毕。
烂泥:KVM使用NAT联网并为VM配置iptables端口转发的更多相关文章
- 转:KVM使用NAT联网并为VM配置iptables端口转发,kvmiptables
转载地址:https://www.ilanni.com/?p=7016 在前面的文章中,我们介绍KVM的虚拟机(以下简称VM)都是通过桥接方式进行联网的. 本篇文章我们来介绍KVM的VM通过NAT方式 ...
- centos7 && centos6.5部KVM使用NAT联网并为虚拟机配置firewalld && iptables防火墙端口转发
centos7 && centos6.5 部KVM使用NAT联网并为虚拟机配置firewalld && iptables防火墙端口转发 一.准备工作: 1: 检查kvm ...
- VMware搭建内网并通过iptables端口转发联网
整体流程图 配置Server1 新建两块网卡 一块网卡设置为桥接模式,另外一块设置为仅主机模式 查看两块网卡配置 root@ubuntu:~# ifconfig ens33 Link encap:Et ...
- vmware设置centos虚拟机nat联网(转载)
今天在vmware虚拟主机中安装hearbeat,为了使用最新的版本,选用编译安装了.在编译过程中,需要连接被墙的网站下载文件,那只能用vpn,但我使用的是桥接方式联网,使用不了真实主机的vpn,于是 ...
- vmware设置centos虚拟机nat联网(转)
今天在vmware虚拟主机中安装hearbeat,为了使用最新的版本,选用编译安装了.在编译过程中,需要连接被墙的网站下载文件,那只能用vpn,但我使用的是桥接方式联网,使用不了真实主机的vpn,于是 ...
- KVM改NAT为Bridge
kvm 改nat为桥接在安装一个拥有虚拟化功能的Linux操作系统(此处以CentOS为例),一般我们有两种方法:1.在光盘安装的时候安装好虚拟化包或者PXE服务器上配置好虚拟化包2.手动在没有安装虚 ...
- 外网主机访问虚拟机下的web服务器(NAT端口转发)
主机:系统win7,ip地址172.18.186.210 虚拟机:VMware Workstation 7,虚拟机下安装了Centos操作系统,ip地址是192.168.202.128,部署了LAMP ...
- 外网主机访问虚拟机下的web服务器(NAT端口转发)-----端口映射
主机:系统win7,ip地址172.18.186.210 虚拟机:VMware Workstation 7,虚拟机下安装了Centos操作系统,ip地址是192.168.202.128,部署了LAMP ...
- VMware NAT模式 Cent OS IP配置
1:首先VMware 桥接模式 CentOS ip 配置,关键点,ip的网关和DNS1设置成宿主机的网关和DNS 原理:桥接的模式就是通过物理网卡实现的. 2:以图展示VMware NAT模式 Cen ...
随机推荐
- JAVA中的输入方法
输入整数(int)类型 导入包 import java.io.*; 输入语句 BufferedReader myIn=new BufferedReader(new inputStreamReader( ...
- 第 29 章 CSS3 弹性伸缩布局[中]
学习要点: 1.混合过度版 主讲教师:李炎恢 本章主要探讨 HTML5 中 CSS3 提供的用来实现未来响应式弹性伸缩布局方案,这里做一个初步的了解. 一.混合过渡版 混合版本的 Flexbox 模型 ...
- UVA 11582 Colossal Fibonacci Numbers! 大斐波那契数
大致题意:输入两个非负整数a,b和正整数n.计算f(a^b)%n.其中f[0]=f[1]=1, f[i+2]=f[i+1]+f[i]. 即计算大斐波那契数再取模. 一开始看到大斐波那契数,就想到了矩阵 ...
- jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js)
最近在学习asp.netMVC,发现其中的验证方式书写方便快捷,应用简单,易学好懂. 验证方式基于jQuery的validate 验证方式,也可以说是对jQuery validate的验证方式的扩展, ...
- Xslider演示8种滚动效果
Xslider演示8种滚动效果包括: 一.左右切换:每次移动固定距离 二.左右切换:最后一个显示在最右侧 三.自动切换 四.循环切换 五.文本的上下滚动 六.上下切换 七.上下自动循环切换 在线预览 ...
- jQuery 浮动标签插件,帮助你提升表单用户体验
浮动标签模式(Float Label Pattern)是最新流行的一种表单输入域的内容提示方式,当用户在输入框输入内容的时候,原先占位符的内容向上移动,显示在输入的内容的上面.这里推荐的这款 jQue ...
- URL(统一资源定位符)结构和注意事项
URL的常见结构: http://localhost/项目名称/文件1/文件2... 注意事项: 当我们在项目中在书写URL的时候,一般会出现两种情况: 第一种:在路径前面加上/,表示直接连在loca ...
- 【NodeJS 学习笔记03】先运行起来再说
前言 最近同事推荐了一个不错的网址:https://github.com/nswbmw/N-blog/wiki/_pages 里面的教程很是详细,我们现在跟着他的节奏学习下NodeJS,一个简单的博客 ...
- 怎么把多个GridView和Repeater导入到word或者excel中
最近开发网上商城有发现我们会涉及到订单打印的问题,本来想到直接显示打印即可但是考虑还得下载到本地,最后只有直接选择控件按流方式输出. 导入到word中代码如下: protected void Butt ...
- 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程之更改图片和附件上传路径
本文是接上一篇博客,如果有疑问请先阅读上一篇:百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程 默认UEditor上传图片的路径是,编辑器包目录里面的net目录下 下面就演示如 ...