您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

VMware实现iptables NAT及端口映射

时间:2020-05-17 14:11:00  来源:  作者:

VMware实现iptables NAT及端口映射

1. 前言

本文只讲解实战应用,不会涉及原理讲解。如果想要了解iptables的工作流程或原理可参考如下博文。

具体操作是在PC机的VMware虚拟机上进行的,因此涉及的地址都是内网IP。在实际工作中也是一样的操作流程,只需要把涉及外网的地址改为公网IP即可。

 

1.1. 为什么有这篇文章?

原因是在日常工作中,我们都会在自己的电脑上安装VMware虚拟机,并由此实现一些业务系统【如:LNMP】或模拟线上的网络环境等。

而本文模拟的就是IDC机房或办公网的环境。机房内网服务器不能上外网,只能通过网关服务器上外网。而外网服务器想要访问机房内部的服务器,也只能通过网关服务器转发实现访问。

 

2. iptables表和链的工作流程

VMware实现iptables NAT及端口映射

 

 

2.1. 常用操作

## 清空所有规则【默认是filter表】

iptables -F

iptables -X

iptables -Z

iptables -t nat -F

iptables -t nat -X

iptables -t nat -Z

## 查看规则

iptables -nL

iptables -nL -t nat

## 删除指定表指定链的指定行数据

iptables -t nat -D POSTROUTING 1

  

 

3. 涉及虚拟机网络设置

3.1. 内部服务器node01网络设置

3.1.1. 内网设置【只有一个网卡】

VMware实现iptables NAT及端口映射

 

备注:

使用LAN区段,那么本机登录该虚拟机也不行,也ping不通,不在同一个网段不能互访。只能通过网关服务器ssh跳转登录访问。

 

eth0配置:

[root@InnerNode01 network-scripts]# cat ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPV6INIT=yes

USERCTL=no

IPADDR=172.16.10.10

NETMASK=255.255.255.0

GATEWAY=172.16.10.5

# 阿里云DNS

DNS1=223.5.5.5

DNS2=223.6.6.6

  

3.2. 网关服务器网络设置

3.2.1. 内网设置

VMware实现iptables NAT及端口映射

 

备注:

网关服务器的内网地址和内部服务器的地址在同一个网段。因此他们之间可以互访。

 

eth0配置:

[zhang@gateway01 network-scripts]$ cat ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPV6INIT=yes

USERCTL=no

IPADDR=172.16.10.5

NETMASK=255.255.255.0

  

3.2.2. 外网设置【模拟的公网】

VMware实现iptables NAT及端口映射

 

eth1配置:

[root@gateway01 network-scripts]# cat ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPV6INIT=yes

USERCTL=no

IPADDR=10.0.0.5

NETMASK=255.255.255.0

GATEWAY=10.0.0.2

# 阿里云DNS

DNS1=223.5.5.5

DNS2=223.6.6.6

  

3.3. 外网服务器设置

3.3.1. 外网设置【只有一个网卡】

VMware实现iptables NAT及端口映射

 

eth0配置:

[root@internet01 network-scripts]# cat ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=yes

BOOTPROTO=none

IPV6INIT=yes

USERCTL=no

IPADDR=10.0.0.8

NETMASK=255.255.255.0

GATEWAY=10.0.0.2

# 阿里云DNS

DNS1=223.5.5.5

DNS2=223.6.6.6

  

 

4. 简单的NAT路由器

4.1. 网络架构

VMware实现iptables NAT及端口映射

 

 

4.2. NAT需求介绍

网关2个网络接口

Lan口: 172.16.10.5/24 eth0

Wan口: 10.0.0.5/24 eth1

目的:实现内网中的节点服务器node01 IP:172.16.10.10(网段:172.16.10.0/24)可控的访问internet。

 

4.3. 网关服务器操作

1、网关机器开启linux的转发功能

[root@gateway01 ~]# tail /etc/sysctl.conf # 添加如下内容

