1. 前言

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

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

文章参考:iptables nat及端口映射

文章参考:企业软件防火墙iptables

1.1. 为什么有这篇文章?

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

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

2. iptables表和链的工作流程

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. 内网设置【只有一个网卡】

备注:

使用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. 内网设置

备注:

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

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. 外网设置【模拟的公网】

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. 外网设置【只有一个网卡】

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. 网络架构

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. 网络架构

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)成功。

VMware实现iptables NAT及端口映射的更多相关文章

  1. iptables nat及端口映射

    iptables nat及端口映射 发布: 2010-6-11 15:05 | 作者: admin | 来源: SF NetWork 门户网站 iptables 应用初探(nat+三层访问控制) ip ...

  2. linux主机下的Vmware Workstation配置NAT设置 端口映射-Ubuntu为例

    最近折腾虚拟机,由于是在linux下进行的,而相关资料比较少,所以遇到了一些问题. 一个就是配置vmware workstation的NAT设置.因为一般来说,NAT可以共享主机的ip,从而能以主机身 ...

  3. 配置多层NAT和端口映射实现外网访问内网

    配置多层NAT和端口映射实现外网访问内网 背景和原理 通过配置NAT可以实现内网中不能直接访问外网的主机通过NAT代理访问内网,配置方法这里不再赘述(前文有介绍).本文以两层的NAT代理做模拟,通过端 ...

  4. vbox NAT 设置端口映射(NAT+8080端口转发)

    VirtualBox的提供了四种网络接入模式,它们分别是: 1.NAT 网络地址转换模式(NAT,Network Address Translation) 2.Bridged Adapter 桥接模式 ...

  5. 第11章 拾遗1:网络地址转换(NAT)和端口映射

    1. 网络地址转换(NAT) 1.1 NAT的应用场景 (1)应用场景:允许将私有IP地址映射到公网地址,以减缓IP地址空间的消耗 ①需要连接Internet,但主机没有公网IP地址 ②更换了一个新的 ...

  6. NAT、端口映射、内网穿透、公网IP都是啥

    原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...

  7. VMware NAT做端口映射

    转自百度 原文地址: https://jingyan.baidu.com/article/c35dbcb0d1ff248916fcbc0d.html 注意事项:Window宿主电脑要调整防火墙.

  8. 使用iptables nat进行端口转发

    1.将发向HostA:PortA的请求转发到HostB:PortB iptables -t nat -A PREROUTING -p tcp -i eth0 -d HostA --dport Port ...

  9. 详解VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射

    本文以VirtualBox为例 如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3. ...

随机推荐

  1. Java破解图片防盗链

    前言 今天想下载几张好看的壁纸,然后发现了一张是自己比较喜欢的额.然后点进去看看,WOW!好多好看的壁纸呀,于是我就起了贪念.哈哈!想把他们这一组图片打包下载,小白的方法就是一张一张下载,那样对于我们 ...

  2. Linux自启动执行脚本方法

    1. 在/etc/rc.d/init.d/下创建脚本,要遵守service script的标准: 例如: vi /etc/rc.d/init.d/gfs #!/bin/bash#case " ...

  3. Hive篇--相关概念整理一

    一.前述 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行. 其优点是学习成本低 ...

  4. 利用NPOI生成word文档(c#)

    WordTest.aspx.cs using System; using System.IO; using System.Text; using System.Web; using System.We ...

  5. 今天俺要说一说简单工厂模式(Simple Factory)

    前言:简单工厂不能说是设计模式,它是一种变成习惯,因为它不是23种设计模式之一,但是它在实际开发中经常用到,而且也非常简单,可以说是工厂模式的一个引导. 大多程序员都是单身狗,为了弥补一下你们的心情, ...

  6. asp.net core系列 39 Web 应用Razor 介绍与详细示例

    一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...

  7. AngularJS7那些不得不说的事故

    题外话   最近简直要忙死,所以停更了很久,你们会不会以为我人间蒸发了?   正文之前,请允许我先跑个题,就是关于忙的问题.   做了Freelance,每天过的比上班还累,这完全不是我想要的生活啊? ...

  8. Java基础10:全面解读Java异常

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  9. 当面试官说 “你还有什么问题想问的” ,你该如何回答?

    阅读本文大概需要 4 分钟. 作者:黄小斜 来源:程序员江湖 程序员面试时经常会听到面试官说一些套话,比如"今天的面试就到这里了,回去等通知吧","你还有什么问题想问我的 ...

  10. Linux 清理boot分区

    今天一登录虚拟机  就被提示boot空间不足 于是赶紧看了下 还有9.2M,刚安装的时候好好的,为什么用了一段时间后就提示空间不足呢? 原因是使用yum update升级内核后  boot分区中就多了 ...