ネットワークカードを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.3
と192.168.5.3
dns を使用するようにクライアントを設定すると、常に 400 Bad request to URI :/ http url の場合、https url の場合は安全ではない接続が発生します。解決策を教えてください。ありがとう。
原因: プロキシがクライアントからのリクエストを読み取るときに最初の行を取得し、プロキシをトランスペアレントとして使用するときに、GET / HTTP/1.1
ホストを含まないなどのリクエストを受信したため、不正なリクエストを返します。https リクエストでは、プロキシが解析できず、解析を試み、ブラウザがssl_error_rx_record_too_long
メッセージをスローします。リトル プロキシはトランスペアレント モードをサポートしていません。リトル プロキシのトランスペアレント モードは、プロキシ経由で接続するときに、非表示のコンピュータ情報として認識されます。