redirecionando algumas solicitações de url para um proxy de LAN

3

Eu uso um roteador baseado em Linux que possui dnsmasq e iptables. Em uma máquina de rede local, tenho o proxy do squid. Eu quero saber se os pedidos de determinados urls podem ser encaminhados para o proxy, enquanto outros URLs são permitidos diretamente para a WAN. Por exemplo, o pedido de www.onedomian.com deve ser encaminhado para o proxy pelo roteador.

    
por nixnotwin 07.01.2011 / 09:23

2 respostas

2

Você pode usar iptables para redirecionar as solicitações HTTP com base no IP de destino (IP do servidor da web) e / ou com base na URL (alguma string) usando o módulo de correspondência de string.

Por exemplo, você pode usar uma regra para encaminhar as solicitações ao proxy:

$ 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

Outro exemplo usando sting matching:

$ 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

O caso normal será encaminhar as solicitações diretamente (dado que não há configurações de proxy no seu navegador). Você só precisa configurar o gateway padrão e especificar as regras FORWARD necessárias. As regras acima assumem o uso de proxy transparente.

Se você quiser especificar uma configuração de proxy no seu navegador, poderá usar a lista de exceções no navegador para especificar as URLs / IPs que não são passadas para o servidor proxy.

    
por 07.01.2011 / 12:41
1

Sim, usando um arquivo proxy.pac, que você pode salvar em seu disco ou em um servidor http e, em seguida, configurá-lo como a configuração de proxy do seu navegador.

Este é um exemplo encontrado na internet, se você tiver necessidades específicas, informe-nos.

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";
}
}
    
por 07.01.2011 / 09:31