系统代理设置

配置 MacOS、Windows、IOS 和 Ubuntu 系统下的代理,支持科学上网。包括配置代理服务器,以及客户主机的手动代理配置和 PAC 自动代理配置。

1.配置代理服务器

这种方式一般需要指定主机和端口,以及可选的主机排除列表。主机部分可以填入 IP 地址或域名。主机可以是互联网上的,也可以是局域网里的。端口部分填入整数,范围在0至65535之间。通常代理服务器会给出侦听的端口,而代理服务器所在主机的 IP 地址则需要查看系统的网络状态来获取。

下面是某代理服务器的运行状态,可以看出 HTTP 代理的侦听端口是 8001。

代理服务器所在主机的局域网 IP 地址,可以在命令行下查看,也可以查看系统的网络状态。如下:

主机的 IP 地址是:192.168.50.198。

在开启的代理服务器之后,可以在同局域网下的其他电脑,使用命令行工具,检查主机和服务是否可以访问。如下使用 Ping 工具检查主机是否可达。命令格式为:ping [要检查的IP地址]。如下图类似的结果表示主机 192.168.50.198 在局域网内可以访问到。通常主机访问不到的可能原因是发起访问的主机和被访问的主机不在同一个局域网内,或者是公司的交换机或路由器限制了局域网之间的主机相互访问。

检查完主机之后,需要检查代理服务的端口是否可以访问。可以使用命令行的 nc 工具。命令格式为:nc [要检查的IP地址] [要检查的端口] -zv。示例如下:

如上图表示主机 192.168.50.198 下的端口 8001 是可以访问。因为 Windows 系统下没有自带 nc 工具,所以这里使用 Ubuntu 系统做为演示。如果这里显示不可访问,则通常是代理服务器的主机开启了网络防火墙,限制其他主机访问该主机上的服务。这时可以暂时关闭该主机的网络防火墙,然后再测试是否能够访问。

2.手动代理配置

配置完了代理服务器,接下来就该配置需要使用代理访问海外网站的电脑了。

下面是 iPhone 手机的代理配置。进入设置->无线局域网->已连接的 wifi ->页面最底部的 HTTP 代理。

进入如下页面,上部分选择手动,端口需要填入代理服务器的 HTTP 侦听端口,服务器则填入代理服务器所在的主机地址。最后点击右上角的存储来保存设置。

 

如下已经可以通过代理服务器访问 Google 网站。

 

Windows 11 电脑配置代理服务器的步骤也是类似的。

进入设置 -> 网络和Internet -> 代理 -> 手动设置代理,在弹出的编辑代理服务器窗口,打开使用代理服务器的开关,在代理 IP 地址填入代理服务器所在主机的 IP 地址,在端口填入代理服务器的 HTTP 侦听端口,最后点击保存。如下所示:

MacOS 的代理服务器设置可以进入系统偏好设置 -> 网络 -> 高级… -> 代理,勾选网页代理(HTTP)和安全网页代理(HTTPS),并在右侧填入网页代理服务器和端口。

网页代理(HTTP)和安全网页代理(HTTPS)的区别在于,应用程序(例如 Safari 浏览器)在所访问的网站是否为 HTTPS 协议的地址,如果是 HTTPS 的地址,则会使用安全网页代理(HTTPS)的配置。当下多数网站已经采用 HTTPS 的协议,所以网页代理(HTTP)不配置也几乎不影响代理,如果需要配置,所填入的参数和安全网页代理(HTTPS)保持一致即可。

 

Ubuntu 系统的设置类似,进入设置 -> 网络 -> 网络代理,在弹出的网络代理窗口中,切换成手动,在下方的 HTTPS 代理填入代理服务器的 IP 地址和端口,最后点击右上角的关闭即可。

如上,Windows 和 IOS 的手动代理配置是不区分 HTTP 和 HTTPS,macOS 和 Ubuntu 则会区分。可以 HTTP 和 HTTPS 填入一样的参数,也可以只填 HTTPS。

以上的代理配置属于系统级别的,通常应用程序(例如:浏览器)会遵循系统的代理配置,但也可能应用程序本身有进一步的设置,可以单独设置某应用程序采用代理。如果设置了系统代理,但特定应用程序依旧无法正常访问 Google,可以检查该应用程序的设置,看是否有代理设置的。如果有的,将其设置为”采用系统代理“类似的选项。

