
우리는 IP당 X개의 요청 수를 할당하고 이러한 제한으로 5개의 IP를 설정할 수 있는 서비스를 사용합니다.
인터넷에 다음 주소가 있는 Linux 상자가 있다고 가정합니다: 66.249.90.104 - 그것은 Google IP이고 내 IP가 아닙니다... 그러니 마음껏 해킹해 보세요 :)
전달 프록시(ProxyRequests On)로 apache+mod_proxy를 설정했습니다. 즉, 66.249.90.104:8080을 프록시로 사용하도록 Firefox를 설정할 수 있으며 모든 Firefox 트래픽은 66.249.90.104로 출력됩니다.
여태까지는 그런대로 잘됐다.
문제:
이제 별칭 인터페이스를 더 추가하여 전체 결과는 다음과 같습니다.
eth0: 66.249.90.104
eth0:1 66.249.90.105
eth0:2 66.249.90.106
eth0:3 66.249.90.107
eth0:4 66.249.90.108
모든 인터페이스에 바인딩되는 apache+mod_proxy(단일 apache 인스턴스)를 실행하지만 전달 프록시를 사용하기 위해 어떤 주소를 연결하든 모든 트래픽은 66.249.90.104로 인터넷으로 나갑니다.
또한 각각 자체 인터페이스에만 바인딩된 5개의 서로 다른 아파치를 실행해 보았지만 여전히 66.249.90.104를 통해 아웃바운드 요청을 보냅니다.
나는 다음과 같이 작동하기를 바랐습니다.
66.249.90.108에 연결하고 프록시 요청을 했는데 66.249.90.108로 출력됩니다.
66.249.90.107에 접속해서 프록시 요청을 했더니 66.249.90.107로 나옵니다.
등.
다른 사람이 이 문제를 처리해야 했나요? 대체 솔루션은 5개의 개별 상자에서 Apache를 실행하는 것이지만, 하나의 상자에서 모든 작업을 수행하는 것보다 선호합니다.
감사해요!
답변1
mod_proxy에는 소켓을 열 때 소스 IP를 선택하는 옵션이 없는 것 같습니다. 그러나 iptables를 사용하여 사용자에서 주소 풀로의 SNAT 트래픽을 전송할 수 있습니다.
iptables -A POSTROUTING -m owner --uid-owner httpd -j SNAT --to-source 66.249.90.104-66.249.90.108
IIRC는 각 연결이 매핑된 풀을 통해 배포되므로 균등하게 분할되어야 합니다. 어떤 요청이 어디로 가는지 제어해야 하는 경우 여러 사용자로 여러 Apache 인스턴스를 실행하고 별도의 규칙과 일치시켜 볼 수 있습니다.
답변2
특히 Linux 고급 라우팅 및 트래픽 제어 HOWTO를 살펴보십시오.이것페이지. 아마도 "애플리케이션" 수준을 관리하는 아파치보다는 이를 알고 있는 커널에 라우팅을 맡기고 싶을 수도 있습니다.