예시 시나리오

예시 시나리오

나는 하루 종일 이 문제에 갇혀 있었고 일부 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 주소를 유지하는 방법이 있나요?

예시 시나리오

  1. 위의 iptables 규칙을 내 Docker 호스트에 적용했습니다.
  2. 주소가 있는 도커 컨테이너가 있습니다.172.20.0.2
  3. 해당 컨테이너 내에서 example.com을 컬링했습니다.
  4. 172.17.0.1:12345(Docker 호스트) 로 전달되는 트래픽
  5. 실행 중인 서버는 12345원격 IP 주소를 "127.0.0.1"로 표시합니다.
  6. 원격 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를 업그레이드한 후에 해결되었습니다. 모르겠어요 그냥 추측이에요

관련 정보