了解 iptables 命令以限制出站连接带宽

Understanding iptables commands to limit outbound connection bandwidth

我在比特币源代码树中找到了以下代码片段,它被定义为 bash 脚本的一部分,用于控制端口 8333 上的出站连接。有人可以向我解释这些命令的确切工作方式。

iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2

源文件:https://github.com/bitcoin/bitcoin/blob/ad57b310bac44a7e470cf66276421f2bbc61b1f0/contrib/qos/tc.sh

我们来分解一下。

  • -t mangle: table 正在更改
  • -A OUTPUT:将此规则附加到 OUTPUT 链
  • -p tcp: 协议是 tcp
  • -m tcp: 加载 TCP 模块(这通过 -p 自动发生,所以这是多余的)
  • --(d|s)port 8333: 目标|源端口是 8333 ! -d ${LOCALNET}: 目的地不在本地网络中
  • -j MARK:跳转到 MARK table(--set-mark 需要)
  • --set-mark 0x2: 在数据包上设置标记,由其他东西处理

这里的高级目标是在数据包上设置 0x2 标记。从GitHub的评论来看,那个标记是用来限制数据包的。