nftables(9)NAT、FLOWTABLES

news2024/11/13 7:55:33

NAT

NAT简介

我们在iptables、firewalld中都介绍过有关NAT的相关部分。那么在nftables中,我们继续介绍nftables中NAT的功能实现方式,配置方法和与前两者的区别。

我们先简单回顾一下NAT的类型和其功能:

这些是不同的网络地址转换(NAT)类型:

伪装和源 NAT(SNAT)

使用以上 NAT 类型之一更改数据包的源 IP 地址。例如,互联网服务提供商(ISP)不会路由私有 IP 范围,如 10.0.0.0/8。如果在网络中使用私有 IP 范围,并且用户可以访问互联网上的服务器,需要将这些范围内的数据包的源 IP 地址映射到公共 IP 地址。

伪装和 SNAT 相互类似。不同之处是:

  • 伪装自动使用传出接口的 IP 地址。因此,如果传出接口使用了动态 IP 地址,则使用伪装。
  • SNAT 将数据包的源 IP 地址设置为指定的 IP 地址,且不会动态查找传出接口的 IP 地址。如果传出接口使用了固定 IP 地址,则使用 SNAT。

目标 NAT(DNAT)

使用此 NAT 类型重写传入数据包的目标地址和端口。例如,如果你的 Web 服务器使用私有 IP 范围内的 IP 地址,因此无法直接从互联网访问,则可以在防火墙上设置 DNAT 规则,将传入的流量重定向到此服务器。

重定向

这个类型是 IDT 的特殊示例,它根据链 hook 将数据包重定向到本地机器。例如,如果服务运行在与其标准端口不同的端口上,可以将传入的流量从标准端口重定向到此特定端口。

测试环境

和我们在做iptables、firewalld测试时的环境是一模一样,内部区域为192.168.140.0/24网段,nftables配置在主机B上,分为内部区域,和外部区域。其中主机A的网关是主机B 192.168.140.250,主机B的网关是主机C模拟的公网192.168.170.128。
​​​​​
如图所示,这是主机B的IP地址和路由信息

主机B已经开启了路由转发功能
这是主机A的IP地址和路由信息
这是主机C的路由信息

配置参数

snat [[ip | ip6] [ prefix ] to] ADDR_SPEC [:PORT_SPEC] [FLAGS]
dnat [[ip | ip6] [ prefix ] to] ADDR_SPEC [:PORT_SPEC] [FLAGS]
masquerade [to :PORT_SPEC] [FLAGS]
redirect [to :PORT_SPEC] [FLAGS]
ADDR_SPEC := address | address - address
PORT_SPEC := port | port - port
FLAGS  := FLAG [, FLAGS]
FLAG  := persistent | random | fully-random

SNAT(Source NAT)
语法:snat [[ip | ip6] [prefix] to] ADDR_SPEC [:PORT_SPEC] [FLAGS]
作用:修改数据包的源地址(和可选的源端口)。仅在postrouting和input链中有效。
用途:常用于私有网络访问公网时,将内部网络的源地址转换为公共IP地址。

DNAT(Destination NAT)
语法:dnat [[ip | ip6] [prefix] to] ADDR_SPEC [:PORT_SPEC] [FLAGS]
作用:修改数据包的目的地址(和可选的目的端口)。仅在prerouting和output链中有效。
用途:常用于将外部流量重定向到内部网络中的特定服务器或服务。

MASQUERADE
语法:masquerade [to :PORT_SPEC] [FLAGS]
作用:类似于SNAT,但自动使用出口接口的IP地址进行转换。仅在postrouting链中有效。
用途:特别适用于具有动态(公共)IP地址的网关,因为它不需要手动指定源地址。

REDIRECT
语法:redirect [to :PORT_SPEC] [FLAGS]
作用:特殊形式的DNAT,将数据包的目的地址转换为本地主机地址。可以修改目的端口。
用途:当您只想在不同接口上更改传入流量的目的端口时非常有用。

注意事项
地址和端口规范:ADDR_SPEC可以是单个地址或地址范围(address - address),PORT_SPEC可以是单个端口或端口范围(port - port)。

标志:FLAGS可以是persistent(持久化)、random(随机选择地址/端口)或fully-random(完全随机选择地址/端口)。

前缀关键字:prefix关键字允许映射多个源地址到多个目的地址。

