저는 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]}
}