저는 iptables와 브리지로 몇 가지 실험을 해왔습니다. 이 시나리오는 단지 실험실에 있지만 몇 가지 흥미로운 기능을 발견했고 무슨 일이 일어나고 있는지에 대한 설명을 원합니다(iptables와 비교하면 말이 안 되기 때문에). ).
Debian 11 서버 가상 머신에는 3개의 인터페이스가 있습니다. ens3은 "인터넷"(연구실 외부)에 연결되고, ens4는 연구실 라우터에 연결되며, ens5는 주소가 지정되어 연구실 내부 서브넷에 연결됩니다. ens3 및 ens4에는 IP 주소가 없습니다.
인터페이스 ens3 및 ens4를 사용하여 브릿지 br0을 만들었습니다. 이는 정상적으로 작동하며 "인터넷" 또는 랩 라우터의 트래픽이 ens3과 ens4 사이에서 올바르게 이동합니다.
br_netfilter 커널 모듈을 활성화했으며 net.bridge.bridge-nf-call-iptables = 1
브리지 트래픽을 iptables에 표시하려고 합니다.
내가 설정한 목표는 특정 포트(22, SSH)와 일치하는 "인터넷"에서 오는 패킷을 잡고 대상 IP 주소를 ens5의 IP 주소로 변경하는 것입니다.
카운터 증가를 보기 위해 빈 규칙을 추가하면 iptables -t raw -A PREROUTING
pkt 카운터가 증가하기 시작합니다. 따라서 트래픽이 raw PREROUTING
체인에 표시됩니다.
다른 빈 규칙을 추가하면 iptables -t mangle -A PREROUTING
pkt 카운터가 다시 증가하기 시작합니다. 지금까지 트래픽은 흐름도를 따르고 있습니다.
이것이 흥미로워지는 곳입니다. 갑자기 다른 빈 규칙을 추가 하면 iptables -t nat -A PREROUTING
pkt 카운터가 증가하지 않습니다. 하지만 흐름도는 트래픽이 어디로 갈지 보여 mangle PREROUTING
줍니다 nat PREROUTING
. 하지만 그런 일은 분명히 일어나지 않았습니다. Linux 브리지가 iptables 체인과 상호 작용하는 방법에 대한 순서도가 있습니까? 교통량이 어떻게/어디로 사라지는지/가는지 혼란스럽습니다.
DNAT 규칙에 대한 규칙을 작성했지만 해당 DNAT 규칙만 넣을 수 nat PREROUTING
있으며 nat PREROUTING
트래픽이 전혀 표시되지 않으면 대상 IP를 다시 쓸 수 없습니다. 원시 또는 맹글로 DNAT를 수행할 수 있는 방법이 없다면, 나는 그런 방법을 모릅니다.