맞춤형 로직을 갖춘 브리지/라우터

맞춤형 로직을 갖춘 브리지/라우터

3개의 네트워크 어댑터가 있는 Linux 상자가 있고 다음과 같이 구성하고 싶습니다.

  1. 어댑터 A는 컴퓨터 A에 연결됩니다.
  2. 어댑터 B는 컴퓨터 B에 연결됩니다.
  3. 어댑터 C가 인터넷에 연결됩니다. 특히 someserver.com에

내가 달성하고 싶은 것:

  1. A의 모든 트래픽은 인터넷으로 이동합니다.
  2. 어댑터 B에 특수 "비밀 포트"를 정의합니다.
  3. "비밀 포트"의 "someserver.com"으로 가는 컴퓨터 B의 TCP 트래픽은 컴퓨터 A에서 오는 것처럼 보이도록 소스 IP를 위장합니다.
  4. "someserver.com"에서 다시 컴퓨터 A로 돌아가고 #3에서 사용된 동일한 포트에 도착하는 TCP 트래픽은 컴퓨터 B로 리디렉션됩니다.

라우터나 브리지를 구현해야 합니까? NetFitler/ip 테이블을 구성하여 이 작업을 수행할 수 있습니까? 아니면 일부 코드를 구현해야 합니까? 코드라면 어떤 레이어에서 IP 스택과 통합해야 합니까?

답변1

일반 액세스를 위해서는 MASQUARADE/SNAT를 사용해야 합니다(C의 IP 주소가 동적인지 정적인지에 따라 다름).

현재 상황이 당신의 것이라고 가정컴퓨터 A고정 IP 주소 a.a.a.a컴퓨터 B고정 IP 주소를 가지고 있습니다 b.b.b.b. 둘 다 기본 게이트웨이가 있습니다컴퓨터 C. 그리고Someserver.com고정 IP 주소 r.r.r.r와 비밀 포트를 갖는 것은 입니다 pppp.

당신은 구성할 것이다컴퓨터 C라우터로서 인터넷에 대한 기본 경로가 있습니다.인터페이스 C(정적 구성, PPPoE를 통한 동적 설정 등을 통해 이미 이 작업을 수행합니다.) 이 작업은 자체적으로 수행될 수 있습니다.1.

이제 두 가지 가능성이 있습니다.

  1. 만들다컴퓨터 A라우터도 마찬가지다. 그럼 너도 변해컴퓨터 B기본 경로가 다음을 통해 구성되도록 구성되었습니다.컴퓨터 A(아니다컴퓨터 C이전과 마찬가지로) 및 구성컴퓨터 A이와 같이:

    iptables -t nat -s b.b.b.b -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
    

    이렇게 하면 소스 IP에서 b.b.b.b대상 IP 및 대상 포트까지 의 모든 r.r.r.rTCP 패킷이 pppp해당 패킷이 시작된 것으로 간주되어 다음에서 오는 트래픽이 a.a.a.a완료됩니다 .3서버 웹사이트소스 주소( a.a.a.a)로 돌아가서 다음으로 디코딩됩니다.컴퓨터 A그리고 다시 보내컴퓨터 B. (따라서 완료 4)

    이는 더 쉽지만 컴퓨터 B가 이러한 유형의 NAT 정책을 지원하는 운영 체제를 실행해야 합니다.

  2. 변화컴퓨터 A10.0.1.100/24다음과 같은 개인 IP를 가지고 있습니다 .컴퓨터 B개인 IP를 가지고 있습니다 10.0.2.100/24. 그럼 안으로컴퓨터 C하다:

    ip addr add a.a.a.a/nn dev ifaceC
    ip addr add b.b.b.b/nn dev ifaceC
    iptables -t nat -s 10.0.1.100 -j SNAT --to a.a.a.a
    iptables -t nat -s 10.0.2.100 -d r.r.r.r -p tcp --dport pppp -j SNAT --to a.a.a.a
    iptables -t nat -s 10.0.2.100 -j SNAT --to b.b.b.b
    

    nn네 넷마스크는 어디 있어, ifaceC네 이름은 어디 있어?인터페이스 C. 그럴 것이다컴퓨터 A그리고컴퓨터 B비공개 범위 내에서 허용컴퓨터 C네트워크 주소 변환컴퓨터 A(그래서 이전처럼 동작 함 a.a.a.a) 및 NAT컴퓨터 Ba.a.a.a(dst= r.r.r.r, dport= 조건이 충족되는 경우) 또는 (else) 중 하나입니다 .ppppb.b.b.b

특별한 지원이 필요하지 않습니다.컴퓨터 A...도 아니다컴퓨터 B, 하지만 뒤에 남겨두었습니다네트워크 주소 변환이는 다른 사항에 영향을 미칠 수 있습니다.

물론 이 나이에는 위의 내용이 좋은 노년층에게만 적용된다는 점을 언급해야 한다'IPv4주소(마지막 주소는빨리 다 써버렸어)보다는IPv6

답변2

귀하의 의견을 토대로:

@Marki - 컴퓨터 A와 B가 인터넷에 있습니다. someserver.com에 액세스할 때 항상 내 Linux 시스템(예: 특정 경로)에서 액세스합니다. A와 B는 협력한다. 때때로 우리는 요청이 다른 컴퓨터에서 왔다는 것을 일부 서버가 알지 못한 채 컴퓨터 B가 someserver.com에 액세스하기를 원합니다.

여기서 뭔가 빠졌나요? 컴퓨터 C가 라우터로 설정된 경우 A와 B의 요청은 중요하지 않습니다. NAT 규칙에 따라 A와 B의 개인/공용 IP 주소는 모두 컴퓨터 C의 공용 IP 주소와 교환됩니다. 따라서 C가 네트워크 체인의 마지막 게이트웨이인 경우서버C의 모든 요청이 표시되고 C는 이를 A와 B로 다시 라우팅합니다.

이를 위해 컴퓨터 C에는 두 개의 네트워크 카드가 필요합니다. 하나는 개인 LAN에 연결되고 다른 하나는 공용 WAN에 연결됩니다.

Matija의 숫자는 다음과 같습니다. 2
컴퓨터 B가 컴퓨터 A를 모방하도록 하려면 B는 C에 도달하기 전에 A를 통과하는 트래픽을 필터링해야 합니다. 컴퓨터 C는 컴퓨터 A의 트래픽만 볼 수 있기 때문에 이것이 "사용 사례"에 어떻게 도움이 되는지 모르겠습니다.하지만 상관없어:

서버A 또는 B의 개인 주소는 표시되지 않습니다. 여기서 귀하의 상황은 약간 과장되었습니다. 왜냐하면 모든 포트가 컴퓨터 B의 개인 IP 주소로 전달되도록 컴퓨터 C에서 포트 전달을 활성화하기만 하면 되기 때문입니다.

답변3

B/SecretPort를 수신하고 SomeServer로 전달하는 프록시를 A에 설치하면 이 문제를 해결할 수 있습니다. SecretPort를 사용하여 A에서 선택한 답변은 B로 전달됩니다.

관련 정보