前言
SNAT和DNAT是两种重要的网络地址转换技术,它们允许内部网络中的多个主机共享单个公共IP地址,或者将公共IP地址映射到内部网络中的特定主机。这些技术在构建企业级网络和互联网应用程序时非常重要,因为它们可以帮助保护内部网络安全,同时提供对外部网络的可访问性。
目录
前言
一、SNAT
1. 概述
2. SNAT原理与应用
3. SNAT转换前提条件
4. 案例演示
5. 公网地址未知
二、DNAT
1. 概述
2. DNAT原理与应用
3. DNAT转换前提条件
4. 案例演示
一、SNAT
1. 概述
SNAT(Source Network Address Translation)是一种将私有IP地址转换为公共IP地址的技术,通常用于将内部网络中的多个主机共享单个公共IP地址的情况。在SNAT过程中,路由器或防火墙会将内部主机的IP地址替换为公共IP地址,以便能够与互联网通信。当公共IP地址接收到响应时,路由器或防火墙会将响应转发到相应的内部主机。
2. SNAT原理与应用
SNAT 应用环境:局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由)
SNAT原理:源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映射
3. SNAT转换前提条件
① 局域网各主机已正确设置IP地址、子网掩码、默认网关地址
② Linux网关开启IP路由转发 linxu系统本身是没有转发功能 只有路由发送数据
4. 案例演示
公网ip有限,利用SNAT技术实现私网地址都可以访问公网
环境准备:
① 三台服务器:7-0客户端、7-1网关、7-2服务端
② 硬件要求:7-0和7-2只需一块网卡、7-1需要两块网卡
③ 网络模式要求:7-0为NAT模式、网卡ens33为NAT模式、网卡ens36为仅主机模式、7-2为仅主机模式
④ IP地址要求:7-0为192.168.190.100/24,网关为192.168.190.101;7-1ens33网卡地址为192.168.190.101/24,网关为192.168.190.101、ens36为12.0.0.254/24,网关为12.0.0.254;7-2为12.0.0.10/24,网关为12.0.0.254
图示:
操作:
① 关闭三台机器的防火墙和selinux,并安装httpd服务
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y
② 配置7-0客户端,修改网卡ip为192.168.190/24,网关192.168.190.101,重启网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
16 IPADDR=192.168.190.100
17 NETMASK=255.255.255.0
18 GATEWAY=192.168.190.101
[root@localhost ~]# systemctl restart network
③ 配置7-2客户端,修改网卡ip为12.0.0.10,网关12.0.0.254,重启网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
16 IPADDR=12.0.0.10
17 NETMASK=255.255.255.0
18 GATEWAY=12.0.0.254
[root@localhost ~]# systemctl restart network
④ 配置7-1网关服务器,分别配置ens33和ens36网卡信息,并开启路由转发功能
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
16 IPADDR=192.168.190.101
17 NETMASK=255.255.255.0
18 GATEWAY=192.168.190.101
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens36
13 UUID=0927995e-64e0-49fb-b8ea-7809b06fc6b9
#删除以上内容
12 NAME=ens36
14 DEVICE=ens36
16 IPADDR=12.0.0.254
17 NETMASK=255.255.255.0
18 GATEWAY=12.0.0.254
[root@localhost ~]# vim /etc/sysctl.conf
11 net.ipv4.ip_forward=1 #开启路由转发
[root@localhost ~]# sysctl -p #刷新配置文件
net.ipv4.ip_forward = 1
⑥ 模拟环境中机器间默认是互通的,但生产环境内网和外网没有SNAT的情况下是不通的,这里的源地址为192.168.190.100,正常情况下私网ip是不会出现在公网中
7-0内网机器:
[root@localhost ~]# curl 12.0.0.10
7-2公网服务器:
[root@localhost ~]# tail -f /var/log/httpd/access_log
192.168.190.100 - - [19/Feb/2024:18:44:28 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
⑦ 在7-1中添加防火墙规则使得来源于192.168.30.0/24网段的所有从ens36网阿卡流出数据的ip全部NAT为12.0.0.254。然后再使用7-0去curl7-2服务端并在服务端实时查看日志
7-1网关服务器:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.190.0/24 -o ens36 -j SNAT --to 12.0.0.254
#将源IP地址为192.168.190.0/24网段的内部主机数据包进行SNAT地址转换,使用公网IP地址12.0.0.254作为源IP地址,并通过ens36接口进行转发
7-0客户机:
[root@localhost ~]# curl 12.0.0.10
7-2服务器:
[root@localhost ~]# tail -f /var/log/httpd/access_log
192.168.190.100 - - [19/Feb/2024:18:44:28 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
12.0.0.254 - - [19/Feb/2024:18:50:45 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
此时,可以看见日志源ip已转换为公网地址
5. 公网地址未知
可以将内部网络中的数据包源IP地址转换为外部网络接口的IP地址,以便能够通过外部网络进行访问。这样做的好处是可以隐藏内部网络的真实IP地址,增强安全性,同时也可以避免公网IP地址不足的问题。
7-1网关服务器:
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.190.0/24 -o ens36 -j SNAT --to MASQUERADE
#转换后的源IP地址为ens36接口的IP地址,并使用MASQUERADE方式进行转换;MASQUERADE方式是一种特殊的SNAT方式,它会动态地将内部网络中的IP地址转换为外部网络接口的IP地址,这样可以方便地处理不同的内部网络IP地址转换到同一个外部IP地址的情况。可以理解为伪装。
二、DNAT
1. 概述
DNAT(Destination Network Address Translation)是一种将公共IP地址转换为私有IP地址的技术,通常用于将公共IP地址映射到内部网络中的特定主机。在DNAT过程中,路由器或防火墙会将公共IP地址替换为内部主机的私有IP地址,以便能够将请求转发到正确的主机。当内部主机接收到请求时,它会将响应发送回路由器或防火墙,后者会将响应的源地址转换为公共IP地址,以便将响应发送回请求方。
2. DNAT原理与应用
DNAT应用环境:在Internet中发布位于局域网内的服务器
DNAT原理:目的地址转换,根据指定条件修改数据包的目的IP地址,保证了内网服务器的安全,通常被叫做目的映射。
3. DNAT转换前提条件
① 局域网的服务器能够访问Internet
② 网关的外网地址有正确的DNS解析记录
③ Linux网关开启IP路由转发
4. 案例演示
为提高服务器安全性,从公网访问的用户只能通过nat转换地址才可访问内网中的服务器
环境准备:
① 三台服务器:7-0客户端、7-1网关、7-2服务端
② 硬件要求:7-0和7-2只需一块网卡、7-1需要两块网卡
③ 网络模式要求:7-0为NAT模式、网卡ens33为NAT模式、网卡ens36为仅主机模式、7-2为仅主机模式
④ IP地址要求:7-0为192.168.190.100/24,网关为192.168.190.101;7-1ens33网卡地址为192.168.190.101/24,网关为192.168.190.101、ens36为12.0.0.254/24,网关为12.0.0.254;7-2为12.0.0.10/24,网关为12.0.0.254
图示:
① 网关服务器配置规则
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.190.101
#将到达本机的目标IP地址为12.0.0.254,目标端口为80的TCP数据包进行DNAT地址转换,将目标IP地址转换为192.168.190.101。
② 实时查看7-0的/var/log/httpdd/access_log日志,使用7-2公网地址直接curl内网的7-0,可以看到日志中源地址
7-2公网客户端:
[root@localhost ~]# curl 192.168.190.100
7-0内网服务端:
[root@localhost ~]# tail -f /var/log/httpd/access_log
12.0.0.10 - - [19/Feb/2024:21:19:23 +0800] "GET / HTTP/1.1" 403 4897 "-" "curl/7.29.0"
总结:
SNAT和DNAT都是NAT的一种形式,用于在不同网络之间转换IP地址,以实现网络安全、网络连接和网络管理的目的 。