Skip to content

Mac OSX终端走shadowsocks代理 #18

@mrdulin

Description

@mrdulin

shadowsocks设置为:

  • 打开shadowsocks
  • 自动代理模式
  • 服务器(香港阿里云)

zsh作为说明

~ vim ~/.zshrc  

添加如下代理配置:

# proxy list
alias proxy='export all_proxy=socks5://127.0.0.1:1080'
alias unproxy='unset all_proxy'

:wq保存退出

~ source ~/.zshrc

使用proxy前先查看下当前的ip地址:

~ curl ip.cn
当前 IP:112.64.xxx.xx 来自:上海市 联通

或者

~ curl cip.cc
IP	: 140.206.97.42
地址	: 中国  上海

数据二	: 上海市 | 联通

URL	: http://www.cip.cc/140.206.97.42

执行:

~ proxy
➜  ~ curl ip.cn
当前 IP:47.89.xx.xxx 来自:香港特别行政区 阿里云

如果ip.cn不能用,可以换个类似的站点查询

~ curl cip.cc
IP	: 45.78.47.19
地址	: 美国  加利福尼亚

数据二	: 美国 | 加利福尼亚州洛杉矶市 IT7 Networks

URL	: http://www.cip.cc/45.78.47.19

没问题,终端走了代理,brew update顺畅了- -

如果不需要走代理,执行:

~ unproxy   
➜  ~ curl ip.cn
当前 IP:112.64.xxx.xx 来自:上海市 联通

部分网络用curl cip.cc命令获取到的是国内网络运营商的IP,可以直接curl google.com测试是否代理成功。

设置代理成功:

~ curl google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

没有设置代理:

~ curl google.com
curl: (52) Empty reply from server

proxychains-ng

~ brew install proxychains-ng
Updating Homebrew...

由于OSX升级后的SIP限制,在proxychains.conf文件中设置sssocks5代理,无效了。解决办法是在重启后,在Recovery mode下关闭SIP,但对于强迫症来说,不能忍(安全问题)。详见
rofl0r/proxychains-ng/issues/78

➜  ~ proxychains4 curl ip.cn
[proxychains] config file found: /usr/local/Cellar/proxychains-ng/4.12/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.12/lib/libproxychains4.dylib
当前 IP:112.64.xxx.xx 来自:上海市 联通

配置文件/usr/local/Cellar/proxychains-ng/4.12/etc/proxychains.conf:

 111 [ProxyList]
 112 # add proxy here ...
 113 # meanwile
 114 # defaults set to "tor"
 115 #socks4     127.0.0.1 9050
 116 socks5  127.0.0.1 1080

更新2017.07.21

osx下使用brew安装google-chrome时:

% brew cask install google-chrome
==> Satisfying dependencies
==> Downloading https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg

curl: (6) Could not resolve host: dl.google.com
Error: Download failed on Cask 'google-chrome' with message: Download failed: https://dl.google.com/chrome/mac/stable/GGRO/googlechrome.dmg
Error: Install incomplete.

通过设置terminalhttp代理解决:

% export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;

更新:

我们可以在shadowsocks server端查看日志:

sudo tail -f /var/log/shadowsocks.log

日志如下图:

用其中一条日志做说明:

2019-08-22 17:02:14 INFO     connecting mtalk.google.com:5228 from 58.247.150.247:61603

含义是:时间戳 日志级别 connecting 连接的目标服务器URL地址 from 客户端地址:端口

客户端地址就是我本机了,通过本机启动的shadowsocks客户端连接到shadowsocks服务端。

查看本机外网IP:

☁  quick-start [master] ⚡  curl ip.gs
Current IP / 当前 IP: 58.247.150.247
ISP / 运营商:  ChinaUnicom
City / 城市: Shanghai Shanghai
Country / 国家: China
IP.GS is now IP.SB, please visit https://ip.sb/ for more information. / IP.GS 已更改为 IP.SB ,请访问 https://ip.sb/ 获取更详细 IP 信息!
Please join Telegram group https://t.me/sbfans if you have any issues. / 如有问题,请加入 Telegram 群 https://t.me/sbfans 

  /\_/\
=( °w° )=
  )   (  //
 (__ __)//

Current IP: 58.247.150.247,和shadowsocks服务端日志打印出来的客户端地址一致

问题:为什么terminal终端不能使用系统代理(WIFI网络设置中的HTTP,SOCKS代理设置)?

答:https://apple.stackexchange.com/questions/333672/proxy-is-configured-correctly-i-guess-appstore-and-safari-work-fine-but-net

问题:为什么设置了http_proxy等环境变量,git, curl等命令行工具可以魔法上网了?

答:git,wget, curl,brew等cli,甚至GCP提供的gcloud sdk内部都会读取http_proxy, https_proxy, all_proxy等系统环境变量:

仅仅是应用程序运行时环境变量,没有魔法。比如Node.js应用程序,可以使用process.env.http_proxy来读取程序运行时环境变量。其他语言比如Go, Java, Python, PHP都有各自的内置标准库API或全局变量(比如Node.js的process)来读取系统环境变量。git, wget, curl, brew, gcloud和我们自己写的应用程序一样,没什么特殊的。

node         
Welcome to Node.js v14.16.0.
Type ".help" for more information.
> process.env.http_proxy
'http://127.0.0.1:7890'

参考:


Flag Counter

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions