기본적으로 매우 독특한 프로젝트를 통해 브리징과 NAT를 내 의지에 맞게 조정하려고 합니다.
아래 작업을 단순화했습니다(VM=테스트용 Kali 가상 머신).
ZoneX는 네트워크 네임스페이스이고, vexxx는 IP 링크를 사용하여 생성된 가상 링크입니다.
전제는 트래픽(트래픽 상황에 따라)을 ZoneX 또는 ZoneY로 전환하고 트래픽을 수정하여 ZoneZ로 전달한 다음 최종적으로 실제 네트워크 게이트웨이로 전달할 수 있는 LAN용 게이트웨이를 만드는 것입니다.
다양한 방법을 시도했지만 가장 큰 문제는 계층 2 폭풍을 생성하는 것입니다. 이는 가상 머신에서 제대로 작동하지 않거나 NAT 네트워크 네임스페이스(ZoneZ)가 첫 번째 레이어를 통해 다시 전달하는 것입니다. 트래픽 클라이언트 VM의 NAT 테이블 인터페이스(때때로 올바르지 않음)
주요 목적은 교통을 여러 지역으로 분산시키는 것이지만, 돌아오는 교통은 동일한 경로를 다시 사용하도록 하는 것이 핵심입니다! 다음 단계는 여러 영역을 함께 연결하여 여러 방식으로 트래픽을 수정하는 기능입니다.
*** 편집하다
연결의 예로는 가상 머신에서 8.8.8.8에 대한 DNS 조회와 8.8.8.8에 대한 TCP 요청이 있습니다.
먼저, DNS 요청은 brA를 통해 eth0, ve001, ZoneA로 전달되어 패킷이 표시됩니다(iptables 사용). 그런 다음 ve003 > ve004 등으로 ve006으로 전달되어 NAT가 적용되어 인터넷으로 전송됩니다. 응답이 ZoneZ(NAT 영역)로 돌아오면 NAT 테이블의 조회가 완료되고 VM 시스템의 ARP 항목이 해당 인터페이스를 가리키기 때문에 패킷이 ve006으로 라우팅됩니다. 가장 큰 문제는 하단 경로를 통해 전달하려는 다른 트래픽이 있을 때 발생합니다. 이전과 동일하며 ZoneA까지이지만 이번에는 ZoneY를 통해 ve007로 라우팅되고 마지막으로 ZoneZ로 라우팅된 다음 NAT 게이트웨이를 통해 인터넷으로 라우팅됩니다. 그러나 이 연결에 대한 응답을 받으면 패킷은 ZoneZ로 이동하여 NAT 테이블에서 조회를 완료하고 변환된 다음 ARP 테이블 조회를 완료하고 이 시점에서 ve006을 통해 다시 전달하는데 이는 잘못된 것입니다. 원래대로 돌아가기를 원합니다(이 경우 ve010을 통해).
내 질문은 NAT 테이블이 제공하는 인터페이스를 기록하고 해당 인터페이스를 통해 다시 전달할 수 있는지 여부입니다.
답변1
해결 방법은 새 연결에 태그를 지정하고 해당 태그를 정책 라우팅에 사용하는 것입니다.
iptables -t mangle -A FORWARD -i ve006 -m connmark -j CONNMARK --set-mark 6
iptables -t mangle -A FORWARD -i ve010 -m connmark -j CONNMARK --set-mark 10
ip rule
테스트가 있습니다 fwmark
. 따라서 에 대한 ve006
라우팅 테이블을 만듭니다 ve010
.
ip route add default table ve006 via a.b.c.51 dev ve006
# .51 again, typo?
ip route add default table ve010 via a.b.c.51 dev ve010
ip rule add pref 100 iif ve998 fwmark 6 table ve006
ip rule add pref 101 iif ve998 fwmark 10 table ve010