squid 指定传出网络接口

squid 指定传出网络接口

我有一台 Linux Debian 机器,上面有许多运行 Squid 的网络接口(venet0:1 到 venet0:5)。如果我连接到接口 venet0:2,squid 将使用 venet0:0 进行传出流量,但我希望 Squid 使用相同的网络接口进行连接。因此,如果我连接到 venet0:1 的 IP 地址,代理也应该使用相同传出流量的接口。

目前我使用以下配置:

http_port 200
forwarded_for off
uri_whitespace encode
visible_hostname localhost
via off
collapsed_forwarding on
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Proxy
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl ncsa_users proxy_auth REQUIRED
access_log none
cache_store_log none
cache_log /dev/null
acl all src all
http_access allow ncsa_users
header_access From deny all
header_access Referer deny all
header_access Server deny all
header_access User-Agent allow all
header_access WWW-Authenticate deny all
header_access Link deny all
header_access Accept-Charset deny all
header_access Accept-Encoding deny all
header_access Accept-Language deny all
header_access Content-Language deny all
header_access Mime-Version deny all

我已经尝试过http://www.tastyplacement.com/squid-proxy-multiple-outgoing-ip-addresses但我不认为我能使用它,因为我使用 ncsa 而不是源 ip 地址来验证用户。

是否有可能让 squid 使用正确的网络接口?如果我可以避免 acl 规则就好了,因为每次更改一个 ip 地址都需要更改配置。

答案1

最好的解决方案是为每个接口创建一个 acl,使到达该接口的所有请求都属于该组,然后将该组重定向到特定的传出接口。

示例:
服务器 X 具有以下 IP:

  • 10.0.0.1
  • 10.0.0.2
  • 10.0.0.3

因此,squid.conf 文件应该是这样的:

acl 10_0_0_1 localip 10.0.0.1
tcp_outgoing_address 10.0.0.1 10_0_0_1 

acl 10_0_0_2 localip 10.0.0.2
tcp_outgoing_address 10.0.0.2 10_0_0_2 

acl 10_0_0_3 localip 10.0.0.3
tcp_outgoing_address 10.0.0.3 10_0_0_3

那么,任何对“10.0.0.1”的请求都将使用“10.0.0.1”接口,任何对“10.0.0.2”的请求都将使用“10.0.0.2”接口,依此类推。

我知道这是一个老问题,但由于它仍然是第一个谷歌搜索结果,所以发布正确答案仍然有效。

答案2

它是在 acl 中配置的,因此在该行之后:

acl youracl src IP.Ad.Res.Of venet:0:2

添加以下内容:

tcp_outgoing_address 192.168.1.1 youracl

答案3

您需要一些与您列出的链接类似的东西,但方法不同。假设 VEIP1 表示 venet0:1 的 IP 地址。

acl ncsa_users proxy_auth 必需 http_access 拒绝 !ncsa_users

acl ve1acl localip VEIP1 http_access 允许 ve1acl ncsa_users tcp_outgoing_address VEIP1 ve1acl

acl ve2acl localip VEIP2 http_access 允许 ve2acl ncsa_users tcp_outgoing_address VEIP2 ve2acl

(我想您能弄清楚其余的模式。)

此外,我认为您必须删除上面的 http_access allow ncsa_users 行,因为我们现在希望用户得到身份验证并连接到其中一个特定 IP。

PS 我从未配置过 squid,所以我不确定这是完整的答案。但通过阅读文档,我可以放心地说这是正确的方向。祝你好运,让我知道进展如何!

相关内容