blog
blog copied to clipboard
macOS终端使用代理网络
环境:
- macOS
- 网络代理服务器(购买或自行搭建)
- 网络代理客户端(Shadowsocks、ClashX等)
macOS 下的终端默认是不走系统代理的,即使我们已经打开了网络代理客户端的"全局代理"。
一、开启全局代理模式
打开网络代理客户端,并打开全局代理模式。
二、配置终端代理
在终端命令行中,配置代理。
以使用 ClashX 代理客户端为例,HTTP 代理端口为 7890 ,Socks5 代理端口为 7891。端口是可修改的。HTTP 代理或 Socks5 代理,配置时选其中一种复制到终端即可。
点击 ClashX => 复制终端代理命令,即可复制到一下命令:
# 配置http访问的
export https_proxy=http://127.0.0.1:7890
# 配置https访问的
export http_proxy=http://127.0.0.1:7890
# 配置http和https访问
export all_proxy=socks5://127.0.0.1:7891
这种方法只在当前终端窗口有效,关闭或新建终端窗口后将实效。
或执行 $ export all_proxy=''
使其失效。
或在网络代理客户端中关闭全局代理模式,使其失效。
如果想长期有效,请把以上命令添加到 Shell 配置文件 .bash_profile
或者 .zshrc
,然后执行 $ source ~/.bash_profile
或者 $ source ~/.zshrc
使配置生效。
附:局域网内配置其他电脑( macOS / Linux )终端的网络代理:
- 网络代理客户端(这里是ClashX)设置“全局”连接模式,打开“允许局域网连接”;
-
$ export all_proxy=socks5://运行着网络代理客户端的电脑的IP地址:7891
附:局域网内共享电脑的网络代理给其他设备:
这里已经配置好网络代理的宿主电脑,使用的网络代理客户端是 ClashX 。 在局域网内,把宿主电脑的网络代理共享给其他设备。
- iPhone => 设置 => wifi => 配置代理 => 手动模式 => 服务器-运行着ClashX电脑的IP地址 => 端口7890 。
- Ubuntu => System Setting => Network => Network proxy => 运行着ClashX电脑的IP地址 + 端口7890/7891 。
三、验证
对比配置终端代理前后的 IP 和 归属地址:
$ curl cip.cc # 查询IP、归属地址、运营商
alias proxy='export all_proxy=socks5://127.0.0.1:7891'
alias unproxy='unset all_proxy'
alias ip='curl cip.cc'
你好👋,我配置里面是如上设置的,我使用的是IPLC线路Proxy之后还是本机IP,请问我有什么地方做的不对呢?我以前是使用的SSR这样是没问题的,现在切换到了ClashX。
hello,建议检查一下是否开了全局代理,如果没开全局,确实会继续显示本机 IP 的。
如果还是不行,因为我不知道你具体使用的方案,建议可以完全按上面的流程走一遍。
附一张图:
有什么办法可以使用规则判断模式来使终端走代理么,因为不想一直在全局和规则上切换
@mipawn 理论上,都是要先开全局的。 如果不想一直开着全局,可以试一下,运行 $ curl cip.cc 确定终端已经在走代理了,然后把全局改为规则,再次运行 $ curl cip.cc 看看此时终端是不是还在走代理。
@FatliTalk 按照这个步骤试了一下,只有在全局模式下才能使终端处于代理模式之下。搜了一下相关话题,也没找到解决方案,不知是否有新的办法能够在规则模式下使终端处于代理模式?谢谢。
@tzayuan 需要开全局的,至少我是这样。
@FatliTalk 感谢回复。我又测试了一下,发现规则模式下的终端代理是按照规则模式进行代理的。如把cip.cc
加入规则中后,执行curl cip.cc
就可以返回正确的代理后的信息。通过这种方式,可以不完美的实现终端的规则模式下代理,只是可能漏掉一些终端访问地址的规则导致这些访问地址是通过本地网络进行访问的。
但同时我产生了两个新的疑问:
-
当我在规则中加入
cip.cc
后,通过执行curl cip.cc
的确可以返回代理后的信息,但是我发现执行curl www.cip.cc
则返回的还是我的本地网络的信息,因此推测规则中的cip.cc
并不包含***.cip.cc
,对此还是存疑的; -
同时我在浏览器中访问
cip.cc
,自动返回的是www.cip.cc
,这里是否应理解为cip.cc
主机配置了自动返回www.cip.cc
为访问该主机的默认返回页面?
@tzayuan 对于疑问1,我认为你的推断正确,即需要配置完整的URL。已经肉翻,无法测试验证。 对于疑问2,你打开浏览器的 Developer Tools 访问 cip.cc 可以看到被 301 重定向到 www.cip.cc 了。
alias proxy='export all_proxy=socks5://127.0.0.1:7891' alias unproxy='unset all_proxy' alias ip='curl cip.cc'
你好👋,我配置里面是如上设置的,我使用的是IPLC线路Proxy之后还是本机IP,请问我有什么地方做的不对呢?我以前是使用的SSR这样是没问题的,现在切换到了ClashX。
最后是怎么解决的呢,我和你一样的情况
@HelperInCa 必须在全局规则
下才能生效
你可以直接在ClashX中配置规则cip.cc,因为默认cip,.cc 不在规则中,所以是始终直连的
alias proxy='export all_proxy=socks5://127.0.0.1:7891' alias unproxy='unset all_proxy' alias ip='curl cip.cc'
你好👋,我配置里面是如上设置的,我使用的是IPLC线路Proxy之后还是本机IP,请问我有什么地方做的不对呢?我以前是使用的SSR这样是没问题的,现在切换到了ClashX。
最后是怎么解决的呢,我和你一样的情况
应该是 dns 被污染了,试试这个指令,让 hostname 在代理处进行解析
curl --socks5-hostname localhost:1080 cip.cc
curl --socks5-hostname localhost:1080 cip.cc
还是本机
curl --socks5-hostname localhost:1080 cip.cc
还是本机
对于这个 cip.cc 这个域名,不管是本地解析域名还是代理解析域名,都会得到同样的 IP 地址,根本原因在 cip.cc 这个域名在流量分流走代理的时候是否加到了代理规则里面。
你可以测试下,先启动终端代理(就是 export xxx
),然后把 cip.cc 这个域名显式地写到代理规则里,或者利用 curl -v cip.cc
查看解析出来的 IP 地址,把 IP 地址加入到代理规则里,最后再 curl cip.cc
就会发现走代理了。
最后说一下,其实这个例子看不出来是否有 DNS 污染的问题,因为不管是本地解析域名还是代理解析域名,都是同样的 IP 地址,但是这个问题实质上是存在的。即使开启了代理服务,但是由于终端一些工具是先解析域名,再代理转发,导致会出现问题,具体可以用这两个指令测试下:
-
curl -v https://www.google.com --socks5-hostname localhost:1080
-
curl -v https://www.google.com
alias proxy='export all_proxy=socks5://127.0.0.1:7891' alias unproxy='unset all_proxy' alias ip='curl cip.cc'
你好👋,我配置里面是如上设置的,我使用的是IPLC线路Proxy之后还是本机IP,请问我有什么地方做的不对呢?我以前是使用的SSR这样是没问题的,现在切换到了ClashX。
最后是怎么解决的呢,我和你一样的情况
应该是 dns 被污染了,试试这个指令,让 hostname 在代理处进行解析
curl --socks5-hostname localhost:1080 cip.cc
1.bash_profile Alias
alias proxy='export https_proxy=http://127.0.0.1:7890 export http_proxy=http://127.0.0.1:7890 export all_proxy=socks5://127.0.0.1:7891'
alias unproxy='unset https_proxy unset http_proxy unset all_proxy'
alias ip='curl cip.cc'
bash_profile 设置加入HTTP 和 HTTPS
2.ClashX 配置文件
在ClashX的配置文件中加入 - 'DOMAIN-SUFFIX,cip.cc,Proxy' 这一步的设置是可以走规则判断,不用使用全局模式
尝试了所有方案,curl cip.cc 最终返回的都是本地的。