Прокси-сервер Http для выбора внешнего интерфейса на основе заголовка хоста

У меня очень конкретный случай использования, когда у меня есть несколько внешних IP-адресов (полный класс C), и мне нужно выбрать исходящий IP-адрес, который я использую. Запросами являются http, а сервер приложений – другой компьютер во внутренней сети. Для простоты я хотел бы сохранить это как прокси-сервер http, поэтому мне не нужно менять код приложения.

Требования:

  • Прокси ищет заголовок типа «External-Ip: xyza» и отправляет трафик через интерфейс с этим внешним IP-адресом. Я могу легко изменить заголовок, поэтому, если мне нужно отправить имя интерфейса, это нормально.
  • Если заголовок не существует, прокси выбирает случайный, а затем возвращает тот интерфейс, который он использовал в качестве заголовка http.

Какой самый простой способ сделать это?

One Solution collect form web for “Прокси-сервер Http для выбора внешнего интерфейса на основе заголовка хоста”

Для того, что это стоит, Squid имеет это встроенное изначально.

Я использовал «acl outbound0 req_header .2 $», чтобы установить ACL с именем outbound0 на внешний IP-адрес .2. Я сгенерировал оставшиеся ACL со сценарием и просто закодировал их в файле конфигурации.

Затем я объединил его с tcp_outgoing_address, который выбирает внешний IP на основе ACL. Результат выглядит так:

acl outbound0 req_header TS-Outbound-IP \.20$ acl outbound1 req_header TS-Outbound-IP \.21$ acl outbound2 req_header TS-Outbound-IP \.22$ acl outbound3 req_header TS-Outbound-IP \.23$ acl outbound4 req_header TS-Outbound-IP \.24$ acl outbound5 req_header TS-Outbound-IP \.25$ tcp_outgoing_address 192.168.1.20 outbound0 tcp_outgoing_address 192.168.1.21 outbound1 tcp_outgoing_address 192.168.1.22 outbound2 tcp_outgoing_address 192.168.1.23 outbound3 tcp_outgoing_address 192.168.1.24 outbound4 tcp_outgoing_address 192.168.1.25 outbound5 

Пока это прекрасно работает для того, что нам нужно. Я буду держать вопрос открытым, потому что этот метод кажется kludgy, и я интересуюсь альтернативами.

  • Локальная DNS переписывает с хоста на хост для веб-запросов
  • количество сеансов HTTP = количество сеансов TCP?
  • Как получить URL-адрес через HTTP с netcat?
  • Настройте Centos 6.3, чтобы направлять весь трафик через прокси-сервер
  • улавливать HTTP-запросы из другого процесса
  • Случайное отставание в соединении
  • Запустите мой собственный HTTP-браузер с быстрой прорисовкой a la Opera Mini?
  • лотровать каждые 2 часа
  • Условия OpenBSD httpd.conf
  • Есть ли какая-либо командная строка, общий HTTP-прокси (например, Squid)?
  • Как разрешить доступ к сети только через прокси?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.