Linux内网数据代理与数据映射实验

背景介绍

有两台主机,其中一台可以联网,而另一台只能与联网主机,尝试通过配置,使该主机也能正常上网,这常应用于企业内部不联网的服务器,需要安全可靠或临时上网的场景,借助另一台可以上网的内部主机实现。

实验环境

借助两个克隆的虚拟机实现,其中一个可以联网,也有仅主机的网卡,另一个网络设置为仅主机模式,用于模拟内网环境,在设置网络之前为了测试效果,我们先给客户机安装上httpd服务,并关闭firewalld服务避免干扰,再检查网络情况,确认80端口是否使用,代码如下:

yum install -y httpd
systemctl start httpd # 开启httpd服务
systemctl stop firewalld # 关闭firewalld
ss -nlt # 检查端口情况


关于虚拟机三种网络模式解释如下:

vmware0 桥接模式:虚拟机与物理网卡直接相连,虚拟机将占用局域网中的一个IP地址,并且可以与其他终端进行相互访问
vmware1 仅主机模式:仅允许虚拟机与主机之间进行通信,而无法与外部网络通信
vmware8 NAT模式:虚拟机将获得一个由主机提供的虚拟IP地址,并通过主机进行网络地址转换(NAT)来与外部网络进行通信,这种方式可以保护虚拟机不受外界攻击

此时客户机是无法访问外部网络的

服务器的网络配置如图:

上网网卡ens33的IP为192.168.119.128,仅主机网卡ens36的IP为192.168.101.129,查看二者可否正常通信:

实验过程

配置IP

为了方便操作,两张仅主机的网卡分别将IP配置为192.168.12.1192.169.12.2,然后将客户机的网关设置为主机仅上网的网卡,配置如图:

操作完成后需systemctl restart network重启网络使之生效,并使用systemctl stop firewalld关闭防火墙,避免后续对实验的干扰。

数据转发

因为Linux系统中默认禁用数据转发功能,即主机有多张网卡时,可以根据数据包的目的IP将其转发到其他网卡,这本来应该是路由器完成的工作,所以我们需要在Linux系统中开启数据转发功能,通过修改Linux内核中的net.ipv4.ip_forward参数实现,具体方法为echo 1 > /proc/sys/net/ipv4/ip_forward,该方法为临时生效,永久化需要修改/etc/sysctl.conf 文件。

此时客户机还是无法访问外网的,因为我们只是开启了服务器的转发功能,现在需要将ens36仅主机上网卡收到的数据转发至可上网的ens33网卡上,借助该网卡对外通信,该功能可以使用我们学过的IP tables实现,具体命令为iptables -t nat -A POSTROUTING -s 192.168.12.0/24 -j SNAT --to-source 上网卡IP

此时客户机可对外通信,命令解释如下:

对负责修改数据包中的源、目标IP地址或端口的nat表中的负责路由判断后进行的规则POSTROUTING链添加新规则,所有来自192.168.12的数据包设置处理策略为SNAT,即将源地址转换为上网卡的IP地址,相对应的,如果策略为DNAT则是对目的地址进行转换。

实验原理

利用NAT网络地址转换协议实现,该协议是将IP数据包头中的IP 地址转换为另一个IP地址的过程,创建之初是为了缓解公有IP不足,实现私有IP借助网关访问公网的操作,我们在实验中也是利用该协议,实现内部主机通过可上网主机的NAT协议实现数据包的转发。再简便来说,就是让主机充当路由器

同样的,如果是外部主机要访问内网,只需将策略调整为DNAT,并将目的地址转换为内网地址即可。

该方案和我们日常使用直接访问网络的方式到底有什么不同呢?

最主要的差别就是使用这种方法对外部网络的访问是有限制的,只有配置了转发协议的数据包或者端口和地址才能访问外部网络,能接外网的主机一定程度来说像是一个硬件防火墙,作为整个内网的出入口可以很方便地进行筛选过滤。

总结思考

本次实验尝试了借助NAT协议实现主机间的数据代理功能,额外要注意的点有:

1,虚拟机三种网络模式的区别,物理直连,模拟网卡和仅内部主机

2,Linux系统数据转发的内核状态切换

3,iptables功能使用,修改添加指定表指定链的规则

4,NAT协议理解,本质是修改包头源、目的地址,但返回接收的数据包还能转换回原本地址并进行转发,具体实现方式有静态动态和复用啥的,涉及太底层暂时不做了解

此外

实践是检验真理的唯一标准,做实验之前感觉轻轻松松,修改几个IP,搞点配置,写写规则,简简单单,但做起来其实也折腾了小半天,实验配置过程不流畅不同步,加上理论知识不扎实,做着总有疑问,导致很不顺利。

但最后到现在再回头来看其实并不难,要避免眼高手低和做事畏手畏脚,只有多做,真正了解清楚自己的能力和实践的差距,才能更好地判断和选择,能力也会逐步在实践中成长,当真是实践决定认识,认识指导实践

相关推荐
co0t3 分钟前
计算机网络(14)ip地址超详解
服务器·tcp/ip·计算机网络
C++忠实粉丝4 分钟前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
淡水猫.10 分钟前
Fakelocation Server服务器/专业版 ubuntu
运维·服务器·ubuntu
黑客Ela11 分钟前
网络安全中常用浏览器插件、拓展
网络·安全·web安全·网络安全·php
量子网络22 分钟前
debian 如何进入root
linux·服务器·debian
时光の尘25 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
我们的五年30 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
qdprobot32 分钟前
ESP32桌面天气摆件加文心一言AI大模型对话Mixly图形化编程STEAM创客教育
网络·人工智能·百度·文心一言·arduino
我言秋日胜春朝★1 小时前
【Linux】进程地址空间
linux·运维·服务器
繁依Fanyi2 小时前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse