我甚至不确定这是否可能…另外,请原谅我对这个问题的无知。
我正在寻找的是“东西”,这将允许我将所有到达主机A的TCPstream量redirect到主机B,但是基于一些规则。
说主机A(中介)从域X的主机接收一个请求(比如一个简单的HTTP请求)。在这种情况下,它允许它通过,它由主机A自己处理。
现在让我们假设主机A从域Y的主机接收到另一个HTTP请求,但是这次由于一些可定制的规则,主机A将所有的stream量redirect到主机B,主机B能够处理它,就像直接来到从域Y.此时,主机B和域Y的主机都能够自由通信(当然,主机A)。
注意:所有这些主机都在Internet上,而不在LAN内。
请让我知道如果解释不够清楚。
您可以使用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代理中描述什么。 如果你只是想redirectHTTP连接,你只需要一个HTTP代理 。
常用的TCP代理是rinetd 。
来自debian-administration.org :
rinetd软件包包含一个简单的工具,可以configuration为监听机器上的连接,并将其默认redirect到新的目的地。 简而言之,它就像configurationTCP代理一样简单。
无论您是在互联网上还是在局域网内,只要您可以路由到新的IP并且没有防火墙挡住您的路。
也许你可以使用socat?
socat TCP-LISTEN:80,fork TCP:my.newservername.com:80
大多数硬件/软件防火墙解决scheme可以基于源IP为您完成这项工作。
如果您想根据源域做出决定,那么硬件防火墙肯定可以做到:DLINK DFL系列(至less是高级型号),CheckPoint,Cisco ASA。
人们也说软件FW Comodo可以做到这一点( http://www.wilderssecurity.com/showthread.php?t=245901 )。 但我不确定。
考虑到你可能会find的任何非Windows软件解决scheme也可以在Windows 2008R2上部署为虚拟机。
我正在寻找的是“东西”,这将允许我将所有到达主机A的TCPstream量redirect到主机B,但是基于一些规则。
iptables是最好的(尽pipe仇恨)
说主机A(中介)从域X的主机接收一个请求(比如一个简单的HTTP请求)。在这种情况下,它允许它通过,它由主机A自己处理。
使这个声明是有道理的,即时猜测你的意思是主机在TCP / 80上运行的HTTP。 互联网和主机A之间还有另一台主机,并且您将-s 0.0.0.0/0路由到主机A:80。 如果你的意思是主机A在互联网上直播,不要这样做,直到你熟悉iptables:P
现在让我们假设主机A从域Y的主机接收到另一个HTTP请求,但是这次由于一些可定制的规则,主机A将所有的stream量redirect到主机B,主机B能够处理它,就像直接来到从域Y.此时,主机B和域Y的主机都能够自由通信(当然,主机A)。
好吧,所以现在我不认为你在这里谈论层3/4,但层7重写…尝试.htacess在Apache或更好的Nginx(有没有其他的select?)
注意:所有这些主机都在Internet上,而不在LAN内。
d00d读了我上面说的。 快速学习iptables。 保护你自己。
请让我知道如果解释不够清楚。
这个发现还不够清楚。 先尝试一下。
如果你以后是一个普通的TCP级别的解决scheme,那么你应该接受Ecolitan的答案是正确的,并奖励赏金。 我发现你已经performance出了重新定向其他服务的兴趣。
如果您只对HTTP感兴趣,或者rinetd不能满足您的所有需求,那么nandoP关于使用.htaccess的答案是正确的(一个解决scheme),但是您需要了解更多。 或者,你可以使用专门的代理软件,如清漆或鱿鱼。 如果你熟悉Apache,你可能会坚持下去。
一个apacherule会redirect,例如http://www.example.com/foo到http://hostb.example.com/foo ,然后,除非你做了一些事情,hostB会看到请求进入域。 根据您的网站,您最有可能需要在hostB上修复这些内容,以便它不会发送带有指向hostb.example.com的URL的网页。
如果你有一个较老的apache版本,你可能需要修改hostB上的主机头,但从Apache 2.0.31开始,有一个ProxyPreserveHost指令(请参阅mod_proxy的文档 ),你可以把它放在hostA上。
这是我需要的一段时间,我刚刚发现了ProxyPreserveHost。 它看起来像你在hostA(未经testing)需要这样的东西:
<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>
可以将多个域添加到此服务器configuration,但最好为每个域单独configuration上述内容。
如果RewriteCond不匹配,则会在虚拟主机configuration中处理其他规则。
我发现以下内置Windowsfunction完全符合我的需求,比TCPTunnel甚至FPipe更好:
http://www.sysbiosis.com/blog/set-tcp-proxy-windows
例如,要打开redirect隧道,请使用以下命令: netsh interface portproxy add v4tov4 listenaddress=localaddress listenport=localport connectaddress=destaddress connectport=destport
要closures/停止它,请使用以下命令: netsh interface portproxy delete v4tov4 listenaddress=localaddress listenport=localport