IPTABLES中标记匹配的意义是什么?

IPTABLES中标记匹配的意义是什么?

我正在尝试建立一个 Rancher 站点,并努力确保网络正常。我的运行状况检查容器失败,并显示“没有到主机的路由”。我将 IPTABLE 规则与正在运行的 Rancher 站点进行了比较,并发现了在正在运行的 Rancher 站点中设置的这些规则:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
CATTLE_NETWORK_POLICY  all  --  10.42.0.0/16         10.42.0.0/16
CATTLE_FORWARD  all  --  anywhere             anywhere

Chain CATTLE_FORWARD (1 references)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            mark match 0x1068
ACCEPT     all  --  anywhere             anywhere            mark match 0x4000

$ iptables-save | grep mark

-A CATTLE_RAW_PREROUTING ! -i docker0 -p udp -m udp --dport 500 -j MARK --set-xmark 0x1068/0xffffffff`
-A CATTLE_RAW_PREROUTING ! -i docker0 -p udp -m udp --dport 4500 -j MARK --set-xmark 0x1068/0xffffffff
-A CATTLE_FORWARD -m mark --mark 0x1068 -j ACCEPT
-A CATTLE_FORWARD -m mark --mark 0x4000 -j ACCEPT

我的问题:

  1. 这些规则是什么?mark match 0x168和是什么mark match 0x4000
  2. 如何将这些规则添加到我的 iptables 中?我只知道如何从 iptables 添加或删除标准 tcp/udp 端口​​,但找不到任何与此相关的内容?我如何添加这些规则?

答案1

Linux 主机内的 IP 数据包有一个称为包标记。那只是一个数字。

这些规则接受已指定数据包标记值 0x1068 或 0x4000(在 、 或 链中PREROUTING)的mangle数据包。rawnat

添加这些规则

我假设您找到了表CATTLE_FORWARD中的规则filter和表CATTLE_RAW_PREROUTING中的规则raw

# create the chain CATTLE_FORWARD
iptables -N CATTLE_FORWARD
iptables -t raw -N CATTLE_RAW_PREROUTING

# add the rules
iptables -A CATTLE_FORWARD -m mark --mark 0x1068 -j ACCEPT
iptables -A CATTLE_FORWARD -m mark --mark 0x4000 -j ACCEPT

iptables -t raw -A CATTLE_RAW_PREROUTING ! -i docker0 -p udp -m udp --dport 500 -j MARK --set-xmark 0x1068/0xffffffff
iptables -t raw -A CATTLE_RAW_PREROUTING ! -i docker0 -p udp -m udp --dport 4500 -j MARK --set-xmark 0x1068/0xffffffff

但这还不够。您还需要不同表中的规则来设置该值。否则上面的规则不会起任何作用。

相关内容