컴퓨터 A와 B라는 두 대의 컴퓨터가 있습니다. 머신 A는 모든 트래픽을 머신 B로 라우팅합니다. 머신 A에서 다음 iptables 규칙을 설정합니다.
iptables -t nat -A PREROUTING -i wlan0 -j DNAT --to-destination 172.16.250.128
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
IP 범위 내의 IP 주소를 포함하는 인터페이스는 어디에 있습니까 tun0
? 172.16.250.128
이제 A 머신에서 수신된 모든 패킷은 포트 변경 없이 B 머신으로 라우팅됩니다.
Machine BI에서 포트 8080에 투명 프록시(mitmproxy, burpsuite 등)를 설정하고 다음 iptables 규칙을 사용합니다.
iptables -t nat -A PREROUTING -i ens33 -p tcp -j REDIRECT --to-ports 8080
여기서 ens33
(ip )는 컴퓨터 A 172.16.250.128
의 인터페이스에 연결된 인터페이스입니다 . tun0
위의 규칙은 이 인터페이스의 모든 TCP 패킷을 포트 8080(투명 프록시가 수신 대기하는 포트)으로 리디렉션합니다. 모든 것이 정상입니다. 모든 TCP 패킷은 투명 프록시를 통해 라우팅됩니다.
하지만 투명 프록시가 패킷의 원래 대상(주소 및 포트)을 어떻게 아는지 잘 모르겠습니다. 이 질문을 찾았습니다: [link][1] iptables는 원래 대상을 수정하기 전에 저장한다고 나와 있습니다. 이제 투명 프록시가 원래 포트를 어떻게 아는지 이해했습니다. 하지만 목적지 주소는 어떻습니까? 머신 A에서 대상 주소가 수정되었으므로 머신 B가 이를 수정하지 않았기 때문에 머신 B와 그 내부는 원래 대상 주소를 알아야 한다고 생각하지 않습니다. 그렇죠? 그러나 wlan0
투명 프록시로 라우팅되는 인터페이스로 전송된 패킷의 원래 대상 주소를 여전히 얻을 수 있습니다 . 나는 투명 프록시가 패킷을 원래 대상(인터넷에 있는 대상)으로 올바르게 라우팅하기 때문에 이것을 알고 있습니다.
머신 B는 DNATed(수정된 목적지) 패킷의 원래 목적지를 어떻게 알 수 있습니까? 원래 대상도 네트워크를 통해 전송됩니까? Wireshark에서는 안보이네요. [1]:투명한 SOCKS 프록시는 사용할 대상 IP를 어떻게 알 수 있나요?
답변1
당신은 알고 싶어할 것입니다"투명 프록시를 구현하는 방법[서버 B에서]패킷의 원래 목적지를 알아라MASQUERADE
". 서버 A의 원본( )과 대상( ) 을 재정의했기 때문에 그럴 수 없습니다 DNAT
. 서버 B에 관한 한 트래픽은 서버 A에서 발생하여 서버 B로 전달됩니다.
트래픽 응답이 서버 A로 다시 전송되면 서버 A만이 DNAT/MASQUERADE를 실행 취소하여 원본 진실 소스로 전송되는 방법을 알고 있습니다.