4.iptables SNAT DNAT

一、SNAT策略及应用

1、SNAT策略概述

SNAT应用环境

局域网主机共享单个公网IP地址接入Internet(私有IP不能在Internet中正常路由)

SNAT策略的原理

源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射。

SNAT转换前提条件

局域网各主机已正确设置IP地址、子网掩码、默认路由发送数据

Linux网关开启IP路由转发

1.1、开启SNAT命令

Linux系统本身是没有转发功能 只有路由发送数据
临时开启

echo 1 >/proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip forward=1

永久开启

vim /etc/ sysctl. conf
net. ipv4.ip_ forward = 1				#将此行写入配置文件
 
sysctl -P				#读取修改后的配置
1.2 SNAT转换1:固定的公网IP地址
#配置SNAT策略,实现snat功能,将所有192.168.100.0这个网段的ip的源ip改为10.0.0.1
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   出站外网网卡                    外网IP或地址池
1.3 SNAT转换2:非固定的公网IP地址(共享动态IP地址)
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

1.4 案例

192.168.1.250 --> 192.168.1.249 --> 192.168.1.43:80

1.4.1 192.168.1.250的网关指向192.168.1.249

route add -host 192.168.1.43  gw 192.168.1.249   #发往192.168.1.43的请求 网关是192.168.1.249 请求192.168.1.43的数据会发向192.168.1.249

#验证
[root@zabbix-proxy ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.43    192.168.1.249   255.255.255.255 UGH   0      0        0 eth0

1.4.2 192.168.1.249 开启内核转发 POSTROUTING链做SNAT 转换src_ip

#开启内核转发
[root@zabbix ~]# cat /proc/sys/net/ipv4/ip_forward
1

#添加SNAT规则
[root@zabbix ~]# iptables -t nat -I  POSTROUTING -s 192.168.1.250/32 -d 192.168.1.43 -p tcp --dport 80 -j MASQUERADE
#来源地址是192.168.1.250 目的地地址是192.168.1.43:80的数据包 src_ip 更换为本机ip地址

1.4.3 192.168.1.250 发送请求

curl 192.168.1.43

1.4.4 192.168.1.43 进行验证

#tcpdump抓包进行验证
tcpdump -i p3p1 port 80 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on p3p1, link-type EN10MB (Ethernet), capture size 262144 bytes
15:48:05.285997 IP 192.168.1.249.38754 > 192.168.1.43.http: Flags [S], seq 939672207, win 29200, options [mss 1460,sackOK,TS val 1885570437 ecr 0,nop,wscale 7], length 0
15:48:05.286041 IP 192.168.1.43.http > 192.168.1.249.38754: Flags [S.], seq 2964534852, ack 939672208, win 28960, options [mss 1460,sackOK,TS val 48673200 ecr 1885570437,nop,wscale 7], length 0

#nginx日志进行验证 
[root@rstx-43 ~]# tail -f   /var/log/nginx/yum_access.log
192.168.1.249 - - [07/Oct/2022:15:48:05 +0800] "GET / HTTP/1.1" 200 4250 "-" "curl/7.29.0" "-" "192.168.1.43"
192.168.1.249 - - [07/Oct/2022:15:50:13 +0800] "GET / HTTP/1.1" 200 4250 "-" "curl/7.29.0" "-" "192.168.1.43"

二、DNAT原理与应用

2.1、DNAT 应用环境

在Internet中发布位于局域网内的服务器

DNAT原理

修改数据包的目的地址

DNAT转换前提条件

局域网的服务器能够访问Internet
Linux网关开启IP路由转发

2.2、DNAT转换

把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.80.11

iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to 192.168.100.118
或者
iptables -t nat -A PREROUTING -i ens37 -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.100.118
 
iptables -t nat -A PREROUTING -i ens37 -p tcp --dport 80 -j DNAT --to 192.168.100.13-192.168.100.20

2.3 案例

192.168.1.250 --> 192.168.1.249:9999 --> 192.168.1.43:80

2.3.1 192.168.1.249开启内核转发 开启DNAT 目标地址网络转换 dest_ip dest_port 发生改变(网段不一致SNAT规则必须设置好)

#设置SNAT 把所有192.168.1.250发过来的数据包改变 src_ip src_port 在POSTROUTING链 
iptables -t nat -I POSTROUTING -s 192.168.1.250 -j MASQUERADE

#设置DNAT 改变192.168.1.250发往192.168.1.249:9999  dest_ip dest_port   
iptables -t nat -I PREROUTING -d 192.168.1.249 -p tcp --dport 9999  -j DNAT --to 192.168.1.43:80

#DNAT阶段 把原数据包的dest_ip(192.168.1.249):dest_port(9999) 改变为dest_ip(192.168.1.43):dest_port(80) 
#SNAT阶段 把原数据包的src_ip(192.168.1.250):src_port(xxxx) 改变为src_ip(192.168.1.249):src_port(xxxx) 发往192.168.1.43:80
posted @ 2022-10-07 15:41  老夫聊发少年狂88  阅读(80)  评论(0编辑  收藏  举报