동일한 업스트림 게이트웨이를 사용하는 다양한 인터페이스를 통해 게이트웨이 프록시 트래픽 라우팅

동일한 업스트림 게이트웨이를 사용하는 다양한 인터페이스를 통해 게이트웨이 프록시 트래픽 라우팅

내 질문은 아래 질문과 비슷하지만 다음 스레드에서는 대답하지 못하는 작은 주의 사항이 있습니다.

대상 포트에 따라 다양한 인터페이스로 트래픽 출력

https://serverfault.com/questions/648460/load-balancing-network-traffic-using-iptables

iptables --set-mark - 다른 인터페이스를 통해 다른 포트를 라우팅합니다.

특정 인터페이스에서는 특정 아웃바운드 트래픽만 허용

세 개의 네트워크 장치가 있습니다: eth0(라우터), eth1(인터넷 gw1에 연결됨) 및 eth2(인터넷 gw2에 연결됨)

eth0 -> eth1(dhcp를 통한 IP) -> gw1(192.168.0.1 넷마스크 255.255.255.0) -> 인터넷

eth0 -> eth2(dhcp를 통한 IP) -> gw2(192.168.0.1 넷마스크 255.255.255.0) -> 인터넷

나는 라우터에서 Polipo를 실행하고 있으며 polipo에 연결된 모든 사람의 트래픽이 eth2를 통과하기를 원합니다. 다른 모든 트래픽은 eth1을 통해 라우팅됩니다.

문제는 eth1과 eth2 모두 DHCP를 통해 IP 주소를 얻는다는 것입니다. gw1은 gw2와 동일합니다. 이는 인프라의 일부이며 둘 다 동일한 IP 주소를 갖습니다(예: gw1과 gw2는 모두 192.168.0.1이고 넷마스크는 255.255.255.0입니다).

위 스레드의 모든 답변은 게이트웨이 트래픽을 격리/표시하기 위해 다양한 서브넷과 IP 주소를 참조합니다. 내가 아는 한 그것은 선택 사항이 아닙니다. gw1/gw2에서 아무것도 변경하지 않고 eth1 및 eth2에 고정 IP 주소를 포함하지 않고 이 작업을 수행해야 합니다. 가능합니까?

답변1

죄송합니다. 실제 예제를 제공할 수는 없지만 필요한 것은 netfilter를 사용하여 가능해야 합니다.연락처 트랙표적. 일반 MARK와의 차이점은 CONNTRACK은 연결의 모든 트래픽을 표시하는 반면 MARK는 패킷만 표시한다는 것입니다. 따라서 아이디어는 다음과 같습니다.

  • 각 인터페이스를 통해 들어오는 연결에 서로 다른 번호(예: gw1의 경우 "1", gw2의 경우 "2")로 레이블을 지정합니다.
  • "ip Rule add fwmark 1 Lookup 101" 및 "ip Rule add fwmark 2 Lookup 102"를 사용하면 표시된 1과 표시된 2가 서로 다른 라우팅 테이블을 통과하도록 할 수 있습니다.
  • 각 테이블에 대해 서로 다른 기본 경로를 만듭니다. gw1의 경우 "192.168.0.1 dev eth1 테이블 101을 통한 ip 경로 추가 기본값", gw2의 경우 "192.168.0.1 dev eth2 테이블 102를 통한 ip 경로 추가 기본값"

eth1을 통한 연결은 fwmark 1로 표시되며 이는 모든 패킷(수신 및 발신)에 의해 유지됩니다. fwmark 2를 사용하여 eth2를 통한 연결에서도 마찬가지입니다. 따라서 방화벽은 항상 응답에 사용할 인터페이스를 알고 있습니다. 방화벽이나 그 뒤에 있는 호스트에서 시작된 연결은 기본 인터페이스/게이트웨이로 선택한 인터페이스/게이트웨이를 통과합니다.

어쩌면 미리 패키지된 방화벽 소프트웨어를 사용하면 이 작업을 더 쉽게 수행할 수 있습니다.부두 벽. 다중 ISP를 지원하지만 CONNTRACK을 사용하는지 아니면 MARK만 사용하는지 모르겠습니다.

관련 정보