Squid如何实现不同用户访问不同网卡,出口IP不同?

新手上路,请多包涵

Squid代理服务器能否支持不同用户绑定不同网卡?
我使用了basic_ncsa_auth进行用户身份验证,我的需求是实现不同用户使用不同的网卡出口IP访问目标站点,我在vmware虚拟机环境下部署Squid 6.6版本,vmware上配置了两块网卡:10网段,20网段。vmware虚拟机运行ip addr后本机ip是:192.168.10.100

我的思路如下:

1,用户user1代理使用10网段出口IP(102.168.10.xxx),user2用户访问代理使用20网段出口ip(192.168.20.xxx)。
我在Windows使用cmd运行:curl -x user2:user2@192.168.10.101:3128 http://www.baidu.com,我的目的是这个出口IP需要变更为20网段,但是Squid日志出口ip仍然是10网段,必须要把@后面的ip修改为20网段才可以实现,但是这样就无意义了?我的测试失败。
2,思路二,通过设置不同端口,实现不同出口ip。比如访问192.168.10.101:1111,出口ip是10网段的网卡1,访问192.168.10.101:2222,出口ip是20网段的网卡2

我的思路以上两个,哪一个通过修改Squid.conf更容易实现,但是我测试下来没有任何效果!
我参考的是这篇文档:http://www.junww.com/server/2017/0214/218.html

阅读 1.1k
2 个回答

思路二:基于不同端口的出口IP绑定
这种方法通过不同端口来实现不同的出口IP,理论上更容易实现。可以在Squid配置文件中设置不同的监听端口,并为每个端口指定不同的出口IP:

使用 tcp_outgoing_address 选项进行网络配置

定义访问控制列表 (ACL)

根据用户 IP 地址或其他标识符创建 ACL。

配置 tcp_outgoing_address

为每个 ACL 指定不同的出口 IP。

示例配置

# 定义访问控制列表
acl user1 src 192.168.1.0/24
acl user2 src 192.168.2.0/24

# 为每个用户指定不同的出口 IP
tcp_outgoing_address 10.0.0.1 user1
tcp_outgoing_address 10.0.0.2 user2

在这个示例中,来自 192.168.1.0/24 网段的请求将通过 10.0.0.1 出口 IP 访问目标网站,而来自 192.168.2.0/24 网段的请求将通过 10.0.0.2 出口 IP 访问目标网站。

你可以根据实际需求调整 ACL 和出口 IP 的配置。如果有更多的用户或网卡,可以继续添加相应的 ACL 和 tcp_outgoing_address 规则。

没配置过 Squid 这个服务,单纯讨论一下

我觉得你可能要区分一下 “不同网卡” 和 “不同出口IP” 的关系。

正常情况下,系统在向外发送数据包的时候,是根据系统的路由来决定使用哪个网卡/接口的,选择哪个接口发包它是不受程序控制的,但是选择源IP是可以的。

你的两个网卡看上去是属于两个不同的子网,所以你的系统应该会有三个路由

  1. 默认路由,下一跳是 网卡1 或者 网卡2
  2. 子网是192.168.10.0/24 下一跳 网卡1 的路由
  3. 子网是192.168.20.0/24 下一跳 网卡2 的路由

这里你的目的IP 192.168.10.101,它会匹配到第二条路由,从网卡1出去,所以源IP只会是网卡1的IP。

只要有路由表在,不管你怎么配置,系统只会根据路由表的配置来决定把数据包从哪个接口发出去。


有一种情况,就是单个网卡有多个IP,比如IP是192.168.10.1 / 192.168.10.2 / ... ,这个时候,程序是可以决定使用哪个源IP的。


你引用的那个文章,它就是使用的单网卡/接口。所以配置squid可以支持指定不同的源IP。


解决办法就是去掉一个网卡/接口,一个接口设置多个IP,然后再进行测试。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