上图是 Ubuntu 系统下的 Firefox 浏览器的连接设置,该应用设置下可以选择使用系统代理设置,或区别于系统代理,设置浏览器自身的代理。

3.自动代理配置

自动代理配置,英文全称是 Proxy Auto Config,简称 PAC。区别于手动代理配置,PAC 不会将所有流量都使用代理转发,有些网站不需要代理就能访问的情况下,使用代理可能反而会使访问速度下降。因此就需要区分哪些网站需要代理,哪些不需要。支持 PAC 的代理服务器,会另外侦听一个端口,该端口下运行 HTTP 静态文件服务器,提供一个 URL 用于访问 PAC 文件。如下所示:7777 是 PAC 伺服器端口。这其实是一个传统的 HTTP 协议的静态文件服务。

可以尝试在浏览器中访问该服务端口,例如 http://192.168.50.198:7777/ ,通常会显示 404 Not Found 页面。因为 PAC 的文件一般是其他路径,而不是根路径。加上 PAC 文件的路径后,应该是 http://192.168.50.198:7777/pac 。这时再尝试用浏览器访问,会显示一段代码。这是 PAC 服务返回的 JavaScript 代码。代码内容大致是包含了一些主机的白名单和黑名单。根据 JavaScript 代码的执行逻辑,决定所访问的网站是否需要采用代理的方式访问。

代理服务器的 PAC 服务仅用于向配置代理的主机提供 PAC 文件的内容,而 PAC 文件是在配置代理的主机上执行的。那么是否可以使用另外的 HTTP 静态文件服务提供这个 PAC 文件呢?

答案是可以的。首先把 PAC 文件保存到其他目录,然后使用 Node.js 的 http-server 第三方库,执行命令 npx http-server [pac文件所在的目录] 来启动一个 HTTP 静态文件服务,如下所示:

不仅限于 Node.js 的 http-server,只要能提供 HTTP 静态文件服务即可,包括 Nginx 和 Apache HTTP Server,甚至是阿里云和腾讯云的 OSS 对象存储。另外,PAC 文件也不仅限于静态,动态的也行。

使用另外的服务提供 PAC 文件,也需要确保该服务不被防火墙阻止,是可访问的。

有了提供 PAC 文件的服务后,接下来就是如何配置需要代理的主机了。

Windows 11 的电脑可以进入设置 -> 网络和 Internet -> 代理 -> 自动设置代理 -> 使用设置脚本,在弹出的编辑设置脚本中,打开使用设置脚本的开关,在脚本地址中填入 PAC 文件的完整地址,最后点击保存。如下所示:

区别于手动代理设置的地址和端口,这里填入的是完整的 URL 地址,指向的是 PAC 文件。所以需要包含协议,以及路径。

注意这里我填入的是 Node.js 的 http-server 库所提供的地址,如果代理服务器已经支持 PAC 文件服务,那直接填入那个地址即可,效果是一样的。

iPhone 的设置和 Windows 是类似的,进入设置 -> 无线局域网 -> 已连接的 Wifi -> HTTP 代理,在配置代理页面,选择自动,在下方的 URL 中填入 PAC 文件的 URL 地址,最后点击右上角的存储即可。如下所示:

 

Ubuntu 系统的自动代理配置在设置 -> 网络 -> 网络代理,在弹出的网络代理弹窗中,先选择自动,然后在配置 URL 中填入 PAC 文件的 URL 地址,最后点击右上角的关闭即可。如下所示:

macOS 的自动代理配置进入系统偏好设置 -> 网络 -> 高级… -> 代理,先勾选自动代理配置,然后在右侧 URL 栏填入 PAC 文件的 URL 地址,最后点击右下角的好。

 

注意区分自动代理配置和自动发现代理,自动代理配置 (Proxy auto-config) 是提供 PAC 文件来自动区分哪些网站需要代理,哪些网站不代理。而自动发现代理 (Web Proxy Auto-Discovery Protocol, WPAD) 是指不需要提供代理服务器的地址,根据一些网络协议(DHCP 或 DNS)来自动发现局域网中已开启的代理服务器。通常选择这个选项后,不需要再额外填入代理服务器的地址或端口。