配置多层NAT和端口映射实现外网访问内网
配置多层NAT和端口映射实现外网访问内网
- 背景和原理
通过配置NAT可以实现内网中不能直接访问外网的主机通过NAT代理访问内网,配置方法这里不再赘述(前文有介绍)。本文以两层的NAT代理做模拟,通过端口映射实现从外网访问内网中某一台主机,并实现某一服务(如ftp功能)。端口映射就是将外网主机的IP地址的一个端口映射到内网中一台机器,提供相应的服务。当用户访问该IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上(目的端口必须开放)。
- 环境模拟
在虚拟机中创建三台Linux系统(可以通过克隆创建),分别命名为Linux1、Linux2
和Linux3。其中Linux1和Linux2都具有两块网卡,Linux3具有1块网卡。
对应的网卡ip分配:
Linux1:
eth0(NAT模式) 192.168.214.210(此ip跟VMware的NAT模式同网段,即能直接访问外网)
eth1(仅主机模式) 192.168.1.254(此ip作为Linux2的网关)
Linux2:
eth0(仅主机模式) 192.168.1.100 网关192.168.1.254
eth1(LAN区段) 192.168.2.254(此ip作为Linux3的网关)
Linux3:
eth0 (LAN区段) 192.168.2.100 网关192.168.2.254
配置相应的NAT代理,使得Linux3可以通过两级的NAT代理访问外网
执行命令ping www.baidu.com –c4检验

- 配置端口映射
3.1 对于Linux1映射Linux2,在Linux1上指定一个端口(范围是1024-65536,此处指定为4022),指定映射到Linux2的一个端口(端口范围相同,此处指定为3022)
在Linux1上执行命令:
iptables -t nat -A PREROUTING -d 192.168.214.210 -p tcp --dport 4022 -j DNAT --to 192.168.1.100:3022
3.2 对于Linux2映射Linux3,在 Linux2上使用端口映射的端口为同一端口即3022,指定映射到Linux3的一个端口(端口范围相同,此处为了方便,指定Linux3开放的ssh端口51323,便于通过ssh客户端测试端口映射的连接及分析)
在Linux2上执行命令:
iptables -t nat -A PREROUTING -d 192.168.1.100 -p tcp --dport 3022 -j DNAT --to 192.168.2.100:51323
- 检验端口映射及分析
4.1 通过ssh登录Linux1映射到Linux2再映射到Linux3,最终ssh会通过两级的端口映射登录到Linux3,

4.2 在Windows平台(此时相当于外网访问)使用netstat命令过滤出4022端口的tcp通信,发现外网与Linux1通过4022端口建立起了tcp通信

4.3 在登录到的Linux3上使用netstat命令过滤出上面步骤得到的52640端口的tcp通信,发现Linux3通过51323端口与外网建立起了tcp通信
4.4 在Linux1上可以通过tcpdump抓包工具抓取端口4022的相关信息

在Linux2上通过tcpdump抓包工具抓取端口3022的相关信息

在Linux3上通过tcpdump抓包工具抓取端口51323的相关信息

可以得出,外网主机192.168.214.1通过其52640端口与Linux3主机192.168.2.100通过51323端口建立了tcp连接,实现了从外网通过端口映射访问内网主机
- 实际应用举例:外网通过端口映射ftp登录到内网的Linux3主机
5.1 在Linux3安装vsftpd服务端,启动服务并创建普通用户及密码
yum install vsftpd -y
/etc/init.d/vsftpd start
useradd test
echo 123456|passwd --stdin test
5.2 用ftp客户端登录。由于只配置了Linux3的51323端口映射,该端口又是ssh使用的端口,ftp默认端口21并没有配置端口映射,可以使用sftp(SSH File Transfer Protocol)利用ssh端口登录到Linux3
说明:sftp命令可以通过ssh来上传和下载文件,是常用的文件传输工具,它的使用方式与ftp类似,但它使用ssh作为底层传输协议,所以安全性比ftp要好得多

回车登录成功,可以拖拽文件进行测试

到Linux3的ftp服务的test用户下查看

博主原创文章,转载请务必注明出处
配置多层NAT和端口映射实现外网访问内网的更多相关文章
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 实现外网远程桌面内网的电脑和外网访问内网的FTP
基于之前两篇文章搭建了ngrok实现了内网穿透,用过了http和https的协议完成了外网访问内网的网站,这一篇教大家用tcp协议实现外网远程桌面内网的电脑和外网访问内网的FTP. 一.外网远程桌面 ...
- [笔记] 使用frp从外网访问内网
之前尝试过otunnel,也记录过使用方法,见[笔记] 使用otunnel从外网访问内网,但是用了几天发现还是不够稳定. 然后尝试frp,发现性能稳定,够用,将过程及配置分享在这里吧. 需求 内网机器 ...
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
随机推荐
- CSU 2130~湖南多校对抗第八场 C
2130: Permutations Submit Page Summary Time Limit: 1 Sec Memory Limit: 128 Mb Submitted: ...
- DiskGenius
DiskGenius是一款集磁盘分区管理与数据恢复功能于一身的工具软件.它即是一款功能强大.灵活易用的分区软件,同时也是一款技术高超.功能全面的数据恢复软件.它不仅具备与分区管理有关的几乎全部功能,支 ...
- HDU2669 Romantic
Description The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Tr ...
- Nginx整合PHP原理
安装Nginx 在网上,看到不少人装Nginx 时非常麻烦,配置时用了一大堆选项,请问你们真实现那么多功能么?害的我越看越郁闷.此次安装Nginx如果是按着上面笔者的步骤一步步走下来,安 ...
- cp2102通过GPIO连接树莓派
此博客不在更新,我的博客新地址:www.liuquanhao.com ----------------------------------------------------------------- ...
- Javascript报错Converting circular structure to JSON 错误排解
在运行nodejs程序的时候报出以下的错误: 2017-11-20 17:44 +08:00: TypeError: Converting circular structure to JSON at ...
- Fiddler抓包1-抓firefox上https请求【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/p/6538021.html 前言 fiddler是一个很好的抓包工具,默认是抓http请求的, ...
- hdu 2461(AC) & poj 3695(TLE)(离散化+矩形并)
Rectangles Time Limit: 5000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- ACM中的正则表达式
layout: post title: ACM中的正则表达式 author: "luowentaoaa" catalog: true mathjax: true tags: - 正 ...
- luogu P1284 三角形牧场
题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有 ...