
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
일어나는 일은 다음과 같습니다.
- 귀하의
192.168.33.35
서버는 Syn 패킷을 보고192.168.33.Z
(네트워크를 인식하지 못하고192.168.31.0/24
게이트웨이의 "WAN" 주소를 보지만192.168.31.1
무엇인지 모르겠습니다Z
) 이 주소에 응답합니다. - 라우팅 테이블에는 이 주소가 로컬 네트워크에 속한다고 나와 있으므로 응답은 MAC 주소
192.168.33.Z
. - 응답이 머신을 통해 물리적으로 이동하더라도
192.168.33.1
게이트웨이는 다른 머신의 MAC 주소로 향하기 때문에 응답이 복잡해지지 않습니다. 192.168.33.Z
의 응답을 봅니다192.168.33.35
. 그것은 하나를 기대66.66.66.66
하고 무엇을 해야할지 모릅니다.
NAT를 수행하는 것은 중요하지 않습니다 192.168.33.Z
( 192.168.31.1
LAN 측에 있음). 실패의 메커니즘은 실패의 메커니즘과 매우 유사합니다.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