…………

net.ipv4.ip_forward = 1

[root@gateway01 ~]# sysctl -p # 生效

  

2、网关机器iptables操作

iptables -P FORWARD DROP

将FORWARD链的策略设置为DROP,这样做的目的是做到对内网ip的控制,你允许哪一个访问internet就可以增加一个规则,不在规则中的ip将无法访问internet。

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

这条规则规定允许任何地址到任何地址的确认包和关联包通过。一定要加这一条,否则你只允许lan IP访问没有用。

iptables -t nat -A POSTROUTING -s 172.16.10.0/24 -j SNAT --to 10.0.0.5

这条规则做了一个SNAT,也就是源地址转换,将来自172.16.10.0/24的地址转换为10.0.0.5。

 

有这几条规则,一个简单的nat路由器就实现了。这时你可以将允许访问的ip或网段添加至FORWARD链,他们就能访问internet了。

iptables -A FORWARD -s 172.16.10.10 -j ACCEPT # 允许单个地址 或者如下命令

iptables -A FORWARD -s 172.16.10.0/24 -j ACCEPT # 允许该网段

比如我想让172.16.10.10这个地址访问internet,那么你就加如上的命令就可以了。

 

3、保存iptables规则

iptables-save > /etc/sysconfig/iptables

  

4.4. 内部服务器node01测试

[root@InnerNode01 ~]# ping www.baidu.com # 查看是否可以ping通

PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.

64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=1 ttl=127 time=43.4 ms

64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=2 ttl=127 time=42.6 ms

64 bytes from 180.97.33.108 (180.97.33.108): icmp_seq=3 ttl=127 time=42.1 ms

^C

--- www.a.shifen.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2005ms

rtt min/avg/max/mdev = 42.114/42.735/43.420/0.561 ms

[root@InnerNode01 ~]#

[root@InnerNode01 ~]# telnet www.baidu.com 80 # telnet 是否可行

Trying 112.34.112.40...

Connected to www.baidu.com.

Escape character is '^]'.

  

 

5. 端口转发

5.1. 网络架构

VMware实现iptables NAT及端口映射

 

 

5.2. 端口转发需求介绍

内部机器1个网络接口

Lan内web server: 172.16.10.10:80

 

网关2个网络接口

Lan口:172.16.10.5/24 eth0

Wan口:10.0.0.5/24 eth1

目的:对内部server进行端口转发,实现internet 10.0.0.8(网段:10.0.0.0/24)用户【模拟外网机器】访问内网服务器172.16.10.10:80。

 

5.3. 网关服务器操作

1、网关机器开启linux的转发功能

[root@gateway01 ~]# tail /etc/sysctl.conf # 添加如下内容

…………

net.ipv4.ip_forward = 1

[root@gateway01 ~]# sysctl -p # 生效

  

2、网关机器iptables操作

iptables -P FORWARD DROP

将FORWARD链的策略设置为DROP,这样做的目的是做到ip的控制,你允许哪一个访问就可以增加一个规则,不在规则中的ip将无法访问。

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

这条规则规定允许任何地址到任何地址的确认包和关联包通过。一定要加这一条,否则你只允许lan IP访问没有用。

iptables -t nat -A PREROUTING -d 10.0.0.5 -p tcp --dport 80 -j DNAT --to 172.16.10.10:80

如果你要把访问 10.0.0.5:80 的数据包转发到Lan内web server,用上面的命令。

 

好了,命令完成了,端口转发也做完了,本例能不能转发呢?不能,为什么呢?我下面分析一下。

本例中我们的FORWARD策略是DROP。那么也就是说,没有符合规则的包将被丢弃,不管内到外还是外到内。因此,我们需要加入下面的规则。

iptables -A FORWARD -d 172.16.10.10 -p tcp --dport 80 -j ACCEPT

 

3、保存iptables规则

