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

相关文章

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

C++/《C/C++程序编译流程》

程序的基本流程如图:   1.预处理        预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。 读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理将所有的“#define”删除,并且展开所有的宏定义处理所有的条件编译指令,如:“#if”、“