AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 467076
Accepted
ivanleoncz
ivanleoncz
Asked: 2018-09-06 08:33:39 +0800 CST2018-09-06 08:33:39 +0800 CST 2018-09-06 08:33:39 +0800 CST

--set-mark 选项如何在 Netfilter (IPTABLES) 上工作?

  • 772

在 Netfilter 上,您可以选择--set-mark通过mangle表的数据包。

互联网上的大多数教程和示例都说这只是在数据包上添加了一个标记,就像这样,但是没有关于设置什么标记以及它在数据包上的位置的其他详细信息:

iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 1

我的问题是:

  • 设置了什么样的标记以及该标记在数据包中的确切位置?
iptables netfilter
  • 1 1 个回答
  • 16585 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2018-09-06T14:46:45+08:002018-09-06T14:46:45+08:00

    该标记是附加到网络数据包的 32 位整数值。一些与之交互的网络部分(见下文)可以对这个值进行按位运算,然后可以在一个 32 位值到最多 32 个标志的集合之间进行解释,或者是标志和较小值的混合,具体取决于一个选择组织它的使用(tc不能这样做)。当然,这个标记只有在被 Linux 内核处理的情况下才存在。它只是纯粹的虚拟和内部的,因为它不能在线上存在。根据使用的地方,它可能被称为防火墙标记、fwmark 或简单的标记。

    内核处理的每个网络数据包都由一个名为 的结构处理sk_buff,定义在linux/include/linux/skbuff.h. 此结构包括与数据包相关的各种元数据(如果有),如 IPsec 信息(如果有)、相关的 conntrack 条目(一旦查找)……以及它的标记。

    网络堆栈的各个部分都可以读取此标记,根据其值更改行为或(重新)写入它,例如:

    • tc,
    • 路由堆栈可以使用ip rule(例如ip rule add fwmark 1 lookup 42)设置特殊规则,以使用此 fwmark 更改其路由决策(例如,使用路由表将这些数据包发送到默认接口之外的其他接口),
    • 当然iptables,
    • 它的候选继任者nftables,

    和其他几个地方...

    该标记的主要目标是让所有这些网络部分通过将其用作一种消息来相互交互。Netfilter 和 General Networking中的数据包流可以帮助查看这些元素以什么顺序接收数据包的处理以及它的标记。

    fwmark 旁边还有其他相关标记:

    • connmark,它不与数据包的 sk_buff 一起存储,而是存储在跟踪数据包流的 conntrack 条目中。它的 connmark 当然可以被 iptables 与它的connmark匹配和CONNMARK目标一起使用,这里有一个使用示例:Netfilter Connmark To Linux and beyond !. 它允许记住基于单个数据包做出的决定,然后将其应用于同一连接的所有数据包。
    • secmark同样,其相关联connsecmark的旨在与 Linux 安全模块(例如SELinux )进行交互。
    • 14

相关问题

  • 关于 MASQUERADE 和 SNAT/DNAT 的一点疑问

  • iptables 不过滤桥接流量

  • 持久的 iptables

  • Iptables 规则允许 appVM 通过配置为仅通过 QubesOS 中的 VPN 的 proxyVM

  • 如何在 Linux 中让所有流量通过一个接口

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve