fangpsh's blog

高质量4G代理池

rasproxy

刚刚参加工作时,在某公司负责运维,常常要给爬虫组的同事找各种云的机器,ucloud、青云、阿里云、腾讯云、aws等,后来这些段被封的差不多了,就开始用快代理之类的服务,不过速度慢,IP 也容易被封。那会在玩树莓派,外加公司给发了一个移动3G无线网卡, 有一天突然想到不如用树莓派+无线网卡做个代理池。

好处是只要重启就能换 IP, IP 来自本地运营商真实用户 IP 超大池,不容易被封,或者是说你要敢按段封,就会误伤用户。

看上面图片当时应该搞了快 100 个树莓派。无线网卡用华为 EC8201和E8231,不需要 ppp 拨号,还有 web 接口可以读取统计流量。插到 usb 口上,写一个类似这种udev rules,添加办公网路由,删除默认路由,外网流量走无线网卡:

#Huawei E8231
ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14db", RUN+="usb_modeswitch '%b/%k'"
ACTION=="add", SUBSYSTEM=="usb",ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14db", RUN+="/sbin/route add -net 10.0.0.0/8 dev eth0"
ACTION=="add", SUBSYSTEM=="usb",ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="14db", RUN+="/sbin/route del default gw 10.0.1.1 dev eth0"

每个节点上跑个tinyproxy 或 ssh -D,使用 supervisord 或systemd 管理好服务。

再用 flask 写了一个青涩的服务端,在每个树莓派上跑一些定时脚本,上报统计信息。一些功能:

  • 流量不够了就自动下线;
  • 代理健康检查;
  • 服务端吐出可用的代理列表接口;
    • 按流量计算,按链接数最小分配等
  • 节点远程重启管理等;

如今搜索了下 19 年也有一些朋友在玩类似的,而且更省机器。当时做法是一个机器插一个无线网卡,没想到可以用 docker +虚拟网卡的方式:

如果还要做类似项目,应该会用上面网友的容器方式,或者直接用二手安卓机改造,成本更低。