[Linux用户空间编程(Linux用户空间和内核空间)

[Linux用户空间编程2.3 五个链(chain)
2.4  四个表(table)
2.5 详细的数据包流程
2.5 IP Table操作命令处理流程
第3章 IP Table对Nat的支持命令
3.1 IP Table对NAT

2.3 五链

2.4 4个表(tables)

2.5 数据包处理细节

2.5 IP表操作命令处理流程

第3 章IP 表支持Nat 命令

3.1 IP表的NAT支持概述

3.1 规则运算

3.3 使用命令指定具体的源地址和目的地址

3.4 使用命令指定网络接口

3.5 指定协议和端口

3.6 内核切换与编译

第四章实际操作案例分析

4.1 源NAT(SNAT)

4.2 目的SNAT(DNAT)

第5 章综合示例

5.1 案例一:通过拨号局域网上网

5.2 案例2:IP映射

附录:NAT、DNAT、MASQUERADE的详细比较

前言:

5G DUT必须实现私网IP接入和互联网服务,并实现NAT功能,完成私网IP地址到公网IP地址的转换。

第1章 NAT功能概述

1.1 什么是NAT

在传统的标准TCP/IP通信过程中,每个路由器只充当中介的角色,俗称存储转发,或者更准确地说,它并不修改转发的数据包。转发数据包,除非您将源MAC地址更改为自己的MAC地址。

NAT(网络地址转换)是根据特殊需要改写数据包的源IP地址、目的IP地址、源端口和目的端口的操作。

1.2 为什么要进行NAT

让我们看看什么时候应该执行NAT。

假设您有一个ISP 为您的校园提供Internet 接入服务。为了便于管理,ISP为校园用户分配的IP地址都是伪IP。然而,一些用户需要建立自己的WWW服务器来向他们的ISP发布信息。目前,该服务是使用NAT 提供的。将多个合法IP地址绑定到防火墙的外部网卡上,并使用NAT技术将发送到其中一个IP地址的报文转发到内部用户的WWW服务器,并将内部WWW服务器的响应报文转发到内部WWW服务器。从合法IP 发送的数据包。

另一个例子是使用拨号上网的网吧。由于有效的IP地址只有一个,因此必须通过某种手段让其他机器能够访问Internet,尤其是代理服务器。应用层代理服务器仅支持有限的协议。如果一段时间后出现新服务,您所能做的就是等待您的代理服务器支持新应用程序的升级版本。使用NAT来解决这个问题

它仅在应用程序层下方进行处理,提供快速访问以及对新服务和应用程序的无缝支持。

另一个应用是重定向。也就是说,在收到数据包后,它不会转发数据包,而是将数据包重定向到系统上的应用程序。最常见的应用程序与Squid 配合成为透明代理,提供对Internet 的无缝访问,同时缓存http 流量。

另一种情况是4G/5G DUT需要在私有网络和公共网络之间转换。

1.3 NAT的类型

源NAT(SNAT)和目的NAT(DNAT),顾名思义,所谓SNAT就是改变转发数据包的源地址,所谓DNAT就是改变转发数据包的目的地址。

DNAT:目标网络地址转换目标网络地址转换。 DNAT 是一种改变数据包的目标IP 地址的技术,与SNAT 结合使用,可以让多个服务器共享一个IP 地址来连接到Internet 并继续提供服务。这种情况经常发生。通过将不同端口分配给同一IP地址来确定数据流的方向。

SNAT:源网络地址转换源网络地址转换。这是一种更改数据包的源IP 地址的技术,通常用于允许多台计算机共享Internet 地址。这仅与IPv4 一起使用,因为IPv4 耗尽了地址,而IPv6 解决了这个问题。

第2章 IP Table概述

2.1 IP Table概述

在Lnux系统上,防火墙、网站转换(NAT)、数据包记录和流量统计由Netfilter子系统提供,而iptables是控制Netfilter的工具。

iptables 以易于控制的方式组织许多复杂的规则,以便管理员可以执行组测试并禁用或启用特定的规则组。

iptable可以为Unix、Linux和BSD个人工作站创建防火墙,也可以为子网创建防火墙以保护其他系统平台。由于iptable只读取数据包头,因此对信息流没有负担,也不需要验证。

2.2. Iptable的链和表结构

2.3 五个链(chain)

PREROUTING: 在数据包进入防火墙之后和路由决策之前修改数据包。

INPUT: 数据包在本地路由后但在用户空间程序意识到之前被修改

OUTPUT: 用户空间程序处理数据包后,数据包将在本地发送,并在再次路由之前修改数据包。

FORWARD: 在初始路由决策之后但在数据包源地址最终更改之前修改数据包

POSTROUTING: 在每次路由决策后修改数据包

: 请注意,链是每个数据包流必须经过的不同链接。每个链的默认策略是“接受”(视情况而定)。

2.4四个表(table)

**Mangle表:**该表主要用于mangled包,改变包的一些属性如TOS(TYPE OF SERVICE)、TTL(TIME TO LIVE)、MARK(后续流量控制)可用于TC等)

Nat表:该表仅用于NAT转换数据包的源地址或目的地址。请注意,如前所述,只有流的第一个数据包与此链匹配,后续数据包会以相同的方式自动处理(DNAT、SNAT、MASQUERADE)。

过滤表:该表用于过滤数据包,可以随时进行匹配和过滤。 现在根据包裹内容移除或接受包裹。您必须使用-t 参数指定要操作的表。如果-t参数不存在,则默认操作过滤表。

Raw 表:设置raw 通常可以通过阻止iptables 对数据包执行链路跟踪操作来提高性能。

: 请注意,表是规则的集合。每个表中的规则条目可以设置数据包不同阶段的规则:raw mangle nat filter。

2.5详细的数据包流程

在上图中,NAT 功能出现在三个位置:

(1)从公网卡接收数据包:在数据包的预处理阶段替换目的IP地址,转换后进行路由。

(2) 接收本地应用程序输出的数据包。在数据包的输出处理模块阶段替换目标IP 地址。

(3)发送到公网网卡的数据包:在数据包后处理阶段,将源IP地址转换为本地公网IP地址。

2.5 IP Table操作命令处理流程

用户空间IP表命令通过内核接口操作内核的Ip_table规则表,最终操纵内核空间的Netfilter钩子函数。

第3章 IP Table对Nat的支持命令

3.1 IP Table对NAT的支持概述

Netfilter是Linux核心中常见的架构,它提供了一组“表”,每个表由多个“链”组成,每个链可以有一个或多个规则配置。另外,系统默认**表是“过滤器”。 **系统默认的表是\’filter\’,所以使用过滤功能时不需要显式指定\’-t filter\’。

但是,当使用NAT 时,使用的表将是“nat”表而不是“过滤器”,因此必须使用**\’-t nat**\’ 选项来显式指示这一点。

和过滤表一样,NAT表也有三个默认的“链”,这三个链也是规则的容器。

(1) 预路由:这里可以定义目的NAT的规则。路由器在路由时只检查数据包的目的IP地址,因此在路由之前必须进行目的NAT,数据包才能正确路由。

**(2)POSTROUTING:** 在这里您可以定义源NAT 的规则。系统确定数据包的路由后,执行链中的规则。

(3) 输出:定义本地生成的数据包的目标NAT规则。

3.1 对规则的操作

将新规则添加到链的末尾(-A)。

在链中的某个位置插入新规则(-I),通常是在开头。

替换链中任意位置的规则(-R)。

删除链中任意位置的规则(-D)。

删除链中的第一条规则(-D)。

3.3通过命令指定具体的源地址和目的地址

使用source/src/-s指定源地址(这里/表示或,依此类推)。使用destination/dst/-s 指定目标地址。您可以使用四种方法来指定IP 地址:

使用完整域名,例如“www.linuxaid.com.cn”。

使用IP 地址,例如“192.168.1.1”。

使用x.x.x.x/x.x.x.x 指定网络地址,例如“192.168.1.0/255.255.255.0”。

使用x.x.x.x/x 指定网络地址,例如“192.168.1.0/24”。这里的24 是UNIX 环境中常用的表示形式。默认子网掩码号为32。换句话说,指定192.168.1.1 相当于192.168.1.1/32。

3.4通过命令指定网络接口

可以使用-in-interface/-i 或-out-interface/-o 指定网络接口。

从NAT原理可以看出,PREROUTING链需要固定目的IP地址。因此,通常使用-i 指定公共IP 接口并将目标IP 地址转换为IP 地址。内部私有IP地址+端口号。

对于POSTROUTING 和OUTPUT,-o 只能用于指定网络接口。 POSTROUTING是源IP地址,因此通常用于在输出到公网之前替换源地址。

3.5 指定协议及端口

可以使用-protocol/-p 选项指定协议。对于udp 和tcp 协议,您还可以使用-source-port/-sport 和-destination-port/-dport 指定端口。

3.6 内核开关与编译

(一)编译

Linux 内核中的Nat 支持需要打开内核选项。

编译内核,编译时选择以下选项:

完整的NAT

MASQUERADE 目标支持

重定向目标支持

(2) 路阁

要使用NAT表,必须首先加载相关模块。

modprobe ip_tables

modprobe ip_nat_ftp

iptable_nat 模块在运行时自动加载。

第4章 实际操作案例解析

在大多数情况下,请务必注意以下事项:

从专用网络到公共网络的源地址转换是多对一的。

公网到私网的转换是一对多

因此,NAT转换是基于端口转换的,NAT内部必须维护一个私有的IP地址到端口号的映射表。

4.1 源NAT(SNAT)

例如,将所有报文的源IP地址从192.168.1.0/24更改为1.2.3.4。

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT –to 1.2.3.4

这里需要注意的是,在路由和过滤过程中,直到有数据包发送出去后,系统才会进行SNAT。

SNAT 有一种特殊情况,称为IP 欺骗,也称为伪装,通常建议在使用拨号Internet 访问或合法IP 地址不固定时使用。例如

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

此时,您可以看到不需要显式指定源IP地址或其他信息。

4.2 目的SNAT(DNAT)

例如,将所有报文的目的IP地址从192.168.1.0/24更改为1.2.3.4。

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -i eth1 -j DNAT –to 1.2.3.4

这里需要注意的是,系统首先执行DNAT,然后执行路由和过滤操作。

DNAT 有一种特殊的重定向情况,也称为重定向。这相当于将符合条件的数据包进入系统时的目标IP地址更改为网络接口的IP地址。这通常在Squid 中配置透明代理时使用。假设Squid的监听端口为3128,则可以使用以下语句将目的端口为80的192.168.1.0/24的数据包重定向到Squid的监听端口:

iptables -t nat -A PREROUTING -i eth1 -p tcp -s 192.168.1.0/24 –dport 80 -j REDIRECT –to-port 3128

第5章 综合例子

5.1 案例1:使用拨号局域网上网

虽然小型企业和网吧主要使用拨号网络访问互联网,但成本和协议支持等因素可能会让他们决定使用IP欺骗来方便本地访问互联网。

内核升级成功后,安装iptables 并运行以下脚本:

#加载相关模块

modprobe ip_tables

我们整理了上百道【运维技术栈面试题】,成为您运维面试路上的好助手。这样,你就可以安心参加面试并获得高薪offer。

这些面试题涵盖了从Shell、MySQL到K8s等云原生技术栈,适合运维行业新人以及运维行业新人的面试需求。升职或换工作以增加薪水。

本次访谈集内容为

174 运维工程师面试题128 k8s 面试题108 shell 脚本面试题200 Linux 面试题51 Docker 面试题35 Jenkis 面试题78 MongoDB 面试题17 ansible 面试题60 dubbo 面试题53 Kafka 面试题18 mysql 面试题40 nginx 面试题77 redis 面试题Zookeeper 题28

总共1000多道面试题,内容全面且有价值。

174 道运营工程师面试问题

1.什么是运维?

2、运维人员在工作场所经常需要与操作人员进行交互。运营人员做什么工作?

3. 给定300台服务器,如何管理它们?

4、我们简单解释一下raid0、raid1和raid5这两种运行模式的运行原理和特点。

5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

3. 给定300台服务器,如何管理它们?

4、我们简单解释一下raid0、raid1和raid5这两种运行模式的运行原理和特点。

5、LVS、Nginx、HAproxy有什么区别,工作中如何选择?

6. Squid、Varinsh、Nginx 有什么区别,你在工作中如何选择?

7.Tomcat和Resin有什么区别?

8.什么是中间件?

9. Tomcat 的三个端口8005、8009、8080 是什么意思?

10.什么是CDN?

11.什么是网站灰度发布?

12、请简单说明一下DNS域名解析的过程。

13.什么是RabbitMQ?

14.Keepalived如何工作?

15.描述LVS工作流程的三种模式。

16、mysql的innodb如何识别锁定问题以及mysql如何减少主从复制延迟?

17.如何重置mysql root密码?

以上#【Linux用户空间编程】相关内容来源仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91387.html

Like (0)
CSDN的头像CSDN
Previous 2024年6月22日
Next 2024年6月22日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注