iptables-save > /etc/sysconfig/iptables

  

5.4. 操作验证

1、在内部服务器监听80端口

## xshell标签1操作

[root@InnerNode01 ~]# nc -l 80 # 保持持续监听

## xshell标签2操作

[root@InnerNode01 ~]# netstat -lntup

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 808/rpcbind

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1971/nc ### 可见80端口已经监听成功

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1099/sshd

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1355/master

  

2、在外网服务器Telnet

[zhang@internet01 ~]$ telnet 10.0.0.5 80

Trying 10.0.0.5...

Connected to 10.0.0.5.

Escape character is '^]'.

^]

telnet> quit

Connection closed.

由上可知,外网服务器(10.0.0.8)访问内部服务器(172.16.10.10:80)成功。

 

 



Tags:VMware   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  Tags: VMware  点击:(1)  评论:(0)  加入收藏
在前几天发布的文章《如何使用vmware搭建linux系统的虚拟机》中,最后一步完成后,就完成了ubuntu linux系统环境的配置,但是,当我们进入虚拟机时,会弹出下图界面, 实际上,此界面是告...【详细内容】
2021-09-22  Tags: VMware  点击:(91)  评论:(0)  加入收藏
在上一篇 VMware 安装 Centos7 详细过程 (新建虚拟机) 文章中详细说明了VMware新建虚拟机的每一个步骤,这一篇文章将详细记录CentOS的每一步的安装。0x01 引导界面虚拟机已经...【详细内容】
2021-09-17  Tags: VMware  点击:(77)  评论:(0)  加入收藏
我用服务器做VMWare的时候有同学问我为什么不做黑群晖,买了个“矿渣”做黑群晖又有同学问我为什么不做软路由。这都提醒我肯定要紧跟时代发展的步伐,既然已经落后了,那就尽量往...【详细内容】
2021-09-03  Tags: VMware  点击:(86)  评论:(0)  加入收藏
1.客户需求:使用VMware Workstation来跑一些东西,但是该虚机的宿主机需要不定时关机,需要设置该VMware虚机开机启动如下:1. 进入到 VMware workstation 的安装目录,找一下 vmrun....【详细内容】
2021-07-19  Tags: VMware  点击:(106)  评论:(0)  加入收藏
一、VMware部分1、Vmware简介虚拟机就是一个用来模拟真实的物理机环境的一个软件,可以在虚拟机中安装不同版本的操作系统。就是一个把下载好的ISO安装在物理机操作系统的一个...【详细内容】
2021-07-12  Tags: VMware  点击:(113)  评论:(0)  加入收藏
公司总部和公司分部灾备数据中心部署两套VMware服务器存储虚拟化集群,并且公司总部和公司分部分别部署Veeam软件备份管理系统。这样保证本地一份备份数据,远程灾备通过IPSEC...【详细内容】
2021-03-22  Tags: VMware  点击:(461)  评论:(0)  加入收藏
1.虚拟机软件虚拟机软件能够根据当前硬件环境模拟硬件环境(网卡、内存、存储等)用于创建一个独立于原主机操作系统的计算机。在一台电脑上可以同时开启多个虚拟机软件创建的...【详细内容】
2021-03-04  Tags: VMware  点击:(224)  评论:(0)  加入收藏
VMware虚拟机虚拟机VMware是指拥有近乎完整常规硬件系统功能的完整虚拟性计算机系统,该系统由软件模拟并在完全隔离的环境中运行。 VMware是创建和使用虚拟机的常用程序。用...【详细内容】
2020-12-24  Tags: VMware  点击:(201)  评论:(0)  加入收藏
看到很多说免费的VMware-Fusion不香么?琢磨去申请一个看看,结果发现还是稍微麻烦点。记录下。国内的是申请不到的会报错 所以需要哈申请地址https://www.vmware.com/products/...【详细内容】
2020-11-24  Tags: VMware  点击:(383)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条