내 Flowtable 오프로드는 내 라우터에서 완벽하게 작동합니다. 때로는 진행 중인 일부 트래픽이 흐름 테이블을 통해 처리되는 것을 차단하고 싶을 때가 있습니다. 일반 경로 처리에 새 차단 규칙을 추가하면 활성 오프로드 연결에는 영향을 미치지 않습니다. 따라서 몇 가지 새로운 규칙을 추가한 후 흐름 테이블의 해시를 새로 고쳐서 다시 빌드하고 싶습니다. 하지만 어떻게? nft 명령을 사용하여 오프로드 연결을 지우는 방법을 찾지 못했습니다. 플로우 테이블을 파괴하고 다시 생성할 수도 있는데 더 좋은 방법은 없을까요?
답변1
오프로드된 트래픽은 여전히연결하다이 속성이 있는 항목 [OFFLOAD]
(오프로드된 항목은 기본 30초의 비활성 시간 초과를 가지며 오프로드되지 않은 conntrack 항목으로 되돌아갑니다. 이 항목은 다시 오프로드될 기회가 있을 때까지 트래픽을 볼 수 없습니다). 플로우테이블 항목을 삭제하려면 delete conntrack item 을 사용하세요 conntrack -D
.
고쳐 쓰다: 이 기능은 이미 제공되어 있습니다.범죄:
netfilter: ctnetlink: 제거를 위한 conntrack 항목 삭제 지원
현재 오프로드된 conntrack 항목(흐름)은 시간 초과, tcp 상태 변경 또는 tc ct 규칙 삭제를 통해 오프로드에서 제거된 후에만 삭제할 수 있습니다.이로 인해 기존 항목을 수동으로 삭제하거나 새로 고치려는 사용자에게 문제가 발생할 수 있습니다.
커널 6.4 또는 새로운 커널이 필요합니다.LTS 6.1.x(~ >= 6.1.32) 커밋의 참조 예를 통해 백포트되었습니다.
Example usage: # Delete all offloaded (and non offloaded) conntrack entries # whose source address is 1.2.3.4 $ conntrack -D -s 1.2.3.4 # Delete all entries $ conntrack -F
다음 LTS 커널도 커밋됩니다. 충분히 새로운 커널을 사용하고 있는지 확인하세요.4.19,5.4,5.10,5.15.
이전 커널에서는 이 클래스를 제거해 보세요.연결하다항목은 EBUSY를 반환합니다(보시다시피 이 오류는 커밋에서 제거되었습니다).
모든 항목만 삭제 [OFFLOAD]
하는 가장 간단한 방법 은 다음과 같습니다.
conntrack -D --status OFFLOAD
또는하드웨어제거(테스트되지 않음)는 다음과 같습니다.
conntrack -D --status HW_OFFLOAD
그러나 잘못된 시간에 스트림이 마운트 해제되지 않은 상태로 되돌아갈 수 있으므로 완전히 신뢰할 수는 없으므로 제거 필터에 포함되지 않는 것이 가장 좋습니다. 첨부된 속성 사용연결하다conntrack -L ...
프로토콜, 소스 주소, 포트 등과 같은 항목(표시된 대로)에 대한 항목을 제거하는 것이 좋습니다.
그래서 이런 도구를실패 2 금지이렇게 하면 일반적인 ESTABLISHED 상태 규칙 이전에 설정된 블랙리스트에 항목이 추가됩니다. 이 규칙은 5-uple(단일 스트림 제거) 또는 소스 주소(해당 주소에 대한 모든 관련 스트림 제거)와 함께 제공되어야 할 수 있습니다. 예를 들어, 현재 OFFLOAD 상태에서 (원본) 소스 192.0.2.11을 차단하거나 차단하지 않으려면 삭제 규칙에서 사용하는 세트를 업데이트하는 것 외에도 OFFLOAD 상태를 특별히 고려하지 않고 다음을 실행할 수 있습니다.
conntrack -D -s 192.0.2.11