호기심에서 투명한 TOR 프록시에 대한 몇 가지 튜토리얼을 읽고 있습니다. 이는 네트워크 관점에서 볼 때 매우 흥미로운 주제이기 때문입니다. tun
/ 인터페이스 만 사용하는 VPN 게이트웨이와 달리 tap
TOR 프록시는 단일 포트를 사용합니다. 모든 튜토리얼에서는 다음과 같은 마법의 라인을 반복합니다.
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
그 중에는 TOR 포트인 eth0
입력(LAN) 인터페이스가 있습니다 . 9040
문제는 왜 그런 일이 네트워크 관점에서 의미가 있는지 전혀 모른다는 것입니다.
redirect
/ 체인에 대한 나의 이해 dst-nat
와 그것이 물리적 라우터에서 어떻게 작동하는지에 따르면, 체인은 다음과 dst-nat
같아야 합니다 .dst-port
dst-addr
앞으로라우팅 결정을 내리고 다른 것으로 변경합니다. 예를 들어:
- 앞으로
dst-nat
:192.168.1.2:46364 -> 88.88.88.88:80
- 뒤쪽에
dst-nat
:192.168.1.2:46364 -> 99.99.99.99:8080
이는 99.99.99.99:8080
IP 패킷 흐름 채널의 추가 체인(예: filter
테이블)에서 볼 수 있는 내용이며, 이제부터 패킷이 장치를 떠날 때의 모습입니다.
이제 인터넷(이 stackexchange를 포함하여)의 많은 사람들은 이것이 redirect
기본적으로 인터페이스에 로컬 주소를 설정하는 것과 동일하다고 주장합니다. 이를 고려하면 규칙은 다음과 같습니다.dst-nat
dst-addr
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
분명히 말이되지 않습니다. 이것이 작동하는 방식이라면 TOR는모두패킷의 목적지는 입니다 127.0.0.1:9040
. 애플리케이션이 패킷을 가져오고 어떤 방식으로든 이에 응답하는 일반적인 애플리케이션(예: 웹 서버)의 경우 이는 완벽하게 이해됩니다. 왜냐하면 결국 이러한 서버 프로세스는 어쨌든 패킷의 최종 대상이므로 대상은 주소는 localhost인데 괜찮습니다. 하지만 TOR 라우터는 좋은 라우터이므로 패킷의 원래 목적지를 알아야 합니다. 내가 뭐 놓친 거 없니? DNAT
로컬 애플리케이션이 수신하는 내용에 영향을 미치지 않습니까 ? 아니면 REDIRECT
명령어의 특정 동작인가요?
답변1
이 답변을 확인하십시오.투명한 SOCKS 프록시는 사용할 대상 IP를 어떻게 알 수 있나요?
인용하다:
iptables는 원래 대상 주소를 덮어쓰지만 이전 주소는 기억합니다. 그런 다음 응용프로그램 코드는 특수 소켓 옵션을 요청하여 이를 얻을 수 있습니다 SO_ORIGINAL_DST
.
답변2
실제로 TOR에 대한 귀하의 의견이 맞습니다. 수신된 모든 TCP 패킷은 localhost:9040으로 리디렉션됩니다.
대상 REDIRECT는 로컬 인터페이스의 IP 주소를 변경하고 이를 사용자가 지정하는 포트에 매핑하는 특별한 유형의 DNAT 대상입니다.
eth0
LAN 인터페이스가 (네트워크 192.168.1.0/24
및 IP 주소:) 192.168.1.1
이고 라우터의 iptables 규칙이 다음과 같은 라우터가 있다고 가정합니다 .
iptables -t nat -A PREROUTING -i eth0 -p tcp --syn -j REDIRECT --to-ports 9040
그러면 LAN 내 클라이언트의 모든 TCP 패킷이 192.168.1.1:9040
.
192.168.1.2
LAN의 클라이언트(IP 주소 포함)가 google.com에 대한 TCP 연결을 가지고 있다고 가정합니다(IP: 가정) 8.8.1.1
.
원래 요청: 192.168.1.2:12345 -> 8.8.1.1:80
라우터의 사전 라우팅 체인 다음:192.168.1.2:12345->192.168.1.1:9040