Linux

IPTABLES 中標記匹配的意義是什麼?

  • June 25, 2020

我正在嘗試建立一個 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 0x168mark match 0x4000
  2. 如何將這些規則添加到我的 iptables?我只知道如何從 iptables 添加或刪除標準 tcp/udp 埠​​,卻找不到任何相關的東西?如何添加這些規則?

Linux 主機中的 IP 數據包具有稱為數據包標記的屬性。那隻是一個數字。

這些規則接受已被賦予數據包標記值 0x1068 或 0x4000 的數據包(在或鏈PREROUTING的鏈mangle中)。raw``nat

添加這些規則

我假設您找到了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

但這還不夠。您還需要設置此值的不同表中的規則。否則上面的規則不會做任何事情。

引用自:https://unix.stackexchange.com/questions/594902