Как настроить маленький прокси как прозрачный прокси

У меня есть 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.3 а также 192.168.5.3 DNS, я всегда получаю 400 Плохой запрос к URI:/ для URL-адреса http и небезопасного подключения для URL-адреса https. Пожалуйста, просто дайте мне знать решение. Благодарю.

причина: когда прокси читает запрос от клиента, он получает первую строку, а при использовании прокси как прозрачного он получает запрос, такой как GET / HTTP/1.1 не содержит Host, поэтому он возвращает неверный запрос. При запросе https прокси не может разобрать, попробуйте разбор, и браузер киньте ssl_error_rx_record_too_long сообщение. Маленький прокси не поддерживает прозрачный режим, прозрачный в маленьком прокси понимается как скрытая информация о компьютере при подключении через прокси.

1 ответ

Вы можете попробовать следующее:

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

из документации:

Укажите, следует ли запускать этот прокси как прозрачный прокси.

По умолчанию = ложь

Другие вопросы по тегам