SNAT与DNAT公私网地址转换

2024-02-20 12:44
文章标签 转换 地址 snat dnat 公私

本文主要是介绍SNAT与DNAT公私网地址转换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

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-ens3316 IPADDR=192.168.190.10017 NETMASK=255.255.255.018 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-ens3316 IPADDR=12.0.0.1017 NETMASK=255.255.255.018 GATEWAY=12.0.0.254
[root@localhost ~]# systemctl restart network

④ 配置7-1网关服务器,分别配置ens33和ens36网卡信息,并开启路由转发功能

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens3316 IPADDR=192.168.190.10117 NETMASK=255.255.255.018 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-ens3613 UUID=0927995e-64e0-49fb-b8ea-7809b06fc6b9
#删除以上内容12 NAME=ens3614 DEVICE=ens3616 IPADDR=12.0.0.25417 NETMASK=255.255.255.018 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.107-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地址,以实现网络安全、网络连接和网络管理的目的 。

这篇关于SNAT与DNAT公私网地址转换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728249

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图