配置多层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用户下查看
博主原创文章,转载请务必注明出处