内核版本:在内核5.2及更高版本中,对于IPv4和IPv6地址,dnat和snat语句需要明确指定ip或ip6关键字。在内核4.18之前,需要同时存在prerouting和postrouting基本链,以确保回程数据包能被netfilter看到并进行反向转换。

配置伪装masquerade

在我们的环境中,此时主机A是无法和主机C通信的,因为主机C没有到达主机A的路由。那么我们在主机B上配置SNAT,将数据包出接口转换为主机B的192.168.170.200,那么主机C看到的数据包的源地址就为192.168.170.200,是可以回包的,此时就可以通信。

配置表和链

创建新表NAT,链名称为postrouting,注意这个名字可以自定义。关键在看后面的type 和hook,因为我们是配置伪装即SNAT,那么需要配置到postrouting链上。有关更多表和链的相关内容,大家可以参考iptables的相关文章。

配置rule规则

我这里192.168.170.200即与主机C相连的接口为ens36。

测试

此时主机A可以ping通主机C,在主机C上抓包,可以看到回包地址为192.168.170.200

也可以通过日志查看该条nat规则是否命中

通过log参数来添加日志记录
查看日志就可以看到该条规则的日志信息

配置SNAT

源 NAT(SNAT)可让将通过接口发送的数据包 IP 改为专门的 IP 地址。然后,防火墙会替换传出数据包的源 IP。在我们的环境中,在主机B上配置SNAT,将数据包出接口转换为主机B的192.168.170.200。mqsquerade是转换为接口地址,SNAT需要手动指定IP地址。

这里我们通过insert插入一条规则,转换为192.168.170.200,并且记录日志信息

测试

此时主机B ping主机C依旧是通的
该条信息已经有了日志记录

配置DNAT

目标 NAT (DNAT)可让将防火墙上的流量重定向到无法从互联网直接访问的主机。

在本例中,可以通过配置DNAT实现,访问防火墙接口的22000端口然后重定向到内网主机192.168.140.248的22端口。

配置表和链

创建一个prerouting链,hook到prerouting,因为是DNAT所以需要配置在prerouting链上

配置rule规则

将访问ens36接口的2200的tcp端口,重定向到140.248的22端口

测试

此时已经可以正常登录

配置重定向

重定向功能是目标网络地址转换(DNAT)的一种特殊情况,它根据链 hook 将数据包重定向到本地计算机。

例如,可以将发送到本地主机端口 20000 的流量重定向到端口 2017

FLOWTABLES

flowtables简介

在 nftables 或类似的网络过滤和流量控制框架中,flowtables 是一种高级特性,用于加速软件中的数据包转发。flowtables 通过存储和缓存转发决策来优化性能,这些决策基于数据包的某些关键属性(如源和目的地址、端口以及层3/4协议)来做出。这种方式可以显著减少对每个数据包都进行完整路由查找和决策。

Flowtables 的基本概念

条目(Entries)flowtables 中的每个条目都代表了一个特定的流量模式,由输入接口、源和目的地址、源和目的端口以及层3/4协议组成。这些条目还缓存了目的接口和网关地址,以便更新目的链路层地址并转发数据包。

缓存和更新:当数据包第一次匹配到 flowtable 中的一个条目时,转发决策(如目的接口和网关)会被缓存。后续具有相同元组的数据包将直接使用这个缓存的决策,而无需再次进行完整的查找过程。这减少了处理时间和CPU负载。

TTL 和 Hop Limit:在转发过程中,flowtables 还会处理TTL(Time to Live,生存时间)和Hop Limit字段的递减。

优先级(Priority)flowtables 可以配置优先级,以确定它们在网络处理过程中的顺序。优先级可以是一个整数,其中较低的数字表示较高的优先级。

地址族(Address Family)flowtables 可以配置为仅处理特定地址族的数据包,如IPv4(ip)、IPv6(ip6)或混合IPv4/IPv6(inet,这是一个虚拟地址族,用于创建同时支持IPv4和IPv6的表)。

配置参数

{add | create} flowtable [family] table flowtable { hook hook priority priority ; devices = { device[, ...] } ; }
list flowtables [family]
{delete | destroy | list} flowtable [family] table flowtable
delete flowtable [family] table handle handle

