어려운 Linux 라우팅 문제

어려운 Linux 라우팅 문제

직장에서는 패킷을 라우팅하여 다른 쪽에서 팝업한 다음 다시 원본으로 돌아가는 엔드 투 엔드 시스템을 갖추고 있습니다. 일반적인 통신 스택이라고 생각하시면 됩니다.

처리량을 테스트하기 위해 우리는 두 대의 외부 시스템을 사용하여 트래픽을 스택으로 보내는 iperf3를 사용하고 있음을 발견했습니다. 이 라우팅 문제를 해결할 수 없어 총 세 대의 컴퓨터를 사용하고 있었지만, 이 문제가 이전에 발생했다고 확신하므로 우리가 볼 수 없는 해결책이 있을 것 같습니다. 가능하다면 한 대의 기계만 사용하고 싶습니다.

우리 환경이 다음과 같다고 가정합니다.여기에 이미지 설명을 입력하세요.

A가 iperf3 클라이언트인 경우 B는 패킷을 이더넷 패킷(단순화를 위해 블랙박스로 유지됨)으로 서로 전달하는 여러 프로그램으로 구성되며 C는 iperf3 서버입니다.

요약하자면, 패킷이 A에서 B, C로 이동한 다음 다시 B로, 다시 A로 돌아가기를 원합니다.

여기에 이미지 설명을 입력하세요.

Iperf를 사용하여 이 작업을 수행하려면 A의 클라이언트가 C로 패킷을 보내야 합니다.

iperf3 -c "C"

또한 다음을 사용하여 C에 서버를 설정했습니다.

iperf3 -s

그러나 현재 라우팅 규칙이 없으면 이러한 패킷은 B를 우회하고 A와 C 사이를 직접 이동합니다. 이런 일이 발생하지 않도록 하기 위해 "C로 향하는 모든 트래픽을 B로 라우팅"과 같은 라우팅 규칙을 만들었습니다.

route add "C" netmask 255.255.255.255 gw "B"

또한 서버가 A를 직접 다시 보내지 않도록 반대쪽에서도 동일한 작업을 수행해야 합니다.

route add "A" netmask 255.255.255.255 gw "B"

아직 잡히지 않았다면 A와 C로 가는 모든 트래픽이 B로 가는 역설이 발생한다. 즉, B가 처리를 마치고 C로 데이터를 보내려고 하면 라우팅 테이블이 지시하는 대로 B가 자신에게 데이터를 보냅니다*. 이는 반대 방향으로도 발생합니다.

이 문제에 대한 해결책을 아는 사람이 있나요? 간단한 라우팅으로 할 수 있을지는 모르겠지만, 처음부터 라우팅에 대해 잘 몰라서 뭔가 비결이 있는 게 아닐까요?

*실제로 계속 자신에게 보낼지 잘 모르겠습니다(그렇지 않을 것 같고, 보낸다고 해도 두 번째에는 어떻게 해야 할지 모르겠습니다). 하지만 그게 제가 원하는 것입니다. 이 구성에는 적용되지 않습니다.

답변1

이는 iptables를 사용하여 달성할 수 있는 것과 거의 같습니다. "B"에는 다음과 같은 내용을 넣을 수 있습니다.

iptables -t nat -A PREROUTING -s "A" -p tcp --dport 5201 -j DNAT --to-destination C:5201

iptables -t nat -A PREROUTING -s "C" -p tcp --dport 5201 -j DNAT --to-destination A:5201

답변2

(투명한) 프록시가 필요한 것 같습니다. 확인해 보세요.

하지만 정말로 사용하고 싶다면라우팅이 두 클라이언트만 영향을 받으므로 먼저 B에서 일종의 라우팅 기능을 구성해야 합니다.(또는 적어도 일종의 IP 전달). 그런 다음 호스트에 이와 같은 경로를 추가해야 합니다.

A에

route add C netmask 255.255.255.255 gw B

C에서

route add A netmask 255.255.255.255 gw B

예를 들어 C에 대한 다음 홉은 기본 게이트웨이가 아니라 B ​​상자라고 A에 알립니다. 4개의 옥텟 모두에서 255가 필요하며 이 IP만을 나타냅니다. 따라서 이는 대상 C의 모든 트래픽이 B로 이동한다는 의미는 아니며 모든 트래픽이 B를 게이트웨이로 사용하여 기본 게이트웨이 대신 C로 이동한다는 의미입니다. 따라서 B 박스에 아무것도 구성하지 않은 이상 역설은 없습니다. 물론 Box B는 패키지를 떨어뜨리고 아마도 "도대체 왜 나한테 이걸 보냈어?"라는 표정으로 당신을 바라볼 것입니다.

또 다른 옵션은 관리되는 스위치가 있는 경우 호스트 중 하나의 포트를 미러링하여 해당 LAN 포트에서 보내거나 받는 모든 패킷이 해당 미러링된 포트의 B-박스로 이동하도록 하는 것입니다.

이 두 클라이언트와 세 번째 클라이언트 간의 통신을 중단하는 다른 옵션이 많이 있습니다. 그러나 제공하신 설명에 따르면 실제로는 요구 사항이 없습니다. 그러니 무엇이든 시도해 보세요.

관련 정보