Как настроить маленький прокси как прозрачный прокси
У меня есть 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 */
из документации:
Укажите, следует ли запускать этот прокси как прозрачный прокси.
По умолчанию = ложь