一、实验环境
实验环境
真实主机
:ip为172.25.254.250
双网卡主机westosa(虚拟机)
:ip1为172.25.42.100,ip2为172.25.254.100
单网卡主机westosb(虚拟机)
:ip为172.25.42.200
双网卡主机westosa
单网卡主机westosb
二、实验原理
流程图
SNAT:用的是POSTROUTING,在路由之后做,参数用-o表示出口
DNAT:用的是PREROUTING,在路由之前做,参数用-i表示进入口
prerouting 和postrouting 也经常用于NAT配置网关机进行网络地址转换使用,这时候有一下规律:
POSTROUTING是源地址转换(SNAT),要把你内部网络上受防火墙保护的ip地址转换成你本地的公网地址才能让它们上网。
PREROUTING是目的地址转换(DNAT),要把别人的公网IP换成你们内部的IP,才让访问到你们内部受防火墙保护的服务器。
三、SNAT源地址转换
(1)、基本原理
想要实现单网卡主机(172.25.42.200)和真实主机172.25.254.250的互通,可以用双网卡主机的内核做地址转换(地址伪装)。用双网卡主机的172.25.42.100的ens3网卡接收对来自于单网卡主机172.25.42.200的数据包,然后双网卡主机ens3网卡将数据经过内核转换给172.25.254.200的ens8网卡,并将数据的源地址更改为双网卡的172.25.254.200地址。
因为SNAT源地址转换是在路由之后POSTROUTING链中进行的,即我们需要双网卡的nat表的POSTROUTING链中添加策略
(2)、实现过程
1、进行双网卡主机westosa设定
因为是路由之后,所以更改双网卡主机的数据包的ens8网卡,将传递给真机的数据包更改源地址为ens8
POSTROUTING,在路由之后做,参数用-o表示出口
iptables -t nat -A POSTROUTING -o ens8 -j SNAT --to-source 172.25.254.100 路由后操作POSTROUTING,将en3网卡输出的ip都伪装为172.25.254.100
sysctl -a |grep ip_forward 图1、查看路由功能是否开启
vim /etc/sysctl.conf 图2、打开路由功能
sysctl -p 使得内核路由功能生效
iptables -t nat -nL 图3、查看当前的SNAT
图1
图2
图3
2、单网卡主机westosb设定
将单网卡的网关设置为双网卡主机ens8网卡的ip172.25.42.100
,这样可以使得数据可以与双网卡主机的ens3网卡进行通信。
3、实验结果
实验结果1:单网卡主机(172.25.42.200)能与不同网段的主机(172.25.254.250)通过双网卡主机路由直接ping通
实验结果2:单网卡主机(172.25.42.200)能与不同网段的主机(172.25.254.250)通过双网卡主机路由进行ssh连接,w -i 可以查看到,当前的ssh连接是通过172.25.42.100路由转发的。
实验结果3:此时我们的真机不能访问到westosb,因为数据的流向是单向的,只能从westosb到真机。要实现在这个的话也可以用DANT去做
三、DNAT目的地地址转换
(1)、实验原理
可以实现真实主机访问地址的转换
DNAT目的地地址转换是在路由之前PREROUTING链中进行的,即我们需要在nat表的PREROUTING链中添加策略,指定对所有从ens8接口输入的数据用DNAT转换其目的地地址为westosb为172.25.42.200
DNAT:用的是PREROUTING,在路由之前做,参数用-i表示进入口
(2)、实验过程
1、在双网卡主机中进行操作
更改DNAT
iptables -F
iptables -t nat -F
iptables -t nat -A PREROUTING -i ens8 -j DNAT --to-dest 172.25.42.200
2、实验结果
实验结果发现虽然连接的是westosa(172.25.254.100),但是访问到的是westosb(172.25.42.200)