나는 하루 종일 이 문제에 갇혀 있었고 일부 iptables 전문가가 이것을 읽고 나를 도울 수 있기를 기도하고 있습니다.
모든 도커 컨테이너의 아웃바운드 트래픽이 양말 5 프록시를 통과하도록 강제하고 싶습니다.
이것은 내가 얻은 가장 가까운 것입니다:
iptables -t nat -N REDSOCKS
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -d 240.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -s 172.20.0.0/16 -p tcp -j DNAT --to-destination 172.17.0.1:12345
iptables -t nat -A OUTPUT -s 172.20.0.0/16 -j REDSOCKS
iptables -t nat -A PREROUTING -s 172.20.0.0/16 -j REDSOCKS
거의 완벽하게 작동하지만 sock5 프록시는 원래 IP 주소를 인식하지 못합니다.
원격 주소는 항상 "127.0.0.1"입니다.
원래 IP 주소를 유지하는 방법이 있나요?
예시 시나리오
- 위의 iptables 규칙을 내 Docker 호스트에 적용했습니다.
- 주소가 있는 도커 컨테이너가 있습니다.
172.20.0.2
- 해당 컨테이너 내에서 example.com을 컬링했습니다.
172.17.0.1:12345
(Docker 호스트) 로 전달되는 트래픽- 실행 중인 서버는
12345
원격 IP 주소를 "127.0.0.1"로 표시합니다. - 원격 IP 주소를 다음과 같이 표시하고 싶습니다.
172.20.0.2
어쨌든, 이 문제를 해결하도록 도와줄 수 있는 사람에게 감사드립니다.
답변1
네트워크 관점에서 출발지 IP와 도착지 IP가 동일할 경우 보안 문제가 발생할 수 있습니다.지상 공격.
답변2
위의 iptables 규칙을 내 Docker 호스트에 적용했습니다.
호스트에서 -t nat -A OUTPUT
호스트의 아웃바운드 트래픽을 리디렉션합니다. 컨테이너의 트래픽을 리디렉션하려는 경우에는 필요하지 않습니다. -t nat -I PREROUTING
컨테이너를 리디렉션하는 데 충분한 트래픽을 사용하십시오 .
확실하게 알지 못해도 시도해 볼 수 있는 몇 가지 트릭은 다음과 같습니다. 도움이 되었기를 바랍니다:
이것은 호스트의 iptables이므로 다음
-j DNAT --to-destination 172.17.0.1:12345
과 같이 수정해 보십시오.-j DNAT --to-destination 127.0.0.1:12345
iptables -I INPUT -j ACCEPT
컨테이너에서 들어오는 트래픽을 허용합니다. 귀하의 호스트가 이를 허용하지 않는 것 같아서 원래 IP는 항상 127.0.0.1입니다.ocks5 프록시? iptables와 함께 양말5를 사용하려면 프록시 프로토콜 브리지가 필요합니다.
container -> host -> redsocks to socks5 bridge -> socks5
마지막으로, 그래도 작동하지 않는다면 제가 겪었던 것과 마찬가지로 NAT 기반 Linux의 버그일 수 있습니다.여기. 이 문제는 Linux를 업그레이드한 후에 해결되었습니다. 모르겠어요 그냥 추측이에요