Можно ли перенаправить / отослать 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.