SNAT的链路流程

2024-09-07 14:04
文章标签 流程 snat 链路

本文主要是介绍SNAT的链路流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A主机,有公网ip,比如1.1.1.1

              有内网ip,比如192.168.1.1

B主机, 有内网ip,比如192.168.1.123

A主机和B主机在同一局域网,用交换机连接。或者在云平台,两个属于同一个vpc下的同一个subnet,也就是在同一个虚拟私人网络下的,同一个子网内。

如何实现B主机通过A主机的公网ip访问公网的服务?

这个就是snat解决的问题

snat:  source network  address translation     源  网络地址转换

效果:B主机通过A主机的公网ip,访问公网服务,比如公网上的yum仓库,公网上的容器镜像仓库

首先,在A主机上进行两项操作

1. 开启linux操作系统的路由转发功能

echo  "net.ipv4.ip_forword = 1"  >  /etc/sysctl.conf

sysctl  -p

2. 开启SNAT 网络地址转换功能

用iptables

红帽系列可以用firewalld

实现原理:

B主机将自己的网关地址改为A的内网地址192.168.1.1

B主机访问外网的请求的报文会到A主机

由于A主机开启了ip_forword功能和SNAT功能

所以会实现两个动作,路由转发和源地址转换

由于B主机的报文的目标ip是公网服务器

所以A主机会代替B主机把报文发往公网服务器地址

由于A主机开启了SNAT源地址转换功能

所以A主机在代替B主机把报文发送公网服务器地址的同时

会修改报文的源ip地址,iptables服务进行snat的设置类似如下

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 1.1.1.1

我们可以看到“snat to-source“的字样,意思就是把前面的源地址转变成另一个源地址

这样,B主机请求公网服务的报文的源ip就可以被修改为A主机的公网ip

数据报就可以到达公网服务器。

这里有一个问题?

B主机的报文是如何到达A主机的?它怎么知道A主机可以帮自己转发数据的?

因为,B主机的网关设置为了A主机的IP地址

A主机在这里相当于一个路由器的角色

平时主机把自己的网关设置为路由器的一个端口IP

目的就是把数据报交给路由器,让路由器转发到不同网段。

那么linux操作系统也有路由器的功能,当开启了路由转发

也会进行同样的操作

所有B主机把网关设置为A主机的IP地址

A主机就可以帮B主机把数据报文转发

而SNAT执行的动作主要是修改这个报文的源IP

因为如果报文的源IP还是内网地址,也就是B主机的地址

这个报文是不能在公网上进行通信的

第二个问题,请求报文到达公网服务器,公网给了响应报文之后

这个响应报文的目标IP是A主机的公网IP地址,那么响应报文如何到达B主机?

这里有一个概念,叫连接跟踪表。长这样

连接跟踪表(connection track table)

这个表,路由器上有,linux操作系统上也有。

当A主机接收到公网服务器返回的响应报文的时候

会查看连接跟踪表,看这个响应报文,当时是谁要去请求数据的

一看

是B主机让转发去找这个公网服务器的

然后

A主机就会把响应报文转发给B主机

那么B主机就实现了通过A主机的公网IP来访问公网服务器的目的

这篇关于SNAT的链路流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

使用JavaConfig配置Spring的流程步骤

《使用JavaConfig配置Spring的流程步骤》JavaConfig是Spring框架提供的一种基于Java的配置方式,它通过使用@Configuration注解标记的类来替代传统的XML配置文... 目录一、什么是 JavaConfig?1. 核心注解2. 与 XML 配置的对比二、JavaConf