SNAT和DNAT原理及应用

108 阅读6分钟

SNAT原理及应用

概述

SNAT的典型应用环境

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

SNAT原理

源地址转换,Source Network Address Translantion

修改数据包的源地址

SNAT源地址转换过程

  • 数据包从内网发送到公网时,SNAT会把数据包的源地址由私网IP转换成公网IP。
  • 当相应的数据包从公网发送到内网时,会把数据包的目的地址由公网IP转换为私网IP。
  • 当内网有多台主机访问外网时,SNAT在转换时会自动分配端口,不同内网主机会通过端口号进行区分。

小知识:

一个IP地址做SNAT转换,一般可以让内网100到200台主机实现上网

SNAT策略的配置

前提条件

局域网各主机正确设置ip地址/子网掩码

局域网各主机正确设置默认网关地址

linux网关支持IP路由转发

临时打开IP路由转发:

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

永久打开IP路由转发:

vim /etc/ sysctl. conf ##linux内核主配置文件
net.ipv4.ip_forward = 1            #将此行写入配置文件
 
sysctl -P               #读取修改后的配置

SNAT转换

SNAT转换1:固定的公网IP地址

#配置SNAT策略,实现SNAT功能,将所有192.168.46.0这个网段内的ip的源地址改为12.0.0.2
 iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -o ens36 -j SNAT --to 12.0.0.2      
 或
 iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -o ens36 -j SNAT --to-source 12.0.0.2-12.0.0.10
 
 #-A POSTROUTING  指定POSTROUTING链
 #-s 192.168.72.0/24  源地址所处的网段(内网IP)
 #-o ens33  指定输出网卡 
 #-j SNAT   
 #--to 12.0.0.2   外网IP
 #--to-source 12.0.0.2-12.0.0.10   外网地址池

SNAT转换2:非固定的公网IP地址(共享动态IP地址)

iptables -t nat -A POSTROUTING -s 192.168.72.0/24 -o ens33 -j MASQUERADE

SNAT转换实列操作

实现内网主机通过一个固定的公网ip地址上网

准备:

web服务器IP地址:12.0.0.12 同时关闭防火墙和selinux防止影响操作,并开启httpd服务

网关服务器内网IP地址(ens33):192.168.46.30

外网IP地址(ens36):12.0.0.254;打开IP路由转发、并开启httpd服务

客户端IP地址:192.168.46.20

实验目的

实现内网客户端主机访问web服务器时将IP地址:192.168.46.20转化为12.0.0.12访问,在web服务器的日志文件中查看客户端访问地址是否发生改变,成功即实现SNAT转换

linux网关服务器准备

Snipaste_2022-09-15_20-56-40.png Snipaste_2022-09-15_20-59-34.png Snipaste_2022-09-15_21-02-20.png

iptables的安装

systemctl stop firewalld.service  ##关闭防火墙
setenforce 0
​
yum insatll -y iptables iptables-services ##安装iptables服务
systemctl start iptables.services ##开启iptables服务

Snipaste_2022-09-15_21-05-01.png

网关服务器中打开ip路由转换

vim  /etc/sysctl.conf
net.ipv4.ip_forward = 1 ##在/etc/sysctl.conf中写入
sysctl -p

Snipaste_2022-09-15_21-34-41.png

在网关服务器上做SNAT转换

iptables -F -t nat  ##清除规则
iptables -t nat -A POSTROUTING -s 192.168.46.0/24 -o ens36 -j SNAT --to 12.0.0.254
iptables -nL -t nat

Snipaste_2022-09-15_21-39-43.png

内网客户端设置ip和网关

Snipaste_2022-09-15_21-41-08.png Snipaste_2022-09-15_21-55-48.png ### 外网web服务器的设置

设置IP地址

Snipaste_2022-09-15_21-45-41.png

网卡设置

Snipaste_2022-09-15_21-43-06.png

安装httpd服务并开启服务 ,关闭防火墙和selinux

Snipaste_2022-09-15_21-49-52.png

测试

内网客户端ping外网和网关测试

Snipaste_2022-09-15_22-07-45.png

内网访问httpd测试

Snipaste_2022-09-15_22-08-09.png

查看外网web服务器的日志文件tail /var/log/httpd/access_log,查看访问网址是否修改为12.0.0.254,即SNAT转换是否成功

Snipaste_2022-09-15_22-10-04.png

DNAT原理与应用

DNAT概述

DNAT策略典型应用环境

在lnternet中发布位于企业局域网内的服务器

DNAT策略的原理

目标地址转换,Destination Network Address Translation

修改数据包的目标地址

注:

客户机想访问服务器时,访问的是网关地址,由网关去找服务器的内网地址

如果多台服务器使用同一个网关,那么通过不同的端口号来对应不同的服务

DNAT策略的应用

前提条件

局域网的web服务器能够访问lnternet

网关的外网IP地址有正确的DNS解析记录

