서버 대체. 인터넷 서버 에뮬레이션

서버 대체. 인터넷 서버 에뮬레이션

192.168.31.0/24자체 NAT -> 192.168.33.0/24-> 인터넷 아래에 숨겨진 두 개의 네트워크 순차 네트워크가 있습니다.

TCP 서버가 켜져 192.168.33.35있고 클라이언트가 켜져 있습니다.192.168.31.32

예를 들어 클라이언트는 인터넷에 있는 서버에 TCP 요청을 수행합니다 66.66.66.66. 대신 마지막 게이트웨이가 192.168.33.1요청을 보내고 192.168.33.35클라이언트를 속이기를 원합니다 .

내가 시도한 것 중 가장 실현 가능한 것은 다음과 같습니다.

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

서버는 Syn 패킷을 수신하고 응답했습니다. 그런데 서버 응답의 소스 IP는 192.168.33.35게이트웨이를 통과한 후에도 그대로 남아 있는 것 같습니다. 그리고 게이트웨이에서 수신한 패킷이 손실됩니다 192.168.31.1.

SNAT 부분이 작동하지 않는 것 같습니다.

표준 openWrt 도구를 사용하여 서버를 에뮬레이션/스푸핑하려면 어떻게 해야 합니까?

답변1

일어나는 일은 다음과 같습니다.

  1. 귀하의 192.168.33.35서버는 Syn 패킷을 보고 192.168.33.Z(네트워크를 인식하지 못하고 192.168.31.0/24게이트웨이의 "WAN" 주소를 보지만 192.168.31.1무엇인지 모르겠습니다 Z) 이 주소에 응답합니다.
  2. 라우팅 테이블에는 이 주소가 로컬 네트워크에 속한다고 나와 있으므로 응답은 MAC 주소 192.168.33.Z.
  3. 응답이 머신을 통해 물리적으로 이동하더라도 192.168.33.1게이트웨이는 다른 머신의 MAC 주소로 향하기 때문에 응답이 복잡해지지 않습니다.
  4. 192.168.33.Z의 응답을 봅니다 192.168.33.35. 그것은 하나를 기대 66.66.66.66하고 무엇을 해야할지 모릅니다.

NAT를 수행하는 것은 중요하지 않습니다 192.168.33.Z( 192.168.31.1LAN 측에 있음). 실패의 메커니즘은 실패의 메커니즘과 매우 유사합니다.NAT 루프백(헤어핀 NAT)이 부분적으로만 설정되었습니다..

192.168.33.35서버가 게이트웨이의 MAC 주소로 응답을 보내 도록 해야 합니다 192.168.33.1.

  • 192.168.33.Z(나는 모른다는 사실을 기억하세요 Z. 실제 번호로 대체하십시오.) 또는 전체 192.168.33.0/24네트워크 에 대한 라우팅 규칙을 설정하십시오 .

    # do this on the 192.168.33.35 machine
    route add -host 192.168.33.Z gw 192.168.33.1
    

    이는 에서 까지의 모든 통신에 영향을 192.168.33.35미칩니다 192.168.33.Z. 패킷이 불필요하게 라우팅되는 192.168.33.35역할을 해야 하는 경우 ; 192.168.33.35그래도 문제가 발생하면 안 됩니다.

  • 아니면 192.168.33.1게이트웨이가 DNAT뿐만 아니라 SNAT도 수행하도록 하세요. 이 솔루션은 기본적으로 이미 연결된 답변의 NAT 루프백 솔루션과 동일합니다.

    # do this on the 192.168.33.1 gateway
    # you already have this line
    iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
    # this line is new
    iptables -t nat -I POSTROUTING -d 192.168.33.35 -j SNAT --to-source 192.168.33.1
    

이 조각은 귀하의 상황에 적용됩니다.

NAT 테이블은 iptables연결의 첫 번째 패킷에만 사용됩니다. 연결과 관련된 이후 패킷은 첫 번째 패킷이 변환될 때 설정된 내부 매핑 테이블을 사용하여 처리됩니다.

iptables … -j SNAT --to-source 66.66.66.66이는 클라이언트에서 연결을 시작할 때 두 번째 줄( )이 관련이 없음을 의미합니다 . 이후의 패킷은 첫 번째 패킷이 그랬기 때문에 적절하게 SNAT 및 DNAT로 처리됩니다.


내 생각에 당신의 첫 번째 줄은

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35

게이트웨이 에서 작동하면 추가 트릭 없이 192.168.31.1다른 클라이언트에 대해 원하는 작업을 수행할 수 있습니다 .192.168.31.0/24


너의 이 두 번째 줄

iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

연결을 시작하면 적용됩니다.~에서 192.168.33.35. 인터넷 서버에서는 이 작업을 거의 수행하지 않으므로 이 규칙이 전혀 필요하지 않을 수도 있습니다. 꼭 필요한 경우 다음 사항을 기억하세요.

  • 이 규칙은 패킷이 이 규칙이 작동하는 게이트웨이를 통해 라우팅되는 경우에만 작동하므로 192.168.33.1로컬 컴퓨터에 도달하고 로컬 컴퓨터에 제시하려면 위와 유사하게 시스템 66.66.66.66의 라우팅 테이블을 조정해야 합니다 .192.168.33.35
  • 네트워크 외부의 외부 호스트와 마찬가지로 통신할 수 없습니다. 66.66.66.66로 작동하는 호스트에 도달하더라도 해당 호스트의 응답은 사용자에게 돌아 66.66.66.66오는 것이 아니라 실제 호스트에 도달하기 때문입니다.66.66.66.66

답변2

라우팅으로 해결했습니다. 불행하게도 실제 서버에 액세스하기에는 유연성이 떨어지지만 적어도 작동합니다. 이 같은:

[email protected]# route add -host 66.66.66.66 gw 192.168.33.35 dev br-lan

그리고 서버에서:

[email protected]# ip link add name s666 type dummy
[email protected]# ifconfig s666 66.66.66.66
[email protected]# ifconfig s666 up

관련 정보