서버에는 "prerouting"과 "postrouting"이라는 두 개의 체인만 포함하는 "nat"라는 테이블이 하나만 있습니다. IP 전달이 활성화되었습니다. 소스 NAT 규칙에 대해 보다 구체적인 조건을 설정하려고 합니다. 클래식 규칙을 설정하면 다음과 같습니다.
nft add rule nat postrouting ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4
모든 것이 정상입니다. 하지만 "saddr 192.168.1.0/24" 네트워크가 위치한 인터페이스도 지정하고 싶습니다.
nft add rule nat postrouting **iif eth1** ip saddr 192.168.1.0/24 oif eth0 snat 1.2.3.4
이 명령을 입력하면 프로그램이 이를 수락하고 규칙이 표에 나타납니다. 하지만 교통량이 없습니다. 이유를 아는 사람 있나요?
답변1
이 기능반품적절한 넷필터 지원을 위해서는 커널 >= 5.5가 필요합니다. 에 설명된kernelnewbies.org:
리눅스 5.5출시된2020년 1월 26일
[...]
웹 필터
- POSTROUTING에서 iif 매칭 지원범죄
제출 내용:
netfilter: POSTROUTING에서 iif 일치 지원
일반적으로 NF_HOOK_COND()에 입력 장치로 NULL을 전달하지 않고 대신 skb 경로의 입력 장치가 포함된 skb->dev를 전달합니다.
iptables(legacy 및 nft)는 입력 인터페이스와 일치하는 규칙을 POSTROUTING 체인에 추가하는 것을 거부하지만 nftables는 이를 허용합니다.
설명에 따르면 이 커밋 전에 netfilter는 입력 인터페이스를 제공하지 않았으며 표현식이 iif
일치하지 않았습니다.