Можно ли перенаправить / отослать TCP-трафик к внешнему месту назначения, основываясь на правилах?

Я даже не уверен, возможно ли это... Также, пожалуйста, прости мое невежество по этому вопросу.

То, что я ищу, - это "что-то", которое позволило бы мне перенаправить весь TCP-трафик, поступающий на хост A, на хост B, но основываясь на некоторых правилах.

Скажем, хост A (посредник) получает запрос (скажем, простой HTTP-запрос) от хоста с доменом X. В этом случае он пропускает его и обрабатывает сам хост A.

Теперь предположим, что хост A получает еще один HTTP-запрос от хоста с доменом Y, но на этот раз из-за некоторых настраиваемых правил хост A перенаправляет весь трафик на хост B, а хост B может обрабатывать его так, как если бы он пришел напрямую. из домена Y. И в этот момент оба хоста B и хост с доменом Y могут свободно общаться (конечно, хост A).

ПРИМЕЧАНИЕ. Все эти хосты находятся в Интернете, а не в локальной сети.

Пожалуйста, дайте мне знать, если объяснение недостаточно ясно.

7 ответов

Решение

Вы могли бы использовать haproxy настроив один веб-интерфейс с несколькими бэкэндами в соответствии с вашими правилами:

frontend my_front
    mode http
    bind <ip_address>:80
    option forwardfor
    use_backend backend1 if <condition>
    use_backend backend2 if <condition>

backend backend1
    mode http
    server server1 localhost:8000

backend backend2
    mode http
    server server2 remote_server:8000

Вы можете прочитать больше об этом на сайте haproxy: http://haproxy.1wt.eu/

Что вы описываете в TCP Proxy. Если вы хотите перенаправить только HTTP-соединения, вам нужен только HTTP-прокси.

Обычно используемый TCP Proxy rinetd,

С http://www.debian-administration.org/articles/601:

Пакет rinetd содержит простой инструмент, который может быть настроен на прослушивание соединений на компьютере и автоматическое перенаправление их в новое место назначения. Короче говоря, он действует как простая настройка прокси TCP.

Неважно, находитесь ли вы в Интернете или в локальной сети, если вы можете перенаправить на новый IP-адрес и никакой брандмауэр не помешает вам.

Возможно, вы могли бы использовать socat?

socat TCP-LISTEN:80,fork TCP:my.newservername.com:80

Я обнаружил, что следующие встроенные функции Windows работают идеально для моих нужд, лучше, чем TCPTunnel или даже FPipe:

http://www.sysbiosis.com/blog/set-tcp-proxy-windows

Например, чтобы открыть туннель перенаправления, используйте следующее:netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport

И чтобы закрыть / остановить его, используйте следующее:netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport

Если то, что вы ищете, является общим решением уровня TCP, то вы должны принять ответ Ecolitan как правильный и присудить награду. Я вижу, вы проявили интерес к перенаправлению других сервисов.

Если вас интересует только HTTP, или rinetd не будет делать все, что вам нужно, тогда ответ nandoP об использовании.htaccess будет в правильном направлении (в любом случае, одно решение), но вам нужно знать немного больше. В качестве альтернативы вы можете использовать специальное прокси-программное обеспечение, такое как лак или кальмар. Если вы знакомы с Apache, вы можете придерживаться этого.

Apacherule будет перенаправлять, например, http://www.example.com/foo на http://hostb.example.com/foo, и затем, если вы не сделаете что-то с этим, hostB увидит, что запрос поступает как для этого домен. В зависимости от вашего веб-сайта, вам, скорее всего, придется исправить ситуацию и на hostB, чтобы он не начинал рассылать страницы с URL-адресами, которые ссылаются на hostb.example.com.

Если у вас более старая версия apache, вам может потребоваться исправить заголовок узла на hostB, но в Apache 2.0.31 есть ProxyPreserveHost директива (см. docs для mod_proxy), которую вы можете поместить в hostA.

Это было давно, так как я нуждался в этом, и я только что узнал о ProxyPreserveHost. Похоже, вам нужно что-то вроде этого на hostA (не проверено):

<VirtualHost *:80>
  Servername www.example.com

  RewriteEngine on
  ProxyPreserveHost on

  RewriteCond %{REMOTE_ADDR}       ^123\.45\.67\.[0-9]*$
  RewriteRule    ^(.*)$  http://hostb.example.com/$1  [P]

  ...

</VirtualHost>

Можно было бы добавить несколько доменов к этой конфигурации сервера, но, вероятно, лучше настроить, как указано выше, отдельно для каждого домена.

Если RewriteCond не совпадает, то он будет обрабатывать другие правила в конфигурации виртуального хоста.

То, что я ищу, - это "что-то", которое позволило бы мне перенаправить весь TCP-трафик, поступающий на хост A, на хост B, но основываясь на некоторых правилах.

iptables лучше (несмотря на ненавистников)

Скажем, хост A (посредник) получает запрос (скажем, простой HTTP-запрос) от хоста с доменом X. В этом случае он пропускает его и обрабатывает сам хост A.

чтобы это утверждение имело смысл, я предполагаю, что вы имеете в виду хост A, выполняющий http на tcp/80. Между тем Интернетом и хостом A есть другой хост, и вы направляете -s 0.0.0.0/0 на хост A:80. если вы имеете в виду, что хост A работает в Интернете, не делайте этого, пока вы не будете хорошо знать iptables:P

Теперь предположим, что хост A получает еще один HTTP-запрос от хоста с доменом Y, но на этот раз из-за некоторых настраиваемых правил хост A перенаправляет весь трафик на хост B, а хост B может обрабатывать его так, как если бы он пришел напрямую. из домена Y. И в этот момент оба хоста B и хост с доменом Y могут свободно общаться (конечно, хост A).

Хорошо, теперь я не думаю, что вы говорите о слое 3/4 здесь, но слой 7 переписывает... попробуйте.htacess на apache или даже лучше nginx (есть ли другой выбор?)

ПРИМЕЧАНИЕ. Все эти хосты находятся в Интернете, а не в локальной сети.

d00d прочитайте, что я сказал выше. выучить iptables быстро. Защити себя.

Пожалуйста, дайте мне знать, если объяснение недостаточно ясно.

объяснение не достаточно ясно. попробуйте сначала g00gle.

Большинство аппаратных / программных брандмауэров могут выполнить эту работу за вас на основе исходного IP-адреса.

Если вы хотите принять решение на основе исходного домена, то, безусловно, это могут сделать следующие аппаратные брандмауэры: серия DLINK DFL (по крайней мере старшие модели), CheckPoint, Cisco ASA.

Люди также говорят, что программное обеспечение FW Comodo может сделать это ( http://www.wilderssecurity.com/showthread.php?t=245901). Но я не уверен.

Примите во внимание, что любое программное обеспечение, отличное от Windows, которое вам повезет найти, также может быть развернуто в качестве виртуальной машины на Windows 2008R2.

Другие вопросы по тегам