nftables 테이블 및 체인 우선순위

nftables 테이블 및 체인 우선순위

nftables 설정에 문제가 있습니다.

두 개의 테이블이 있는데 각 테이블에는 동일한 후크가 있지만 이름과 우선순위가 다른 체인이 있습니다.

테이블은 include 매개변수에 의해 로드되는 별도의 파일에 있습니다.

우선순위로 인해 VPN-POSTROUTING 체인이 인터넷 체인보다 먼저 실행될 것이라고 생각합니다. 하지만 내 설정에서는 INTERNET 체인이 먼저 실행됩니다.

table ip nat {
        chain INTERNET {
                type nat hook postrouting priority srcnat + 1; policy accept;
                oifname br2 masquerade
        }
}
table ip vpn {
        chain VPN-POSTROUTING {
                type nat hook postrouting priority srcnat - 1; policy accept;
                oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 accept
        }
}

내 실수는 어디에 있습니까?

편집: 규칙을 변경하고 모든 체인을 동일한 테이블에 추가했는데 결과는 동일했습니다.

다음으로 AB의 제안에 따라 규칙에 카운터와 로그를 추가했습니다.

체인의 순서는 우선순위에 해당하지만 VPN의 허용 규칙을 트리거하지는 않습니다.

가장 무도회 규칙 직전에 인터넷 체인에 VPN 수락 규칙을 추가하면 예상대로 작동합니다.

답변1

역사적으로 특정 후크(사전 라우팅, 입력, 출력...)에는 NAT 체인이 있었습니다. nat 문을 실행하거나 단순히 패킷을 체인의 끝으로 수락하면 단일 체인에 대한 후크 내 처리도 종료됩니다. 그리고nftables동일한 후크에 여러 체인이 허용되며, 한 체인을 종료하면 다음 체인이 계속됩니다. 따라서 첫 번째 체인이 아무 작업도 수행하지 않으면(수락을 통해) 다음 체인에서는 이를 수행할 기회가 생기며 이는 의도된 목적이 아닙니다.

이 문제를 해결하기 위해 첫 번째 체인(또는 다른 체인)은 각 다음 체인에 메시지를 남겨서 조치를 취할 수 있습니다. 다음 체인에 대한 플래그(모든 값)를 설정하여 동작을 변경할 수 있습니다.

대신 플래그를 설정하면 accept효과가 없습니다(체인을 비워 두면 VPN-POSTROUTING기본 정책도 적용됩니다) accept. 따라서 규칙을 VPN-POSTROUTING다음으로 바꿉니다.

nft add rule ip vpn VPN-POSTROUTING oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 mark set 0xdeaf

이 플래그가 설정되면 나머지 규칙을 적용하지 않고 동작을 변경하기 위해 다른 체인에서 사용할 수 있습니다. 다음 규칙을 삽입하여 시작하세요 ip nat INTERNET.

nft insert rule ip nat INTERNET mark 0xdeaf accept

관련 정보