背景介绍
有两台主机,其中一台可以联网,而另一台只能与联网主机,尝试通过配置,使该主机也能正常上网,这常应用于企业内部不联网的服务器,需要安全可靠或临时上网的场景,借助另一台可以上网的内部主机实现。
实验环境
借助两个克隆的虚拟机实现,其中一个可以联网,也有仅主机的网卡,另一个网络设置为仅主机模式,用于模拟内网环境,在设置网络之前为了测试效果,我们先给客户机安装上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.1
和192.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,搞点配置,写写规则,简简单单,但做起来其实也折腾了小半天,实验配置过程不流畅不同步,加上理论知识不扎实,做着总有疑问,导致很不顺利。
但最后到现在再回头来看其实并不难,要避免眼高手低和做事畏手畏脚,只有多做,真正了解清楚自己的能力和实践的差距,才能更好地判断和选择,能力也会逐步在实践中成长,当真是实践决定认识,认识指导实践。