3개의 네트워크 어댑터가 있는 Linux 상자가 있고 다음과 같이 구성하고 싶습니다.
- 어댑터 A는 컴퓨터 A에 연결됩니다.
- 어댑터 B는 컴퓨터 B에 연결됩니다.
- 어댑터 C가 인터넷에 연결됩니다. 특히 someserver.com에
내가 달성하고 싶은 것:
- A의 모든 트래픽은 인터넷으로 이동합니다.
- 어댑터 B에 특수 "비밀 포트"를 정의합니다.
- "비밀 포트"의 "someserver.com"으로 가는 컴퓨터 B의 TCP 트래픽은 컴퓨터 A에서 오는 것처럼 보이도록 소스 IP를 위장합니다.
- "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.
이제 두 가지 가능성이 있습니다.
만들다컴퓨터 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.r
TCP 패킷이pppp
해당 패킷이 시작된 것으로 간주되어 다음에서 오는 트래픽이a.a.a.a
완료됩니다 .3
서버 웹사이트소스 주소(a.a.a.a
)로 돌아가서 다음으로 디코딩됩니다.컴퓨터 A그리고 다시 보내컴퓨터 B. (따라서 완료4
)이는 더 쉽지만 컴퓨터 B가 이러한 유형의 NAT 정책을 지원하는 운영 체제를 실행해야 합니다.
변화컴퓨터 A
10.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) 중 하나입니다 .pppp
b.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로 전달됩니다.