1

我有2个网卡。第一个是带地址192.168.5.3的网卡,第二个是带地址的网卡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 :/ for http url,connect not secure for https url。请让我知道解决方案。谢谢。

原因:proxy从客户端读取请求时,获取到第一行,使用proxy作为透明时,收到GET / HTTP/1.1不包含Host等请求,所以返回bad request。使用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 */

来自文档:

指定是否将此代理作为透明代理运行。

默认 = 假

于 2016-11-05T23:23:51.147 回答