Как настроить Apache+Mod_Proxy так, чтобы при подключении к Mod_Proxy на интерфейсе X он отправлял трафик на этот конкретный интерфейс?

Как настроить Apache+Mod_Proxy так, чтобы при подключении к Mod_Proxy на интерфейсе X он отправлял трафик на этот конкретный интерфейс?

Мы используем сервис, который выделяет нам X запросов на один IP-адрес и позволяет нам настроить 5 IP-адресов с таким лимитом (я знаю... это кажется глупым, что они просто не могли увеличить лимит в 5 раз на одном IP-адресе).

Представьте, что у меня есть Linux-компьютер со следующим адресом в Интернете: 66.249.90.104 — это IP-адрес Google, а не мой... так что не стесняйтесь попытаться взломать его :)

Я настроил apache+mod_proxy в качестве прокси-сервера пересылки (ProxyRequests On). То есть вы можете настроить Firefox на использование 66.249.90.104:8080 в качестве прокси-сервера, и весь трафик 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 разных Apache, каждый из которых привязывался только к своему интерфейсу, но исходящий запрос все равно отправлялся через 66.249.90.104.

Я надеялся, что это заработает следующим образом:
я подключаюсь к 66.249.90.108 и делаю запрос прокси, и он выходит как 66.249.90.108.
Я подключаюсь к 66.249.90.107 и делаю запрос прокси, и он выходит как 66.249.90.107
и т. д.

Кто-нибудь еще сталкивался с этой проблемой? Запасным решением было бы просто запустить apache на 5 отдельных ящиках, но я бы предпочел, чтобы все работало на одном ящике.

Спасибо!

решение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 Advanced Routing and Traffic Control HOWTO, в частности, по адресуэтотстраница. Возможно, вы захотите оставить маршрутизацию ядру, которое знает об этом, а не Apache, который заботится об уровне «приложения».

Связанный контент