将一些 URL 请求重定向到 LAN 代理

将一些 URL 请求重定向到 LAN 代理

我使用基于 Linux 的路由器,该路由器具有 dnsmasq 和 iptables。在 LAN 机器上,我有 squid 代理。我想知道是否可以将某些 URL 的请求转发到代理,而其他 URL 则允许直接转发到 WAN。例如,路由器应将 www.onedomian.com 的请求转发到代理。

答案1

您可以iptables使用字符串匹配模块根据目标 IP(Web 服务器的 IP)和/或 URL(某些字符串)重定向 HTTP 请求。

例如,您可以使用规则将请求转发到代理:

$ 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。

答案2

是的,使用 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";
}
}

相关内容