添加(Add):使用 add 或 create 命令可以为一个给定的地址族添加一个新的 flowtable。需要指定 flowtable 的名称、钩子(hook)、优先级以及可选的设备列表。
列出(List):list 命令用于列出所有已定义的 flowtables,包括它们的名称、地址族和优先级等信息。
删除(Delete/Destroy):delete 命令用于删除指定的 flowtable,如果该 flowtable 不存在,则操作会失败。而 destroy 命令也用于删除 flowtable,但即使指定的 flowtable 不存在,也不会报错。此外,还可以使用 delete flowtable [family] table handle handle 命令通过句柄来删除 flowtable。

配置

nftables 工具使用 netfilter 框架为网络流量提供网络地址转换(NAT),并且提供了基于快速路径功能的 flowtable 机制来加快数据包转发。

table ip nat-flowtable { ... }: 定义了一个名为 nat-flowtable 的 IP 表。

flowtable flowtable-chain { ... }: 在 nat-flowtable 表中定义了一个名为 flowtable-chain 的流表。

hook ingress priority filter: 指定了该流表在数据包流入时触发,且优先级为 filter。这表示该流表将在数据包进入系统时被触发。
nftables 中 flowtable 的 hook 参数后可用的参数取决于使用场景和网络功能,常见的参数包括:
ingress:数据包进入系统时触发。
egress:数据包离开系统时触发。
forward:数据包在系统内部进行路由转发时触发。
input:数据包目的地为本地系统时触发。
output:数据包来源于本地系统时触发。
prerouting:数据包进入路由流程之前触发。
postrouting:数据包离开路由流程之后触发。

devices = { ens33, ens36 }: 指定了应用于此流表的网络设备列表,其中数据包将被处理。设备列表包括 ens33 和 ens36,即仅针对这两个网络接口上的数据包进行处理。
定义一个flowtable-forward的链,hook到forward上,然后在该链添加规则,具有 established 连接跟踪状态,通过flowtable-chain进行流量卸载

测试

要看到详细的日志信息可以给上面配置的规则添加日志记录功能

添加日志记录并设置flowtable-forward前缀

在主机C上通过ssh连接主机B的22000端口,会被转发到248的22端口,此时已经连接上了。
此时已经看到匹配上了该规则,并进行NAT流量卸载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1931725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 Windows 上开发.NET MAUI 应用_1.安装开发环境

开发跨平台的本机 .NET Multi-platform App UI (.NET MAUI) 应用需要 Visual Studio 2022 17.8 或更高版本,或者具有 .NET MAUI 扩展的最新 Visual Studio Code。要开始在 Windows 上开发本机跨平台 .NET MAUI 应用,请按照安装步骤安装 Visual Studio 20…

leetcode94. 二叉树的中序遍历,递归法+迭代法。附带前序遍历方法

leetcode94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root [] 输出:[] 示例 3: …

高职综合布线实训室

一、高职综合布线实训室建设背景 随着《国民经济和社会发展第十四个五年规划和2035年远景目标纲要》的深入实施,数字化转型已成为国家发展的核心战略之一,计算机网络技术作为数字化建设的基石,其重要性日益凸显。然而,面对数字时代…

【手撕RLHF-DPO(1)】不是PPO训不起,而是DPO更有性价比!

Introduction Direct Preference Optimization: Your Language Model is Secretly a Reward Model 在LLM对齐问题上,OpenAI提出的RLHF训练范式最为人熟知,同时也是ChatGPT行之有效的对齐方案。 RLHF通常包含三个步骤:SFT, Reward Model, PPO…

【STM32】RTT-Studio中HAL库开发教程三:IIC通信--AHT20

文章目录 一、I2C总线通信协议二、AHT20传感器介绍三、STM32CubeMX配置硬件IIC四、RTT中初始化配置五、具体实现代码六、实验现象 一、I2C总线通信协议 使用奥松的AHT20温湿度传感器,对环境温湿度进行采集。AHT20采用的是IIC进行通信,可以使用硬件IIC或…

Visual Studio使用——在vs中给vb.net项目添加新的窗口:新建的方式、添加已有窗口的方式

目录 引出Visual Studio使用vb添加新的窗体自定义代码片段vs显示所有文件 总结Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 引出 Visual Studio使用—…

trl - 微调、对齐大模型的全栈工具

文章目录 一、关于 TRL亮点 二、安装1、Python包2、从源码安装3、存储库 三、命令行界面(CLI)四、如何使用1、SFTTrainer2、RewardTrainer3、PPOTrainer4、DPOTrainer 五、其它开发 & 贡献参考文献最近策略优化 PPO直接偏好优化 DPO 一、关于 TRL T…

