Intereting Posts
размер отчетов в отчетах намного больше, чем сумма его содержимого Пропустить первые 6 строк / строк в текстовом файле с помощью awk Установить переменную окружения для подоболочки bash ждет процесса в подстановке процесса, даже если команда недействительна Вывести некоторые разделы текстового файла Измените ядро ​​в загруженном Ubuntu Image Каков резервный файл, созданный checkinstall? Лучшие практики для упаковки самостоятельно созданного программного обеспечения для Debian Distro с pip и npm как менеджеры пакетов? Сценарии конфигурации VMware: могу ли я использовать PowerCLI? Как я могу использовать Linux Mint 15 Olivia всегда в консольном режиме удалите пробел перед разделителем с помощью sed Создание имен пользователей с проверкой дублирования и их добавление в LDAP Где проверить и просмотреть различные пакеты перед их установкой Как использовать группы для ограничения всех процессов, кроме белого списка, на один процессор?

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

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

Требования:

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