Назад | Перейти на главную страницу

перенаправление некоторых запросов url на прокси LAN

Я использую маршрутизатор на базе Linux с dnsmasq и iptables. На машине LAN у меня есть прокси-сервер Squid. Я хочу знать, могут ли запросы на определенные URL-адреса перенаправляться на прокси, в то время как другие URL-адреса разрешены непосредственно в WAN. Например, запрос на www.onedomian.com должен быть перенаправлен на прокси-сервер маршрутизатором.

Ты можешь использовать iptables для перенаправления HTTP-запросов на основе IP-адреса назначения (IP-адреса веб-сервера) и / или на основе URL-адреса (некоторой строки) с использованием модуля сопоставления строк.

Например, вы можете использовать правило для перенаправления запросов на прокси:

$ sudo iptables -t nat -A PREROUTING -s your_client_ip -d your_url_ip -p tcp --dport 80 -j DNAT --to-destination PROXY_IP:PROXY_PORT

Другой пример использования соответствия жала:

$ sudo iptables -t nat -A PREROUTING -s your_client_ip -p tcp --dport 80 -m string --string "your_url" --algo bm -j DNAT --to-destination PROXY_IP:PROXY_PORT

Обычным случаем будет прямая пересылка запросов (учитывая, что в вашем браузере нет настроек прокси). Вам просто нужно настроить шлюз по умолчанию и указать необходимый FORWARD правила. Приведенные выше правила предполагают использование прозрачного прокси.

Если вы хотите указать настройки прокси-сервера в своем браузере, вы можете использовать список исключений в браузере, чтобы указать URL-адреса / IP-адреса, которые не передаются на прокси-сервер.

Да, используя файл proxy.pac, который вы можете сохранить на свой диск или на http-сервере, а затем установить для него конфигурацию прокси в вашем браузере.

Это пример, найденный в Интернете, если у вас есть особые потребности, дайте нам знать.

function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, ".noa.com") ||
isInNet(host, "10.0.0.0", "255.0.0.0") ||
isInNet(host, "150.0.0.0", "255.255.0.0") ||
isInNet(host, "192.168.1.0", "255.255.255.0") ||
isInNet(host, "155.16.0.0", "255.255.0.0") ||
isInNet(host, "222.123.76.43", "255.255.255.255") ||
isInNet(host, "222.123.76.24", "255.255.255.255") ||
isInNet(host, "222.223.120.0", "255.255.255.0")) && (
!localHostOrDomainIs(host, "aproxy.noa.com") &&
!localHostOrDomainIs(host, "10.1.80.10") &&
!localHostOrDomainIs(host, "newproxy.noa.com") &&
!localHostOrDomainIs(host, "10.1.1.74") &&
!localHostOrDomainIs(host, "cproxy.proxy.com") &&
!localHostOrDomainIs(host, "10.1.80.11"))) {
return "DIRECT";
}
else if (url.substring(0,16)=="http://localhost")
{
return "DIRECT";
}

else {
return "PROXY your.proxy.com:8080";
}
}