安全防御,防火墙配置NAT转换智能选举综合实验

目录: 一、实验拓扑图 二、实验需求 三、实验大致思路 四、实验步骤 1、防火墙的相关配置 2、ISP的配置 2.1 接口ip地址配置: 3、新增设备地址配置 4、多对多的NAT策略配置,但是要保存一个公网ip不能用来转换,使得办公区的…

c++入门----类与对象(上)

大家好啊,好久没有更新了。因为本人的愚笨,想与大家分享的话肯定还得自己明白了才能给大家分享吧。所以这几天都在内部消化。好给大家优质的文章。当然我写的肯定还是很有问题的,希望大家可以在评论区里面指出来。好,废话不多说&a…

LabVIEW 与 PLC 通讯方式

在工业自动化中,LabVIEW 与 PLC(可编程逻辑控制器)的通信至关重要,常见的通信方式包括 OPC、Modbus、EtherNet/IP、Profibus/Profinet 和 Serial(RS232/RS485)。这些通信协议各有特点和应用场景&#xff0c…

从图表访问Data Store Memory

Simulink模型将全局变量实现为数据存储,可以是数据存储内存块,也可以是Simulink.Signal的实例。您可以使用数据存储在多个Simulink块之间共享数据,而无需显式的输入或输出连接来将数据从一个块传递到另一个块。Stateflow图表通过符号化地读取…

警惕预言成真!3本预警、On Hold已被剔除,新增8本SCI/SSCI被除名!7月WOS更新(附下载)

本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • IEEE计算机类,4.0-5.0(48天录用) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用&…

精益思维在数字工厂建设中的具体应用

在数字化浪潮席卷全球的今天,数字工厂建设已成为企业转型升级的必由之路。然而,如何确保数字工厂的高效运行和持续创新,成为摆在众多企业面前的难题。精益思维,作为一种追求持续改进和卓越绩效的管理理念,正成为助力数…

iPhone手机怎么识别藏文?藏语翻译通App功能介绍:藏文OCR识别提取文字

在工作学习的过程中,遇到不会的藏文,也不知道怎么把文字打出来,这个时候可以试试《藏语翻译通》App的图片识别功能,支持拍照识别和图片识别,拍一拍就能提取藏文文字,并支持一键翻译和复制分享。 跟着小编的…

汽车免拆诊断案例 | 2017 款林肯大陆车发动机偶尔无法起动

故障现象 一辆2017款林肯大陆车,搭载2.0T发动机,累计行驶里程约为7.5万km。车主进厂反映,有时按下起动按钮,起动机不工作,发动机无法起动,组合仪表点亮正常;多次按下起动按钮,发动机…

01大学物理电磁篇 静电场

5-6 静电场的环路定理 电势能 5-7电势 5-8电场强度与电势梯度

背部筋膜炎最有效的治疗方法

背部筋膜炎症状:背部筋膜炎引起的疼痛通常是钝痛或酸痛,且这种疼痛是无菌性炎症产生的炎症因子、疼痛因子刺激局部神经引起的。疼痛主要发生在腰背部,特别是两侧腰肌和髂嵴上方可能会更加明显。长时间不活动或活动过度都可能诱发疼痛。疼痛可…

使用element UI Cascader 级联选择器实现省/市/区选择

<template><div><label>位置</label><el-cascader:options"pcaTextArr"v-model"selectedOptions"change"handleChangeAddress":props"{expandTrigger: hover,multiple: true,checkStrictly: true,emitPath: fal…

windows 打包pyd文件

1.新建一个py文件&#xff0c;myunit.py&#xff0c;里面的代码是: class Adder: def __init__(self, a, b): self.a a self.b b def add(self): return self.a self.b 2.新建一个py文件&#xff0c;setup.py&#xff0c;里面的代码是: from setuptools import setup fro…

完整教程 linux下安装百度网盘以及相关依赖库,安装完成之后启动没反应 或者 报错

完整教程 linux下安装百度网盘以及相关依赖库&#xff0c;安装完成之后启动没反应 或者 报错。 配置国内镜像源&#xff1a; yum -y install wget mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak wget -O /etc/yum.repos.d/CentOS-Base.repo ht…