You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何配置树莓派4的Squid代理服务器,实现设备通过指定端口使用对应4G路由器网络

如何配置树莓派4的Squid代理服务器,实现设备通过指定端口使用对应4G路由器网络

我来帮你搞定这个问题!你的需求本质是实现Squid代理的多出口分流——让不同的代理端口对应不同的外网网关(比如你现在的4G路由器,以后扩展的其他路由器),之前你用cache_peer的思路不对,因为那是用来连接上游代理的,不是直接指定网卡出口。咱们一步步来配置:

一、先确认基础网络连通性

首先确保树莓派能同时正常访问两个网络,并且可以手动指定走wlan0的4G网关访问外网:

# 测试通过4G网关访问外网(示例用百度)
ping -I wlan0 www.baidu.com

如果能ping通,说明wlan0的网络没问题;如果不通,先检查wlan0的IP、子网掩码和网关是否配置正确。

二、配置独立路由表(单4G路由器场景)

因为树莓派默认网关是eth0的本地ISP,咱们需要给wlan0单独建一个路由表,让指定的流量走这个表的网关:

  1. 编辑路由表配置文件,添加自定义路由表:
echo "100 4G_ROUTE" >> /etc/iproute2/rt_tables

这里100是路由表ID,4G_ROUTE是表名,取个好记的名字就行。

  1. 给这个路由表添加默认路由(指向4G路由器网关):
ip route add default via 192.168.10.1 dev wlan0 table 4G_ROUTE
  1. 添加路由规则:让标记过的流量走这个路由表:
ip rule add fwmark 0x1 table 4G_ROUTE

这条规则的意思是:凡是被标记了0x1的流量,都走4G_ROUTE表的路由。

三、配置iptables标记流量

我们需要把发往Squid指定端口(比如3129,你可以自己选)的流量打上标记,这样它会走上面的4G路由表:

# 标记从客户端来的、发往树莓派3129端口的流量
iptables -t mangle -A PREROUTING -p tcp --dport 3129 -j MARK --set-mark 0x1
# 确保回包也走正确的路由
iptables -t mangle -A OUTPUT -p tcp --sport 3129 -j MARK --set-mark 0x1

以后要加更多路由器的话,只需要重复上面的路由表、路由规则、iptables标记步骤,换不同的表ID、标记值和端口就行。

四、修改Squid配置文件

现在修改Squid的主配置(通常是/etc/squid/squid.conf):

  1. 保留默认的3128端口走eth0(如果需要的话),新增对应4G路由的端口:
# 默认端口,走系统默认网关(eth0)
http_port 3128

# 新增的4G专用端口,绑定树莓派eth0的IP(因为客户端在192.168.1.x网段)
http_port 192.168.1.41:3129

# 允许本地网段的设备访问代理
acl local_net src 192.168.1.0/24
http_access allow local_net
http_access deny all

# 关键:让3129端口的流量从wlan0的IP发出
acl port_4g_port myport 3129
tcp_outgoing_address 192.168.10.174 port_4g_port

这里tcp_outgoing_address指定了该端口的代理流量从wlan0的IP(192.168.10.174)发出,结合前面的iptables标记和路由表,就能确保流量走4G网关。

  1. 保存配置后,重启Squid服务:
sudo systemctl restart squid

五、验证配置

从你的客户端设备(比如192.168.1.42)做以下测试:

  1. 设置浏览器或系统代理为192.168.1.41:3129
  2. 访问查公网IP的服务(比如执行curl ifconfig.me),看返回的IP是不是4G路由器的公网IP
  3. 如果用3128端口,返回的应该是本地ISP的公网IP,这样就说明分流生效了

六、扩展多路由器的注意事项

以后你要加10个路由器的话,只需要:

  • 每个路由器对应一个网卡(或者多个wlan接口,比如wlan0、wlan1...)
  • 每个网卡创建独立的路由表(比如101、102...)
  • 每个路由表添加对应路由器的默认网关
  • 每个路由器对应一个Squid端口(比如3130、3131...)
  • 给每个端口配置对应的iptables标记和Squid的tcp_outgoing_address

额外注意事项

  • 确保树莓派开启了IP转发:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
  • 检查防火墙规则,确保客户端能访问Squid的端口(比如3129):
sudo ufw allow 3129/tcp

备注:内容来源于stack exchange,提问作者Herbert Goes

火山引擎 最新活动