1

ネットワークカードを2枚持っています。最初のものはアドレスを持つネットワークカードで192.168.5.3、2番目のものはアドレスを持つネットワークカード10.1.1.252です。プロキシを透過プロキシとして使用するように設定する方法。つまり、クライアントはゲートウェイを変更するだけで192.168.5.3、ブラウザのプロキシ オプションを変更しなくてもプロキシを通過できます。これを行うには、次のコードを使用します。

final ChainedProxyAdapter adapter = new ChainedProxyAdapter() {
    @Override
    public InetSocketAddress getChainedProxyAddress() {
        return new InetSocketAddress("10.1.1.252", 8003);
    }
};
ChainedProxyManager manager = new ChainedProxyManager() {
    @Override
    public void lookupChainedProxies(HttpRequest httpRequest, Queue<ChainedProxy> chainedProxies) {
        chainedProxies.add(adapter);
    }
};
HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
    .withAddress(new InetSocketAddress("192.168.5.3", 8002))
    ..withChainProxyManager(manager)
    .start();

(ポート 8003 はインターネットにアクセスします。)iptablesで、次のようなルールを追加します。

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 80 -j REDIRECT --to-port 8002
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 443 -j REDIRECT --to-port 8002

(eth2 のアドレスは です192.168.5.3) しかし、ゲートウェイ192.168.5.3192.168.5.3dns を使用するようにクライアントを設定すると、常に 400 Bad request to URI :/ http url の場合、https url の場合は安全ではない接続が発生します。解決策を教えてください。ありがとう。

原因: プロキシがクライアントからのリクエストを読み取るときに最初の行を取得し、プロキシをトランスペアレントとして使用するときに、GET / HTTP/1.1ホストを含​​まないなどのリクエストを受信したため、不正なリクエストを返します。https リクエストでは、プロキシが解析できず、解析を試み、ブラウザがssl_error_rx_record_too_longメッセージをスローします。リトル プロキシはトランスペアレント モードをサポートしていません。リトル プロキシのトランスペアレント モードは、プロキシ経由で接続するときに、非表示のコンピュータ情報として認識されます。

4

1 に答える 1

0

以下を試すことができます:

HttpProxyServer server = DefaultHttpProxyServer.bootstrap()
   .withAddress(new InetSocketAddress("192.168.5.3", 8002))
   .withChainProxyManager(manager)
   .withTransparent(true) /* see here */

ドキュメントから:

このプロキシを透過プロキシとして実行するかどうかを指定します。

デフォルト = false

于 2016-11-05T23:23:51.147 に答える