熟练应用snat和dnat,掌握公网私网之间的连通(补充防火墙规则备份以及如何Linux抓包)
Posted 丁CCCCC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了熟练应用snat和dnat,掌握公网私网之间的连通(补充防火墙规则备份以及如何Linux抓包)相关的知识,希望对你有一定的参考价值。
snat与dnat
一、SNAT
1.1 原理与应用
- SNAT应用环境
- 局域网主机共享单个公网IP地址接入Internet ( 私有IP不能在Internet中正常路由)
- SNAT原理
- 修改数据包的源地址
1.2 SNAT转换前提条件
- 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
- Linux网关开启IP路由转发
1.3 开启snat
临时打开
echo 1 > /proc/sys/net/ipv4/ip_forward
或者
sysctl 1 -w net.ipv4.ip_forward=1
永久打开
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 # 在配置文件内加入这一行
sysctl -p # 读取修改后的配置
1.4 转换
固定的公网 IP 地址
iptables -t nat -A POSTROUTING -s 192.168.253.0/24 -o ens33 -j SNAT --to 12.0.0.1
或
iptables -t nat -A POSTROUTING -s 192.168.253.0/24 -o ens33 -j SNAT --to-source 12.0.0.1-12.0.0.10
(内网IP) (出站外网网卡) (外网IP或地址池)
非固定的公网 IP 地址(动态)
iptables -t nat -A POSTROUTING -s 192.168.253.0/24 -o ens33 -j MASQUERADE
1.5 补充
一个 IP 地址做SNAT转换,一般只能让100-200台主机实现上网,局限性较大
二、DNAT
2.1 原理与应用
- DNAT应用环境
- 在Internet中 发布位于局域网内的服务器
- DNAT原理
- 修改数据包的目的地址
2.2 DNAT转换前提条件
- 局域网的服务器能够访问Internet
- 网关的外网地址有正确的DNS解析记录
- Linux网关开启IP路由转发
2.3 开启dnat
与snat相同
2.4 转换
发布内网的Web服务
#把从ens33进来的要访问web服务的数据包目的地址转换为192.168.253.22
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.80.22
或者
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.253.22
(入站外网网卡) (外网IP) (内网服务器IP)
iptables -t nat -A PREROUTING -i ens33 -p tcp --dport 80 -j DNAT --to 192.168.253.20-192.168.253.30
发布时修改目标端口
#发布局域网内部的OpenSSH服务器,外网主机需使用250端口进行连接
iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.1 -p tcp --dport 250 -j DNAT --to 192.168.80.11 :22
#在外网环境中使用ssh测试
ssh -p 333 root@12.0.0.1
yum -y install net-tools # 安装ifconfig命令
ifconfig ens33
2.5 补充
- 使用DNAT时,同时还要配合SNAT使用,才能实现响应数据包的正确返回
- 主机型防火墙主要使用INPUT、OUTPUT链,设置规则时–般要详细的指定到端口
- 网络型防火墙主要使用FORWARD链,设置规则时很少去指定到端口,一般指定到IP地址或者到网段即可
三、防火墙规则备份和还原
3.1导出备份表的规则
iptables-save > /opt/ipt.txt
3.2 导入规则
iptables-restore < /opt/ipt.txt
3.3 设置自动还原规则
将规则文件保存在 /etc/sysconfig/iptables 中,iptables启动时会自动还原规则
iptables-save > /etc/sysconfig/iptables
systemctl stop iptables # 停止服务自动清空所有规则
systemctl start iptables # 启动服务,自动还原前面保存的规则
四、抓包
Linux的抓包软件和Windows不同
使用 tcpdump 来进行
tcpdump tcp -i ens33 -s 0 -c 50 and dst port ! 22 and src net 192.168.253.0/24 -w ./target.cap
名词解释
名词 | 解释 |
---|---|
tcp | ip icmp arp rarp和tcp udp icmp这些选项都要放到第一个参数的位置,用来过滤数据报的类型 |
-i ens33 | 只抓取经过ens33的包 |
-t | 不显示时间戳,一般不选这个 |
-s 0 | 抓取数据报默认长度为68字节,通常使用-s 0 来获取完整的数据包 |
-c 50 | 抓取50个包 |
dst port ! 22 | 不抓取目标端口是22的数据包 |
src net 192.168.253.0/24 | 数据包的源网络地址为192.168.253.0/24 |
-w ./target.cap | 保存为 cap 文件,方便用 wireshark 分析 |
以上是关于熟练应用snat和dnat,掌握公网私网之间的连通(补充防火墙规则备份以及如何Linux抓包)的主要内容,如果未能解决你的问题,请参考以下文章
iptables中实现内外网相互访问 SNAT与DNAT的原理与应用