iptables MASQUERADE 이후 패킷을 필터링하는 방법은 무엇입니까?

iptables MASQUERADE 이후 패킷을 필터링하는 방법은 무엇입니까?

저는 Debian Buster(커널 버전 4.19)를 기반으로 다중 WAN 라우터를 구축하려고 합니다. 여러 개의 "LAN 측" 네트워크 인터페이스(예:랜 0,LAN1, ...근거리 통신망중간 사이즈) 및 여러 "WAN 측" 인터페이스(예:웡 0,베이 1, ...질소). 나가는 트래픽을 가장하기 위해 각 WAN 측 인터페이스를 다음과 같이 구성했습니다.

iptables -t nat -I POSTROUTING -o wan0 -j MASQUERADE
iptables -t nat -I POSTROUTING -o wan1 -j MASQUERADE
...

이제 내 문제는 내가 발견한 것입니다("tshark" 패킷 캡처 사용).일부나가는 패킷은 위장을 "탈출"하고 WAN 측 인터페이스를 통해 전송됩니다.소스 IP그건다른이 WAN 인터페이스의 IP입니다. 난 붙잡고 놓을 수 있어일부이 패킷에 대한 규칙

iptables -t filter -I FORWARD -m state --state INVALID -j DROP

...하지만 안타깝게도 그렇지 않아요모두그런 패킷. (패킷의 소스 IP가웡 0통과하려고 노력 중베이 1.)

내 질문:패킷을 검사하고 삭제하는 방법이 있습니까?뒤쪽에MASQUERADE 작전을 통과했나요? "nat" 테이블의 POSTROUTING 연결이 "iptables"로 할 수 있는 마지막 작업이라는 것을 알고 있습니다.nftables, 또는전자 BPF?

답변1

나는 이것을 할 수 있는 방법을 찾았습니다.TC.

여기에 ${ifc}포함되지 않은 송신 패킷을 삭제하도록 인터페이스를 구성하는 방법은 다음과 같습니다.${ip}소스 주소대지.

h_ip=$(ip_to_hex ${ip})

tc qdisc add dev ${ifc} root handle 1: htb
tc filter add dev ${ifc} parent 1: prio 1 protocol ip basic match 'not u32( u32 '${h_ip}' 0xFFFFFFFF at 12 )' action drop

어디:

function ip_to_hex {
        IFS='.'; read -ra AD <<< "$1"; unset IFS
        printf '0x%02x%02x%02x%02x' ${AD[0]} ${AD[1]} ${AD[2]} ${AD[3]}
}

관련 정보