MacOS 中的代理

本文主要是整理在Mac上使用代理过程中遇到的问题,涉及科学上网、电脑开代理、手机连电脑代理、手机配置hosts等一系列涉及开发、非开发的问题;

基础

首先要明确一个概念,代理服务器是什么?

代理服务器可以理解为代替用户/电脑/软件获取网络资源的服务器;没有代理服务器时,电脑上的软件直接从网络上获取资源,设置了代理服务器,软件发出的请求,都会传给代理服务器,然后代理服务器去网络上获取资源,取到资源后返回给电脑;

1、等下会用到的软件:

Charles:Mac上的代理服务器,主要用于抓包;

科学上网工具:ClashX(下载地址)、ShadowsocksX-NG、V2RayX;

科学上网工具本身是一个代理服务器,开启后会拦截电脑中各程序的请求,如果不配置远程服务器,它们就只是从当前连接的网络上获取资源返给程序;如果配置了远程代理服务器,它们就从远程的服务器上获取资源返回,如果远程服务器可以访问到GFW外的网站,就能进行科学上网了;

Charles则没这么麻烦,它开启后会拦截电脑中各程序的请求,然后从当前连接的网络上获取资源返回给程序;这个过程中,各程序的请求和响应,都被Charles记录下来并展示;

2、代理工具的共通点

不管什么代理工具,开启之后,都会修改 “系统偏好设置” – “网络” – “高级” – “代理” 这里的选项,包括下面的“忽略这些主机与域的代理设置”选项,这个非常关键,是解决后边一部分问题的依据;

这里就是设置哪些协议类型要走代理,默认情况下,应该是都不选中的;

问题

1、科学上网工具选择问题

有什么服务器就用什么工具,服务器可以自己搭建,也可以买现成的服务,一年一百块钱左右,我用的是这个,需要注册才能购买套餐,套餐分两类:一类是ss服务,在ShadowsocksX-NG、Shadowrocket(IOS)之类的软件中配置;一类是V2Ray服务,在ClashX、V2RayX中可用,两种类型均有体验套餐,觉得好再买正式套餐;两类服务实现的方式/协议不一样,这里就不关心了,我也不太清楚;

2、ClashX 关闭后网页打不开

问题描述:有时候关闭ClashX软件后,网页都打不开了,一开始找不到原因,也没什么解决方案,只能是重新打开软件,或者有时候打开Charles,网页才能重新加载到;

问题分析:后来不知道怎么想起来到“系统偏好设置” – “网络” 里查看,最终应该是找到了原因;下面图片中的状态是ClashX打开后,系统代理的选项;退出软件访问不到网页的情况,是这三个选项没有取消;正常来说,打开代理软件,启用系统代理后,会选中某些选项,关闭代理或退出软件后,刚才选中项应该要取消掉,恢复系统之前的设置,但出问题的时候,ClashX就没有把它选中的选项恢复,这应该是它的bug,遇到好多次了;

解决方案:到这个地方手动取消这三个选中项,“确定” – “应用”就可以了;

3、出现 2 中的情况,打开 Charles,网页又加载到了?

2的问题已经找到了,是因为ClashX关闭,系统代理没有复原;打开Charles并设为系统代理(菜单栏–Proxy–macOS Proxy)后,就覆盖了ClashX关闭时未清空的代理,所以就好使了;同时开启多个代理服务器也是一样的情况,系统代理设置以最后一次操作为准。

来看下Charles默认情况下系统代理的设置

4、ClashX 开启后,无法访问内网或本地服务器

问题描述:ClashX打开并设置为系统代理后,公司内网的网站、本地配置hosts调试的页面(指配置一个域名比如 test.com 指向本地,然后访问 test.com),都访问不到了,只能是关闭代理或退出ClashX软件才能重新访问到;

问题分析:ClashX有个配置文件,本来是想在配置文件里加规则,公司内网地址以及本地hosts地址(test.com)都不走代理服务器,但配置了就是不好使,而且配置文件是从远端获取的,一旦更新,之前的设置就被覆盖了;

解决方案:在2中图片的“忽略这些主机与域的代理设置”中添加对应的域名就可以了,但是不够完美,每次关闭代理或关闭软件重启后,新增的域名就没了,还是默认这些;

5、V2RayX 和 ClashX 哪个更好用?

