모든 트래픽을 양말5 프록시 포트로 전달

모든 트래픽을 양말5 프록시 포트로 전달

나는 다음 답변을 따랐습니다.로컬이 아닌 모든 트래픽을 양말 프록시로 리디렉션

root@xxx:~# cat /proc/sys/net/ipv4/ip_forward
1

root@xxx:~# netstat -tapln | grep :4545 | grep LISTEN
tcp        0      0 127.0.0.1:4545          0.0.0.0:*

컬을 통해 양말5를 연결하면 포트가 제대로 작동합니다.

root@xxx:~# curl -x socks5h://127.0.0.1:4545 ifconfig.co
1.2.3.4

iptables 활성화 규칙을 실행하면 내 컴퓨터의 IP가 표시됩니다.

iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 4545

root@xxx:~# curl ifconfig.co
9.8.7.6

그러나 포트 4545는 양말5 프록시입니다. 작동해야합니다.

나는 거기에 무슨 문제가 있는지 이해하지 못합니다.

FoxyProxy를 사용해 보았습니다. 좋은 결과. 하지만 모든 트래픽을 양말5프록시를 통해 리디렉션하고 싶습니다. 어떻게 해야 합니까?

추신: 내 iptables에는 DROP/REJECT 규칙이 없습니다. 나에겐 딱 이 3가지 규칙이 있다.

답변1

첫째: SOCKS 프록시는 일종의 투명 모드에서도 작동할 수 있어야 합니다(즉, SOCKS 프로토콜을 사용하여 요청을 받지 않지만 다음을 사용해야 합니다).부가 정보iptables' 액션) 에서 REDIRECT. 이것링크에 대한 Q&A똑같이 말하세요:

이 규칙에 따르면 요청이 도착하는 포트는 다음과 같습니다.제대로 작동하려면 "사물"을 잘 구성해야 합니다..

따라서 이 솔루션이 요청한 것 이상의 작업을 수행할 것이라고 기대하지 마십시오. 모든 것을 SOCKS 프록시로 리디렉션하십시오.

누락된 것은 실행 중인 호스트에서 테스트하고 있다는 것입니다.iptables REDIRECT. 즉, 로컬로 나가는 트래픽에 대한 라우터가 아니므로 PREROUTING체인이 호출되지 않습니다.

사용해야 하는(또는 추가로) 것은 nat/OUTPUT체인입니다(그러나 나중에 설명되는 추가 문제 참조).

iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 4545

이것을 단독으로 시도하면 루프가 발생합니다. SOCKS 프록시(실제로 투명하게 작동한다고 가정, 위 참조)는 이제 자체적으로 리디렉션되고 아무 일도 일어나지 않습니다. 이를 방지하는 가장 쉬운 방법은 예외 처리를 위해 전용 사용자 또는 그룹으로 에이전트를 실행하는 것입니다. 따라서 에이전트가 사용자 ... 로 실행 중이라고 가정하고 proxy위 내용을 다음으로 바꾸세요.

iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner proxy -j REDIRECT --to-ports 4545

및/또는 루트 사용자를 리디렉션하지 않도록 선택할 수도 있습니다. 예를 들어 이 예외를 추가할 수도 있습니다.앞으로( -I여기서) 이전 줄은 다음과 같습니다.

iptables -t nat -I OUTPUT -p tcp -m owner --uid-owner root -j RETURN

최종 참고 사항: REDIRECT다음을 위해 더 이상 사용되지 않습니다.TPROXY, 하지만사용법이 좀 까다롭네요그리고 여전히 투명 프록시에 대한 (다른) 지원이 필요합니다.

관련 정보