一、SNAT和DNAT
SNAT:让内网机器可以访问外网服务器
DNAT: 让外网机器可以访问内网服务器
1.1、SNAT原理与应用
SNAT 应用环境
局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由),私转公
SNAT原理:源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射
SNAT转换前提条件:
1.局域网各主机已正确设置IP地址、子网掩码、默认网关地址
2.Linux网关开启IP路由转发
数据包从内网发送到公网时,SNAT会把数据包的源IP由私网IP转换成公网IP
当响应的数据包从公网发送到内网时,会把数据包的目的IP由公网IP转换为私网IP切记:私网地址永远不会出现在公网地址上
私网->公网->公网
公网->公网->私网
P 地址范围 | 子网掩码 | 描述 |
---|---|---|
10.0.0.0 - 10.255.255.255 | /8 或 255.0.0.0 | A类私有网络地址 |
172.16.0.0 - 172.31.255.255 | /12 或 255.255.0.0 | B类私有网络地址 |
192.168.0.0 - 192.168.255.255 | /16 或 255.255.255.0 | C类私有网络地址 |
1.1.1、启用IP转发功能
linux系统本身是没有转发功能 只有路由发送数据
在Linux系统中,命令 echo 1 > /proc/sys/net/ipv4/ip_forward
用于启用IP转发功能。
/proc/sys/net/ipv4/ip_forward
:这是一个特殊的虚拟文件,用于控制Linux内核的IPv4网络层是否应该转发数据包。当这个文件的值为1时,表示启用IP转发;当值为0时,表示禁用IP转发。
因此,当你执行 echo 1 > /proc/sys/net/ipv4/ip_forward
命令时,你实际上是在告诉Linux内核:“对于IPv4数据包,请允许它们被转发到其他网络接口
或者
sysctl -w net.ipv4.ip_forward=1
上面的命令的效果是临时的,仅在当前会话中有效。一旦系统重启,这个设置将不会保留。要使这个设置永久生效,你需要在系统启动时自动执行这个命令,或者编辑网络配置文件(如/etc/sysctl.conf
),在其中添加一行net.ipv4.ip_forward=1
,然后运行sysctl -p
来应用更改。
永久打开步骤如下:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #将此行写入配置文件
sysctl -p #将取修改后的配置
注:还有一种方式静态路由,这个就比较麻烦
1.1.2、SNAT转换
SNAT转换1:固定的公网IP地址:
#配置SNAT策略,实现snat功能,将所有192.168.100.0这个网段的ip的源ip改为10.0.0.1
-o是出站网卡
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to 10.0.0.1
可换成单独IP 出站 外网网卡 外网IP
或
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j SNAT --to-source 10.0.0.1-10.0.0.10
出站 外网网卡 外网IP或地址池
SNAT转换2:非固定的公网IP地址(共享动态IP地址):
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
就是masquerade控制类型
小知识扩展:
一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网。
1.2、DNAT原理与应用:
DNAT应用环境
在Internet中发布位于局域网内的服务器,公转私
DNAT原理
目的地址(目标机,就是其他机)转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。
DNAT转换前提条件:
1.局域网的服务器能够访问Internet
2.网关的外网地址有正确的DNS解析记录
3. Linux网关开启IP路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
2.1.1、DNAT转换
DNAT转换1:发布内网的Web服务
#把从ens37进来的要访问web服务的数据包目的地址转换为192.168.100.13
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.13
或 入站 公网IP
内网服务器IP
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.13
入站 公网IP 端口
内网服务器IP
回包
iptables -t nat -A POSTROUTING -s 192.168.100.13 -o ens37 -j SNAT --to 10.0.0.1
内网IP 出站外网网卡 外网地址
可以现场做个域名解析
1.3、实验
以下实验以snat为例:
示意图
需求:内网客户端可以访问公网网站
思路:需要用防火墙做nat转换
内网用户客户端访问公网服务器
注意:网防火墙网关服务器需要关闭firewalld防火墙,公网服务器的iptables防火墙策略要干净(不能有拒绝,坑),selseinux都要关,内网windows客户端防火墙也要关。
实验环境:
内网客户端(内网pcwin客户机):192.168.100.130
公网服务器(公网linux服务机): 12.0.0.100 开启httpd服务
网防火墙网关服务器:12.0.0.1和 192.168.100.100
1.编辑的虚拟网络编辑
Vmnet1模式网段:192.168.100.0,Vmnet3模式网段:12.0.0.0
2.现在配置防火墙网关代理机
添加两快网卡(两个网络适配器,cp内容),并设置
a.关闭firewalld防火墙,设为开机不自启
systemctl stop firewalld.service
systemctl disable firewalld.service
b.安装iptables,开启服务(可以提前下)
yum -y install iptables iptables-services
systemctl start iptables. Service
c.为了不必要的麻烦,再关一下selinux
setenforce 0
3.Linux网关开启IP路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
4.在linux网关服务器上做SNAT转换
iptables -F -t nat
iptables -nvL -t nat 查看
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens37 -j SNAT --to 12.0.0.1
iptables -nvL -t nat 查看
5.配置公网服务器,修改网卡和网络适配器,为vm3,仅主机模式
vim /etc/sysconfig/network-scripts/ifcfg-ens33
a.关闭防火墙firewalld selinux
b.提前下载开启httpd
systemctl restart httpd.service
c.可以在防火墙网关代理机上curl 12.0.0.100 测试
6.配置内网客户端
访问
总结
其他内容
开启路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
或配置内核参数开启路由转发,echo 1 > /proc/sys/net/ipv4/ip_forward为临时配置
sysctl -p 从文件加载系统参数
配置防火墙策略(先清空nat表规则)
iptables -t nat -A PREROUTING -d 12.0.0.128 -i ens38 -j DNAT --to-destination 192.168.192.210
iptables -t nat -I POSTROUTING -s 192.168.192.0/24 -o ens38 -j SNAT --to-source 12.0.0.128
验证:内网客户端访问12.0.0.211
公网客户端访问12.0.0.128
DNAT转换1:入站外网网卡外网IP到内网服务器IP
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to 192.168.100.13-192.168.100.20
DNAT转换2:发布时修改目标端口
发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.100.13:22
入站外网网卡 外网IP 外网远程端口 内网IP和远程端口号
在外网环境中使用SSH测试
ssh -p 250 [email protected]
yum -y install net-tools #若没有ifconfig 命令可提前使用yum 进行安装
ifconfig ens33
iptables -nvL -t nat 查看
注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回
1.4、防火墙规则备份和还原
主机型防火墙主要使用INPUT、OUTPUT链,设置规则时一般要详细的指定到端口
网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可
防火墙规则的备份和还原
导出(备份)所有表的规则.
iptables-save > /opt/ipt.txt
导入(还原)规则
iptables-restore < /opt/ipt.txt
将iptables规则文件保存在/etc/sysconfig/iptables中,iptables服务启动时会自动还原规则
iptables-save > /etc/sysconfig/iptables
systemctl stop iptables #停止iptables服务会清空掉所有表的规则
systemctl start iptables #启动iptables服务会自动还原/etc/sysconfig/iptables中的规则
二、网络分析工具tcpdump
tcpdump tcp -i ens33 -t -s 0 -C 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i ens33 : 只抓经过接口ens33的包,i是入站
(3)-t : 不显示时间戳
(4)-s 0: 抓取数据包时默认抓取长度为68字节。加上-s 0后可以抓到完整的数据包
(5)-c 100 :只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析