我使用一个基于Linux的路由器,它有dnsmasq和iptables。 在局域网机器上我有鱿鱼代理。 我想知道,如果某些url的请求可以转发到代理服务器,而其他url可以直接进入广域网。 例如www.onedomian.com的请求应该由路由器转发给代理。
您可以使用iptables
根据目标IP(Web服务器的IP)和/或基于URL(一些string)使用string匹配模块redirectHTTP请求。
例如,您可以使用规则将请求转发给代理:
$ 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
另一个使用sting匹配的例子:
$ 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服务器上,然后将其设置为浏览器的代理configuration。
这是在互联网上发现的一个例子,如果你有特殊的需要告诉我们。
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"; } }