配置多层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 ...
随机推荐
- poj 3678 Katu Puzzle 2-SAT 建图入门
Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...
- zoj 3822 概率dp
/* 题目大意:一个n*m的棋盘,每天放一个棋子,每行每列至少有一个棋子时结束.求达到每行每列至少有一个棋子的天数的数学期望. */ #include <iostream> #includ ...
- 51nod 1851 俄罗斯方块
玩过俄罗斯方块?那你知道俄罗斯方块共有七种吧(其实只有五种) 给一个黑白图,每次能将某些区域的格子黑白反转,至于某些区域的意思嘛,就是俄罗斯方块形状的区域咯(可水平翻转.上下翻转.旋转) 求能否将图变 ...
- Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731
生日蛋糕 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ ...
- css样式小框架
1.如div{...}会给所有的<div></div>增加样式. 2.名前井号“#”:对应html中的标签的id属性,写法为#name.如#p1{...}会给<p id= ...
- 蓝牙攻击指南(kali)
基本操作 hciconfig 查看蓝牙设备信息 hcitool:这是一个查询工具. 可以用来查询设备名称,设备ID,设备类别和设备时钟. hcidump:可以使用这个来嗅探蓝牙通信 hciconfig ...
- windows实时监测热插拔设备的变化2
//动态监测设备插拔 #include <Dbt.h> BEGIN_MESSAGE_MAP(ParticipateMeeting, CDialogEx) ON_WM_DEVICECHANG ...
- usb驱动---linux ACM驱动详解ACA【转】
转自:http://blog.chinaunix.net/uid-9185047-id-3404684.html DTE提供或接收数据,连接到网络中的用户端机器,主要是计算机和终端设备.与此相对地,在 ...
- hdu 5157(树状数组+Manacher)
Harry and magic string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- (2)OLEDB数据库操作
1.首先要引入 System.Data.OracleClient.dll 2.引入命名空间 using System.Data.OleDb; OleDb类 https://msdn.microsof ...