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 패킷에는 다음과 같은 패킷이 있습니다.패키지 태그. 그것은 단지 숫자일 뿐입니다.

PREROUTING이러한 규칙은 0x1068 또는 0x4000( 또는 체인에서)의 패킷 태그 값이 할당된 mangle패킷을 허용합니다.rawnat

이 규칙을 추가하세요

나는 당신이 표 CATTLE_FORWARD에서 규칙을 찾았고 표 에서 규칙을 찾았다 filter고 가정합니다 .CATTLE_RAW_PREROUTINGraw

# 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

그러나 이것만으로는 충분하지 않습니다. 값을 설정하려면 다른 테이블의 규칙도 필요합니다. 그렇지 않으면 위의 규칙이 적용되지 않습니다.

관련 정보