트래픽을 다시 localhost로 전달

트래픽을 다시 localhost로 전달

여러 인터넷 연결이 있는 일종의 라우터를 구현 중이며 해당 연결의 현재 처리량을 기반으로 더 빠른 연결을 사용하여 패킷/프레임을 전달합니다.

구현을 테스트하려면 라우팅할 실제 패킷이 있어야 합니다. 일부 트래픽을 생성하기 위해 IP 패킷 조각화를 구현했습니다. 나는 일부 트래픽을 생성하기 위해 TCP 안정적인 연결을 구현하는 것을 거의 발견했습니다. 나는 트래픽을 생성하는 방법을 찾으려고 노력 중이었고 로컬 컴퓨터의 IP A에서 원격 호스트의 IP B로 소켓 연결을 열 것이라고 생각했습니다. 패킷 생성에 대해 걱정할 필요가 없도록 해당 연결에 대한 일부 데이터를 보내겠습니다.

문제는 이 패킷을 라우터에서 라우팅하기 위해 가로채야 한다는 것입니다. 나는 원래 모든 패킷을 IP B로 다시 로컬 호스트로 전달하는 몇 가지 규칙을 만들고 로컬 호스트에서 원시 소켓을 열고 IP B로 향하는 모든 패킷을 필터링할 것이라고 생각했습니다. 나는 iptables 규칙을 만들어 보았습니다. sudo iptables -t nat -A OUTPUT -d some_ip -j DNAT --to-destination 127.0.0.1그러나 내가 발견한 것은 그것이 패킷의 대상 IP 주소를 변경한다는 것입니다. 나는 단지 그것을 라우팅하기 위해 원래 패킷을 가로채기를 원합니다.

캡처할 수 있는 일부 트래픽을 생성하는 방법이나 지정된 IP로 가는 패킷을 다시 호스트로 전달하되 원래 대상 IP 주소는 유지하도록 iptables를 구성하는 방법을 알고 있습니까?

설명: 제가 개발 중인 프로그램은 분산 시스템입니다. 여러 개의 Raspberry Pi로 생각하세요. 그 중 하나는 실제 프로세스 라우팅 패킷이고 나머지는 전용 인터넷 연결이 있는 릴레이이며, 라우터 프로세스는 전달하기 위한 최상의 릴레이를 선택합니다. 패킷. 전체 시스템의 프로세스는 MPI 커뮤니케이터를 통해 통신하며, 전체 프로세스는 MPI를 이용해 구현된다. 따라서 어떤 의미에서는 소프트웨어 라우터입니다.

답변1

여러 인터넷 연결이 있는 일종의 라우터를 구현 중이며 해당 연결의 현재 처리량을 기반으로 더 빠른 연결을 사용하여 패킷/프레임을 전달합니다.

이는 멀티홈이 아니기 때문에 TCP 또는 UDP와 같은 표준 프로토콜에는 적용되지 않습니다. 각 인터넷 "연결"은 서로 다른 IP를 가지며 단일 TCP 또는 UDP 연결 중에는 해당 IP가 변경될 수 없습니다.

가장 좋은 것은 배포하는 것입니다.새로운TCP 또는 UDP연결하다현재 사용량에 따라 다양한 인터넷 제공업체에 제공됩니다. 실제로 iptables필요에 따라 NAT 규칙을 변경하여 이를 수행할 수 있습니다(Linux 커널의 연결 추적기는 기존 연결이 경로를 변경하지 않도록 보장합니다).

지정된 IP로 향하는 패킷을 호스트로 다시 전달하지만 원래 대상 IP 주소는 유지하도록 iptables를 구성하는 방법을 알고 있습니까?

당신은 할 수 없습니다.

통신의 양쪽 끝을 제어하는 ​​특정 애플리케이션에 대한 것이라면 멀티호밍 프로토콜(예:SCTP또는다중 경로TCP) 반대로.

관련 정보