最近刚发现了V2RayX这个软件,个人觉得比ClashX好用,设为PAC模式后,内网和本地页面都能直接访问了,无需再做什么处理,而且服务器里边,有个“Use All”的选项,不用再单独选择服务器了,应该是哪个可用就用哪个,其他几个代理软件里,都没有类似的功能;我觉得这个功能优先级应该很高才对,在服务器不稳定的时候非常实用,没有这个功能的话, 当前服务器不可用时,还要手动去测试连通性、切换服务器,太二了;

pac模式下,对系统代理的设置如下图,全局模式下的设置和ClashX一样

6、手机如何连电脑上的 Charles 服务器?

手机设电脑为代理服务器,首先要保证这两台设备在同一网络中

电脑端

1、打开Charles — 菜单栏 — “Proxy” — “Proxy settings” — “Proxies” — “Port”,这里是设置端口号的,默认应该是8888,下一步会用到;

* 菜单栏 — “Proxy” — 选中“mac Proxy”,这个选项是将本电脑的请求指向代理服务器,即电脑上的软件请求都会发送给 Charles,如果只是想给手机设代理服务器,这个可以不选

手机端

1、“设置” — “无线局域网” — 点击当前连接网络 — 滑到最下面 — “配置代理” — “手动” — 输入服务器和端口号(8888) — 点击右上角“存储”;

一定不要忘了点右上角的“存储”,之前IOS 12版本中,没有存储按钮,输入服务器和端口号,直接返回就保存了,IOS 13中必须要点“存储”,用到现在了偶尔还是会忘保存就直接返回;

2、手机上随便打开一个页面,刷新,电脑端Charles会有一个提示框,大体意思是是否允许这个设备(手机)连接本代理服务器,选“Allow”就可以了;

走完这个流程后,Charles就可以捕获请求了,而且可以查看http类型的请求和响应(主要是响应)的具体内容,https的响应是看不到的(乱码);

7、Charles 如何代理 HTTPS 请求?

需要在 6 的基础上继续设置

电脑端 Charles 操作

1、菜单栏 — “Proxy” — “SSL Proxying Settings” — 勾选“Enable SSL Proxying”;

2、点下面的添加按钮,host中输入 *,点击OK,再点击OK;这一步是设置要捕获什么域名+端口下的https页面,即你想看到哪个域名+端口下的响应数据;*表示全部,也可以单独设置域名 m.baidu.com 之类的;

3、菜单栏 — “Help” — “SSL Proxying” — “install Charles Root Certificate on a Mobile Device or Remote Browser”,如下图,意思是手机配置 192.168.2.139:8888,在浏览器输入 chls.pro/ssl 安装证书;

手机端

完成了电脑端的操作,手机上的http页面可以正常访问,打开https页面,就会提示“打不开网页,因为无法与服务器建立安全连接”之类的信息;所以手机上还需要做一些操作:

1、打开Safari浏览器,输入刚才的 chls.pro/ssl,会提示安装描述文件,点允许;

2、安装完成后,会提示到设置中查看描述文件,此时打开设置,个人信息下边有一个“已下载描述文件”,如下图,点击 — 安装 — 输入密码 — 安装 — 安装,签名那变成绿色的“已验证”就可以了;

3、“设置” — “通用” — “关于本机” — 滑到最下面 — “证书信任设置” — 有个Charles Proxy CA 的证书 — 开启 — 继续;这一步一定不要忘记;

开启了第3步的证书,手机上的https页面就又能访问了,而且电脑端也能看到服务器的响应信息;

8、手机上如何配置 hosts?

手机上配置hosts的需求一般是要在手机上测试页面,但是页面的接口地址是通过配hosts换成域名访问的,电脑上直接用“SwitchHosts!”等软件配置对应的hosts即可,但手机上无法直接配置,需要走代理服务器曲线救国;具体步骤如下:

1、用“SwitchHosts!”等软件配置好对应的 hosts;

2、打开Charles,按照问题6中的步骤操作电脑端和手机端,设置完成就可以了;

这里一定要注意顺序,先配置hosts,再开Charles,否则不生效,应该是Charles启动时,把本地hosts配置信息读取到,运行过程中就不再更新了;

如果这篇文章对你有用,可以点击下面的按钮告诉我

11

发表回复