本文主要是整理在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配置信息读取到,运行过程中就不再更新了;