SNAT又称源地址转换。
源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址
就是把内网地址转成指定的IP地址,这个iP地址可以访问公网
(1)三台服务器:PC1客户端、PC2网关、PC3服务端。
(2)硬件要求:PC1和PC3均只需一块网卡、PC2需要2块网卡
(3)网络模式要求:PC1为NAT模式、PC2中作为PC1网关的网卡为NAT模式、作为PC3网关的网卡为仅主机模式、PC3为仅主机模式。
(4)IP地址要求:
PC1为192.168.198.11/24–网关为192.168.198.11、
PC2网关的ens33网卡地址为192.168.198.12/24–网关为192.168.198.11、ens36为12.0.0.254/24–不需要网关、
PC3为12.0.0.100/24–网关为12.0.0.254
(1)关闭三台的防火墙和selinux
systemctl stop firewalld
setenforce 0
(2)配置pc3服务端
安装httpd服务修改网卡ip为12.0.0.100/24–网关为12.0.0.254,重启网卡。
yum -y install httpd
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.254
如有DNS需要注释
systemctl restart network
将ens33的设备模式改为仅主机模式,查看配置好的地址
[root@test3 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 12.0.0.100 netmask 255.255.255.0 broadcast 12.0.0.255
(3)配置PC1客户端
修改网卡ip为192.168.198.11/24—网关192.168.198.254,重启网卡。
安装httpd的服务,重启服务
yum -y install httpd
vim /etc/sysconfig/network-scripts/ifcfg-ens33
文本添加内容:
IPADDR=192.168.198.11
NETMASK=255.255.255.0
GATEWAY=192.168.198.254
如有DNS请注释
systemctl restart network
(4)配置PC2网关服务器
给虚拟机添加一个网卡,然后配置ens33和ens36网卡的ip地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.198.254
NETMASK=255.255.255.0
注释网关和DNS
cp /etc/sysconfig/network-script/ifcfg-ens33 /etc/sysconfig/network-script/ifcfg-ens36
#复制ens33配置文件给ens37网卡,新增网卡不会有配置文件
ens37配置文件修改:将UUID此行删除,修改ip和网关
IPADDR=12.0.0.254
NETMASK=255.255.255.0
开启PC2网关服务器的路由转发功能,重启网卡。
vim /etc/sysctl.conf
添加内容:
net.ipv4.ip_forward=1
[root@www network-scripts]# sysctl -p #使之生效
net.ipv4.ip_forward = 1
iptables -t nat -A POSTROUTING -s 192.168.198.0/24 -o ens37 -j SNAT --to 10.0.0.10
-t nat 指定使用nat表
-A POSTROUTING 添加在数据流出链,原因为在输出时添加只需要添加一次。
-s 指定源ip
-o 指定输出网卡为ens37时
-j 指定跳转到SNAT处理
--to 指定SNAT nat为10.0.0.10这个地址
测试:test1访问test3:12.0.0.100
目的地址转换的作用是将一组本地内部的地址映射到一组全球地址。
通常来说,合法地址的数量比起本地内部的地址数量来要少得多。
私网地址只能作为源地址来访问公网IP,而无法作为目标地址被其他主机访问
所以DNAT将私网中web服务器映射到公网IP,使其公网IP作为目标地址被公网中主机进行访问
在SNAT配置的基础上,在test1上做装一个httpd,内网映射访问
iptables -t nat -A PREROUTING -d 12.0.0.254 -i ens37 -p tcp --dport 80 -j DNAT --to 192.168.198.11:80
#从ens36网卡进入的流量目的地址为12.0.0.254目的端口为80的tcp协议NAT处理为访问192.168.198.11
-t nat 指定使用nat表
-A PREROUINTG 添加在路由选择前数据进入链,在输入时直接判断。
-d 指定目的ip
-i 指定输出网卡为ens36时
-p 指定协议为tcp协议
--dport 指定目的端口为80
-j 指定跳转到DNAT处理
--to 指定DNAT nat到192.168.198.11这个地址
测试:在test3访问内网test1的地址:192.168.198.11
是linux自带的抓包工具
tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.198.0/24 -w ./target.cap
#tcp∶ ip、icmp、arp、rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
#-i ens33 :只抓经过接口ens33的包。
#-t:不显示时间戳
#-s0 :抓取数据包时默认抓取长度为68字节。加上"-s0"后可以抓到完整的数据包。
#-c 100 :只抓取100个数据包。
#dst port 80:不抓取目标端口是80的数据包。
#src net 192.168.233.0/24 :数据包的源网络地址为192.168.233.0/24。Net:网段,host:主机。
#-w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析。
tcpdump -i ens33 -s0 -w ./ens33.cap