Подтвердить что ты не робот

Дублировать TCP-трафик с помощью прокси-сервера

Мне нужно отправить (дублировать) трафик с одного компьютера (порт) и на два разных компьютера (порты). Мне также нужно позаботиться о сеансе TCP.

В начале я использовал em-proxy, но мне кажется, что накладные расходы довольно велики (он превышает 50% процессора). Затем я установил haproxy, и мне удалось перенаправить трафик (не дублировать). Накладные расходы являются разумными (менее 5%).

Проблема заключается в том, что я не могу сказать в файле конфигурации haproxy следующее:
- прослушивание по определенному адресу: порт и все, что вы найдете, отправляете на двух разных машины: порты и отбросить ответы от одного из них.

Эм-прокси-код для этого довольно прост, но мне кажется, что EventMachine генерирует много накладных расходов.

Прежде чем я выкопаю код haproxy и попытаюсь изменить (дублировать трафик), я бы хотел знать, есть ли что-то подобное там?

Спасибо.

4b9b3361

Ответ 1

Я создал прокси только для этой цели.

https://github.com/chrislusf/teeproxy

Использование

./teeProxy -l :8888 -a localhost:9000 -b localhost:9001

tee-proxy - это обратный прокси-сервер. Для каждого входящего запроса он клонирует запрос на 2, а затем пересылает их на 2 сервера. Результаты с сервера a возвращаются как обычно, но результаты с сервера b игнорируются.

tee-proxy обрабатывает как GET, POST, так и другие методы HTTP.

Ответ 2

Как насчет эксперимента iptables ROUTE target? У него есть опция "тройника" для зеркалирования трафика:

http://www.netfilter.org/projects/patch-o-matic/pom-external.html#pom-external-ROUTE

Что бы вы могли зеркалировать трафик с чем-то вроде:

iptables -A PREROUTING -t mangle -p tcp --dport 80 -j ROUTE --gw 1.2.3.4 --tee
iptables -A POSTROUTING -t mangle -p tcp --sport 80 -j ROUTE --gw 1.2.3.4 --tee

Второй компьютер должен находиться в одной и той же подсети и должен будет либо прослушиваться на целевом IP-адресе (а не отвечать на арпы) или слушать беспорядочно.

Ответ 3

Попробуйте https://github.com/agnoster/duplicator.

Я попробовал teeproxy, но получил странные результаты с некоторыми запросами, отличными от GET.

Ответ 4

Я также написал обратный прокси/балансировщик нагрузки для аналогичной цели с Node.js (это просто для удовольствия, пока не готово к производству).

https://github.com/losnir/ampel

Он очень самоуверенный и в настоящее время поддерживает:

  • GET Использование кругового выбора (1:1)
  • POST Использование разделения запросов. Понятий "мастер" и "тень" не существует - первым отвечающим является тот сервер, который будет обслуживать запрос клиента, а затем все другие ответы будут отброшены.

Если кто-то найдет это полезным, я могу улучшить его, чтобы сделать его более гибким.

Ответ 5

Я думаю, что ngx_http_mirror_module будет хорошим решением в таком случае. Вот небольшой обзор этого.