Ubuntu 安装 GenPAC 和生成 PAC 文件

By | 最新修改:2024-08-17

本文的主要内容是如何在 Ubuntu 下配置 PAC,通过 GenPAC 在本地生成 PAC 文件。

代理自动配置(PAC)允许根据网址来自动地使用适当的代理服务器或者不使用代理来访问网站,经常在浏览器中设置。

GenPAC 是一个在 GitHub 网站开源的项目,其代码仓库为: https://github.com/JinnLynn/genpac

在很多 Linux 发行版中,本文的内容也是兼容的,可以作为参考。

前提条件:

  1. 其一:本文使用的操作系统是 Ubuntu 22.04,当然,其他的 Linux 发行版也是可以的。

  2. 其二:要有一个能访问谷歌网站的 Socks5 代理 IP 地址或域名,以及端口号。

  3. 其三:本文是 192.168.1.101:1080

Ubuntu生成PAC文件

安装 GenPAC

安装 PyPI3

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3-pip

设置 PyPI 的国内源

# 当前用户
mkdir ~/.pip
cat >~/.pip/pip.conf ~/.pip/pip.conf 

升级 PyPI 本身和安装 GenPAC

sudo pip install -U pip
sudo pip install -U genpac

解决“ImportError: cannot import name 'Callable' from 'collections'” 问题

升级 Callable

sudo pip install -U Callable

修改 GenPAC 相关文件的代码

找到“from collections import Callable”所在文件,然后修改:

find /usr/local/lib/python3.10/dist-packages/genpac/ -type f | grep -E "*.\.py" | xargs grep -n "from collections import Callable"

当前的执行结果是:

/usr/local/lib/python3.10/dist-packages/genpac/pysocks/socks.py:65:from collections import Callable

以上的结果分析得出,搜索的目标字符串在文件 /usr/local/lib/python3.10/dist-packages/genpac/pysocks/socks.py 的第 65 行中。

然后用文本编辑器打开之,这里用 vi 打开:

sudo vi /usr/local/lib/python3.10/dist-packages/genpac/pysocks/socks.py

删除该行,然后在文件原位置添加以下代码:

try:
    from collections import Callable
except ImportError:
    from collections.abc import Callable

保存并退出文件。

如果还没有解决问题,请参考: https://github.com/JinnLynn/genpac/issues/46


生成 pac 文件

前提:

切换到任意一个当前系统登录用户有读写运行权限的目录下(这里是当前用户的“家”目录下的 Documents 目录)。

mkdir ~/Documents
cd ~/Documents
genpac --format=pac --pac-proxy="SOCKS5 192.168.1.101:1080" --gfwlist-proxy="SOCKS5 192.168.1.101:1080" --output=autoproxy.pac --gfwlist-url=https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

如果上面命令中的网址列表 URL 无法访问,可以参考本站的文章: 如何在境内加速 GitHub 资源的下载以及克隆

于是,可以用以下命令代替上述的命令:

genpac --format=pac --pac-proxy="SOCKS5 192.168.1.101:1080" --output=autoproxy.pac --gfwlist-url=https://raw.kkgithub.com/gfwlist/gfwlist/master/gfwlist.txt

参数说明:

  1. --pac-proxy 指定 PAC 文件中使用的代理信息;

  2. --gfwlist-proxy 指定获取远程网址列表文件要使用的代理,和 --pac-proxy 格式一样;

  3. --output 指定输出的 PAC 文件的名称;

  4. --gfwlist-url 指定网址列表文件的 URL。

若要使用 HTTP 协议的网络代理,把上述命令中的 “SOCKS5” 修改成 “HTTP” 即可,记得同时修改 IP 地址和端口,这是要把网络流量转发到 HTTP 协议的代理中。

GenPAC 允许的具体参数参考: https://github.com/JinnLynn/genpac#user-content-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95

没有提示即是成功生成 PAC 文件,文件名称为 autoproxy.pac,全路径为 /home/user/Documents/autoproxy.pac,其中,user 为当前登录系统的用户名,假设它为 test,下文会用到。


使用 PAC 文件

设置浏览器的“自动代理配置”。

这里以火狐浏览器为例:

  1. 导航至 “编辑” --> “设置” --> “常规” --> “网络设置” --> “配置...”

  2. 打开“连接设置”界面,选择“自动代理配置的 URL(PAC)”:

    在文本框中输入刚才生成的 PAC 文件的全路径——file:///home/test/Documents/autoproxy.pac

修改 PAC 文件或改变 PAC 文件的路径,可能要重启浏览器才能生效。


测试 PAC 的配置

测试配置的方法:

用火狐浏览器访问 https://ip.cn 网站,如果显示的 IP 和 IP 所在地域是你的本地 IP 和地理位置;且能够访问谷歌的网站,表明PAC已经正确地配置完成。


总结

本文详尽地讲述了 Ubuntu 系统下如何安装 GenPAC,并且使用命令行工具 genpac 配置和生成 PAC 文件的过程,还解决了高版本 Python3 运行 genpac 时要面临的一个编程语言版本依赖导致的问题。

在可以使用 SOCKS5 协议的网络代理来转发网络流量的同时,还可以使用 HTTP 协议生成 PAC 文件,从而通过 HTTP 转发流量。


程序知路

鉴于本人的相关知识储备以及能力有限,本博客的观点和描述如有错漏或是有考虑不周到的地方还请多多包涵,欢迎互相探讨,一起学习,共同进步。

本文章可以转载,但是需要说明来源出处!

本文使用的部分图片来源于网上,若是侵权,请与本文作者联系删除: admin@icxzl.com