家庭局域网实现自动翻墙科学上网之一:代理自动配置PAC

科学上网自动走代理,国内走直连。

要实现本文功能,你需要:

可选:

A、B、C服务器可以在同一台机器上。也可以按需分开。


在代理服务器B上搭建自己的SOCKS或者HTTP代理服务

在Ubuntu系统中,可以通过安装dante-server实现SOCKS代理,或者安装tinyproxy实现HTTP代理

二者择一即可。

代理服务器B需要能够连接到科学上网服务器A,也可以将A和B搭在同一个机器上。但是把B搭在局域网内能够获得更好的响应速度。

SOCKS代理

在代理服务器B上安装dante-server:

sudo apt update
sudo apt install dante-server

修改配置文件,配置出入的网络接口,以及允许匿名登录:

vi /etc/danted.conf

主要的配置如下:

logoutput: stderr

# 接收请求的网络接口和端口
# 需要在局域网内能够访问
# 端口随意设置
internal: INT_IF port = 1080

# 转发请求的网络接口
# 需要能够科学上网
external: EXT_IF

# 匿名访问
socksmethod: none
clientmethod: none

user.privileged: proxy
user.unprivileged: nobody
user.libwrap: nobody

client pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
}

socks pass {
        from: 0.0.0.0/0 to: 0.0.0.0/0
}

有两个配置INT_IF和EXT_IF,分别需要替换为B上的网络接口名称(如eth0)或IP地址,可以在B上运行ifconfig查看。

启动服务:

sudo systemctl enable danted
sudo systemctl start danted

HTTP代理

在代理服务器B上安装tinyproxy:

sudo apt update
sudo apt install tinyproxy

修改配置文件,配置出入的网络接口:

vi /etc/tinyproxy/tinyproxy.conf

主要配置如下:

# 端口随意设置
Port 3128

# 传入连接的IP地址,注释则不限制
# 需要在局域网内能够访问
# Listen x.x.x.x

# 传出代理的IP地址
# 需要能够科学上网
Bind y.y.y.y

启动服务:

sudo systemctl enable tinyproxy
sudo systemctl start tinyproxy

搞一份带科学上网网址列表的PAC文件

一般从gfwlist2pac项目直接获取:

https://raw.githubusercontent.com/petronny/gfwlist2pac/master/gfwlist.pac

替换自己的代理服务器B。

如为SOCKS,则:

var proxy = 'SOCKS5 IP:端口';

如为HTTP,则:

var proxy = 'PROXY IP:端口';

将PAC文件放到局域网内能够访问到的HTTP服务器C上

例如:

http://192.168.3.1/proxy.pac

在各个系统的代理设置中,这个连接可以用于填入自动代理配置脚本,如在Windows 11中:


可选:PAC文件的自动发现

部分系统允许从局域网中自动发现和应用PAC。因为安全问题和软件兼容问题,PAC自动发现不一定总是可靠。但是,自动发现PAC省去了手动输入PAC地址的工作。

在Windows 11中,PAC自动发现可以在这里选择打开:

实现PAC自动发现有两种途径。

DHCP实现

需要配合DHCP服务器使用。在DHCP过程中,自动分发指定的PAC地址。例如,在Ubnt路由器中:

DNS实现

需要配合DNS服务器使用。局域网内将名为wpad的机器解析到HTTP服务器C上,并将PAC文件重命名为wpad.dat,使得通过

http://wpad/wpad.dat

能够在局域网访问PAC文件,则算配置成功。

称谓(*)
邮箱
留言(*)