linux网关支持ip路由转发

vim /etc/sysctl.conf
net.ipv4.ip_forward=1    #将此行写入配置文件
sysctl -p     #读取修改后的配置

DNAT转换1:发布内网的Web服务

#把从ens33进来的要访问web服务的数据包目的地址转换为 192.168.46.30
 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.46.30
 或
 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.46.10-192.168.46.30
 
 #-A PREROUTING        ##修改目标地址的链           
 #-i ens33             ##入站网卡
 #-d 12.0.0.254        ##数据包的目的地址
 #-p tcp --dport 80    ##数据包的目的端口
 #-j DNAT              ##使用DNAT功能
 #--to 192.168.46.30   ##内网服务器IP

DNAT转换2:发布时修改目标端口

#将公网的IP和端口,转换成内网的IP和端口
 
 #发布局域网内部的web服务器,外网主机需使用80端口进行连接
 #将12.0.0.254:8080 转换成 192.168.46.20:80
 iptables -t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.46.20:80
 
 #发布局域网内部的OpenSSH服务器, 外网主机需使用250端口进行连接
 #将12.0.0.254:250 转换成 192.168.46.20:22
 iptables-t nat -A PREROUTING -i ens33 -d 12.0.0.254 -p tcp --dport 250 -j DNAT --to 192.168.46.20:22

注意:使用DNAT时,同时还有配合SNAT使用,才能实现响应数据包的正确返回

tcpdump——linux抓包

wireshark 抓包工具只在windows中使用

tcpdump 可以在Linux系统中使用

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的包。
  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。Net:网段,host:主机。
  8. -w ./target.cap ∶ 保存成cap文件,方便用ethereal (即wireshark)分析

实验 iptables防火墙和DNS分离解析

实验内容

web服务器在内网中提供httpd服务

要求内网中的主机通过www.zhang.com 访问web服务器,外网主机也通过www.zhang.com 访问web服务器

实验环境

web服务器:192.168.46.20/24 (VMnet1)

外网主机地址:linux 12.0.0.100/24 (VMnet2)

win10客户机 12.0.0.200/24(VMnet2)

网关服务器:

ens33网卡地址:192.168.46.254(VMnet1)

ens36网卡地址:12.0.0.254(VMnet2)

实验步骤

配置网关服务器

1.配置网卡

新增一网卡ens36

ens33网卡模式设置为VMnet1,ip地址为192.168.46.254

ens36网络模式设置为VMnet2,ip地址为12.0.0.254

Snipaste_2022-09-16_15-16-59.png

Snipaste_2022-09-16_15-58-56.png

2.关闭firewalld和selinux,开启路由转发功能

systemctl stop firewalld
setenforce 0
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
sysctl -p

Snipaste_2022-09-16_16-02-05.png

3.配置iptables策略

3.1设置SNAT服务,解析源地址,修改nat表中POSTROUTING

iptables -t nat -A POSTROUTING -s 192.168.46.20/24 -o ens36 -j SNAT --to 12.0.0.254

3.2设置DNAT服务,解析目地址,修改nat表中PRETROUTING

iptables -t nat -A PREROUTING -d 12.0.0.254 -i ens36 -p tcp --dport 80 -j DNAT --to 192.168.46.20:80

Snipaste_2022-09-16_16-36-47.png

4.配置DNS分离解析

当内网解析ww.zhang.com时,将域名解析为:192.168.46.254

当外网解析ww.zhang.com时,将域名解析为:12.0.0.254

4.1 编辑主配置文件

Snipaste_2022-09-16_18-14-36.png Snipaste_2022-09-16_18-15-07.png

4.2编辑区域配置文件

Snipaste_2022-09-16_17-07-22.png

4.3配置内网解析地址库文件

cd /var/named/
cp -p named.localhost  zhang.com.zone.lan
vim  zhang.com.zone.lan
Snipaste_2022-09-16_17-11-58.png

4.4配置外网解析地址库文件

Snipaste_2022-09-16_17-12-29.png

配置web服务器

1.关闭firewalld和selinux

Snipaste_2022-09-16_16-06-12.png

2.修改网络模式和网卡ip地址

Snipaste_2022-09-16_16-07-06.png Snipaste_2022-09-16_16-09-02.png

3.安装httpd服务 并启动服务

Snipaste_2022-09-16_16-10-14.png

写一个网页 验证是否能打开网页

Snipaste_2022-09-16_16-28-22.png

Snipaste_2022-09-16_16-27-50.png

配置外网客户端(win10和linux虚拟机)

1.修改linux网络模式和网卡

关闭防火墙和selinux

Snipaste_2022-09-16_16-11-30.png Snipaste_2022-09-16_16-18-49.png

2.修改win10网络模式和ip、网关地址

Snipaste_2022-09-16_16-21-09.png Snipaste_2022-09-16_16-23-24.png ## 验证

Snipaste_2022-09-16_19-36-23.png