web-dev-qa-db-ja.com

ルールに基づいて、外部宛先にトラフィックをリダイレクト/バウンスTCP=できますか?

これが可能かどうかさえわかりません...また、この件についての私の無知を許してください。

私が探しているのは、ホストAに到着するすべてのTCPトラフィックをホストBにリダイレクトできるようにする「何か」のためのものですが、いくつかのルールに基づいています。

ホストA(仲介者)がドメインXのホストからリクエスト(たとえば単純なHTTPリクエスト)を受信したとします。その場合、ホストAはそれを通過させ、ホストA自体によって処理されます。

ここで、ホストAがドメインYのホストから別のHTTPリクエストを受信するとしますが、今回は、カスタマイズ可能なルールにより、ホストAはすべてのトラフィックをホストBにリダイレクトし、ホストBはそれを直接送信されたかのように処理できます。そして、この時点で、ホストBとドメインYを持つホストの両方が自由に通信できます(もちろん、ホストAと考えられます)。

注:これらのホストはすべて、LAN内ではなく、インターネット上にあります。

説明が明確でない場合はお知らせください。

3
xfx

ルールに基づいて複数のバックエンドを持つ1つのフロントエンドを設定することにより、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/

2
Mihai

TCPプロキシで記述している内容。 HTTP接続のみをリダイレクトする場合は、HTTPプロキシのみが必要です。

一般的に使用されるTCPプロキシはrinetdです。

debian-administration.org から:

Rinetdパッケージには、マシン上の接続をリッスンし、それらを新しい宛先にサイレントにリダイレクトするように構成できる単純なツールが含まれています。簡単に言うと、設定が簡単なTCPプロキシとして機能します。

新しいIPにルーティングでき、ファイアウォールが邪魔にならない限り、インターネット上にいるのかLAN内にいるのかは関係ありません。

5
Ecolitan

多分あなたはsocatを使うことができますか?

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

私が探しているのは、ホストAに到着するすべてのTCPトラフィックをホストBにリダイレクトできるが、いくつかのルールに基づいている「何か」を探しています。

iptablesが最適です(嫌いにもかかわらず)

ホストA(仲介者)がドメインXのホストからリクエスト(たとえば単純なHTTPリクエスト)を受信したとします。その場合、ホストAはそれを通過させ、ホストA自体によって処理されます。

このステートメントを意味のあるものにするために、ホストAがtcp/80でhttpを実行していることを意味していると思います。インターネットとホストAの間に別のホストがあり、-s 0.0.0.0/0をホストA:80にルーティングします。ホストAがインターネット上でライブであるという意味の場合は、iptablesをよく理解するまで、そうしないでください:P

ここで、ホストAがドメインYのホストから別のHTTPリクエストを受信するとしますが、今回は、カスタマイズ可能なルールにより、ホストAはすべてのトラフィックをホストBにリダイレクトし、ホストBはそれを直接送信されたかのように処理できます。そして、この時点で、ホストBとドメインYを持つホストの両方が自由に通信できます(もちろん、ホストAと考えていました)。

さて、ここでレイヤー3/4について話しているとは思いませんが、レイヤー7は書き直します... Apacheまたはさらに優れたnginxで.htacessを試してください(他に選択肢はありますか?)

注:これらのホストはすべて、LAN内ではなく、インターネット上にあります。

d00dは私が上で言ったことを読んだ。 iptablesをすばやく学びます。自身を守る。

説明が十分に明確でない場合はお知らせください。

説明は十分に明確ではありません。最初にg00gleを試してください。

0
nandoP

あなたが求めているものが一般的なTCPレベルのソリューションである場合は、Ecolitanの答えを正しいものとして受け入れ、賞金を授与する必要があります。他のサービスのリダイレクトに興味を示したようです。

HTTPのみに関心がある場合、またはrinetdが必要なすべてを実行しない場合は、.htaccessの使用に関するnandoPの答えは正しい方向に沿っています(いずれにしても1つの解決策です)が、もう少し知っておく必要があります。または、ワニスやイカなどの専用プロキシソフトウェアを使用することもできます。あなたがApacheに精通しているなら、あなたはそれに固執したほうがよいでしょう。

Apacheruleは、たとえば http://www.example.com/foohttp://hostb.example.com/foo にリダイレクトし、その後、何かをしない限りそれについて、hostBはリクエストがそのドメインに対するものであると認識します。 Webサイトによっては、hostb.example.comを参照するURLを含むページの送信を開始しないようにするために、hostBでも問題を修正する必要がある可能性があります。

古いバージョンのApacheを使用している場合は、hostBのホストヘッダーを修正する必要があるかもしれませんが、Apache 2.0.31以降、ProxyPreserveHostディレクティブがあります(mod_proxyの docs を参照)これを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>

このserverconfigに複数のドメインを追加することは可能ですが、ドメインごとに個別に上記のように構成することをお勧めします。

RewriteCondが一致しない場合、virtualhost構成内の他のルールを処理します。

0
mc0e

次の組み込みの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

0
Jaans

ほとんどのハードウェア/ソフトウェアファイアウォールソリューションは、ソースIPに基づいてこれを行うことができます。

次のハードウェアファイアウォールよりもソースドメインに基づいて決定を下したい場合は、確かにそれを行うことができます:DLINK DFLシリーズ(少なくともシニアモデル)、CheckPoint、CiscoASA。

人々はまた、ソフトウェアFWコモドがそれを行うことができると言います( http://www.wilderssecurity.com/showthread.php?t=245901 )。しかし、私にはわかりません。

見つけることができるWindows以外のソフトウェアソリューションは、VMをWindows 2008R2にデプロイすることもできます。

0
Veniamin