Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mac OSX终端走shadowsocks代理 #18

Open
mrdulin opened this issue Apr 8, 2017 · 90 comments
Open

Mac OSX终端走shadowsocks代理 #18

mrdulin opened this issue Apr 8, 2017 · 90 comments

Comments

@mrdulin
Copy link
Owner

@mrdulin mrdulin commented Apr 8, 2017

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 来自:上海市 联通

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服务端日志打印出来的客户端地址一致

参考:


Flag Counter

@Huang-Libo
Copy link

@Huang-Libo Huang-Libo commented Oct 26, 2017

@mrdulin
执行 proxy 之后, curl ip.cn 的结果:
curl: (7) Failed to connect to 127.0.0.1 port 1080: Connection refused

在前面加上 sudo 后, 获取的 ip 还是本地运营商的. 这是怎么回事呢?

@mrdulin
Copy link
Owner Author

@mrdulin mrdulin commented Oct 27, 2017

@Huang-Libo 请确保本地代理服务器的地址和端口是127.0.0.1:1080

请打开ss,进行代理服务器设置
我试了下,退出ss,就是你这个错误,因为本地代理服务器没有启动。

@Huang-Libo
Copy link

@Huang-Libo Huang-Libo commented Oct 27, 2017

@mrdulin
设置是对的, 执行 proxy 之前都能看到结果, 执行 proxy 之后就报错, 有点奇怪.

@samhou1988
Copy link

@samhou1988 samhou1988 commented Nov 7, 2017

我也遇到了类似的情况,设置了 shadowsocks 的 socks 代理地址为: 127.0.0.1 端口为 1080,重启下 shadowsocks 后执行 proxy 成功

@Huang-Libo
Copy link

@Huang-Libo Huang-Libo commented Nov 9, 2017

@samhou1988 其实我发现使用 proxychains-ng 的时候使用 brew 版本的程序就可以了

@Ericva
Copy link

@Ericva Ericva commented Nov 20, 2017

@mrdulin 请教楼主几个问题。
1.本地的ss只能配置远端server的ip和端口号吧?本地代理服务器的ip和port也就是127.0.0.1和1080是不是不能自己配置?
2.执行proxy之后,显示的是”curl: (52) Empty reply from server“。
3.我看楼主一开始的测试是没有安装proxychains-ng这个的,是不是也先不需要安装这个?
麻烦楼主帮忙看下~

@mrdulin
Copy link
Owner Author

@mrdulin mrdulin commented Nov 21, 2017

@Ericva
1.本地的ss是客户端,你的VPS上的ss是服务端,客户端的服务器配置中,地址和端口填写你VPS的ip地址和ss服务端运行后的端口号,这样客户端就连接到你的vps的ss服务了。
image
ss客户端启动后,可以修改客户端服务的端口号,不一定是1080,使用switchomega,proxifier等代理切换软件时,指定ss的ip和端口是客户端的。
image

2.你的服务器配置ip或者端口不正确,客户端ss没有链接到VPS上的ss服务端,或者是你VPS上的ss服务端没有启动或是出了问题。如下图,我随便输入了一个ip和端口,执行proxy后,结果显示“curl: (52) Empty reply from server”

3.proxychains-ng和通过在.zshrc或者.bashrc中指定代理alias是两种终端走代理的方式,没有依赖关系。

@Ericva
Copy link

@Ericva Ericva commented Nov 21, 2017

谢谢楼主快速的解答~ 关于2,我ss是配置好了的,chrome/safari都可以科学上网,感觉应该是其他的坑,但是还不知道是啥原因。/(ㄒoㄒ)/~~

@dasheng523
Copy link

@dasheng523 dasheng523 commented Nov 25, 2017

跟Ericva碰到的问题一样。chrome/safari都可以,但终端上只能访问国内网站。

@p0sec
Copy link

@p0sec p0sec commented Dec 29, 2017

感谢,终端一直代理不出去,这次终于好了

@liushazm
Copy link

@liushazm liushazm commented Jan 17, 2018

非常感谢,代理已经能显示外国的地址,但是ping www.google.com 的时候还是ping不通,请问知道为什么吗

@1057437122
Copy link

@1057437122 1057437122 commented Jan 20, 2018

@liushazm 我的也是这样,求解~

@iroclee
Copy link

@iroclee iroclee commented Jan 23, 2018

谢谢楼主,解决了我困扰多时的问题,感谢分享

@wuyachao
Copy link

@wuyachao wuyachao commented Feb 23, 2018

@liushazm 代理已经显示国外的Ip,但是还是ping不通,请问你解决了吗

@wentaocn
Copy link

@wentaocn wentaocn commented Feb 24, 2018

我的curl ip.cn在没有使用代理的情况都没法用,很奇怪。
报错类似@Huang-Libo :

curl: (7) Failed to connect to ip.cn port 80: Operation timed out

macOS 10.13.3, iTerm2

@Huang-Libo
Copy link

@Huang-Libo Huang-Libo commented Feb 24, 2018

@liushazm
ss代理是基于tcp或者udp协议,而ping是走的icmp协议因此在ss下不能ping通google

参考:
https://stackoverflow.com/questions/5274934/use-ping-through-socks-server

@mrdulin
Copy link
Owner Author

@mrdulin mrdulin commented Mar 9, 2018

@liushazm @1057437122

@Huang-Libo 说的没错

网络七层协议(OSI):7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层

上层模型依赖下层模型

  1. ping命令使用的ICMP协议,作用在OSI模型第3层——网络层(IP层)

使用wireshark抓包查看ping命令发送给目标地址的数据包
image

  1. SOCKS作用在OSI模型的第5层——会话层

  2. HTTP、FTP、SMTP作用在OSI模型第7层——网络层

ss支持的代理协议是socks(5 会话层)和http(7 应用层),最终都依赖于TCP(4 传输层)和IP协议(3 网络层),发送tcp数据包,但并不能代理第3层——网络层

本机与ss代理服务器之间发送的tcp数据包
image

@liushazm
Copy link

@liushazm liushazm commented Mar 15, 2018

@Huang-Libo @mrdulin 非常感谢两位大神
@1057437122 @wuyachao 上面两位大神解决了

@usercao
Copy link

@usercao usercao commented Mar 19, 2018

默认终端proxy没有这个命令,是不是要安装什么软件才能执行这个?

@mrdulin
Copy link
Owner Author

@mrdulin mrdulin commented Mar 19, 2018

@usercao 为了方便,设置的命令别名

执行proxy就表示执行export all_proxy=socks5://127.0.0.1:1080

@devSC
Copy link

@devSC devSC commented Mar 29, 2018

新装的proxychains-ng 配置文件路径在: /usr/local/etc/proxychains.conf

@ziqinH
Copy link

@ziqinH ziqinH commented Mar 30, 2018

@liushazm 请问 ping 不通是你再怎么解决的?

@Jay54520
Copy link

@Jay54520 Jay54520 commented Apr 7, 2018

all_proxy 这个环境变量的作用是什么?谷歌了一下没有找到答案。

与 MacOS 网络偏好中的代理配置有什么区别?

@xiebruce
Copy link

@xiebruce xiebruce commented Apr 19, 2019

@luvvien 有卖肯定有买的,不然卖不出去就不会卖了,不过有些服务商例如bandwango好像已经不支持openvz了,但仍然有很多不知名的在卖openvz机器,所以到底有多少人在用也不好说,我就有个OVZ机器,kcp加持油管1080p毫无压力。

@luvvien
Copy link

@luvvien luvvien commented Apr 19, 2019

@luvvien 有卖肯定有买的,不然卖不出去就不会卖了,不过有些服务商例如bandwango好像已经不支持openvz了,但仍然有很多不知名的在卖openvz机器,所以到底有多少人在用也不好说,我就有个OVZ机器,kcp加持油管1080p毫无压力。

市场份额太小了,可以忽略不计。美国节点、不加速1080也没压力

@xiebruce
Copy link

@xiebruce xiebruce commented Apr 19, 2019

@luvvien 美国机不加速还能1080p没压力, 那只能说你买的机器太好了,另外,BBR也是加速,你没装BBR?

@wi1dcard
Copy link

@wi1dcard wi1dcard commented Apr 19, 2019

@luvvien outline有两个缺点:

  • 1、服务器需要KVM装docker,而现在很多人还是买的小鸡OVZ
  • 2、它已经是VPN而不是普通的代理了,它是全局走VPN了,访问国内网站也绕地球一大圈(有些人服务器在米国),这样肯定会导致访问国内服务变慢。
    基于这样的原因,虽然我安装了,也能随时打开用,但我非常少用它,平时还是用着有pac的ss-NG爽点,毕竟还集成了kcptun可以加速,commandLine最多像上边说的,弄个开关切换一下。

@xiebruce Outline 依旧是 Shadowsocks 内核,并不是 VPN,不要误导。全局 != VPN。

@wi1dcard
Copy link

@wi1dcard wi1dcard commented Apr 19, 2019

其实 Outline 魔改的 Shadowsocks-go server 有个好处是可以用 Prometheus + Grafana 监控指标... 比较赏心悦目。

@luvvien
Copy link

@luvvien luvvien commented Apr 19, 2019

@luvvien outline有两个缺点:

  • 1、服务器需要KVM装docker,而现在很多人还是买的小鸡OVZ
  • 2、它已经是VPN而不是普通的代理了,它是全局走VPN了,访问国内网站也绕地球一大圈(有些人服务器在米国),这样肯定会导致访问国内服务变慢。
    基于这样的原因,虽然我安装了,也能随时打开用,但我非常少用它,平时还是用着有pac的ss-NG爽点,毕竟还集成了kcptun可以加速,commandLine最多像上边说的,弄个开关切换一下。

@xiebruce Outline 依旧是 Shadowsocks 内核,并不是 VPN,不要误导。全局 != VPN。

是的,这位兄台说得对,刚刚忘记补充了,你用outline搭建的依然可以用ss client连接。

@xiebruce
Copy link

@xiebruce xiebruce commented Apr 19, 2019

@wi1dcard
我是根据电脑里的显示来看的,你看用outline的时候,它这些选项都说是vpn,旁边还写着vpn application:outline
image

而用ss-NG的时候,自动代理选的是我连的WIFI→代理→Automatic Proxy Configuration,全局代理是直接选的Socks5 Proxy,手动的话是哪个都没选,也就是要我们手动自己选,还有http和https其实根本就不支持的,只是ss-NG自动开了一个privoxy把http和https请求转到socks5上:
image

另外,从outline官网也说它是vpn:
image

根据以上,我认为outline就是一个VPN软件,只不过用的socks5协议。

@xiebruce
Copy link

@xiebruce xiebruce commented Apr 19, 2019

@

@luvvien outline有两个缺点:

  • 1、服务器需要KVM装docker,而现在很多人还是买的小鸡OVZ
  • 2、它已经是VPN而不是普通的代理了,它是全局走VPN了,访问国内网站也绕地球一大圈(有些人服务器在米国),这样肯定会导致访问国内服务变慢。
    基于这样的原因,虽然我安装了,也能随时打开用,但我非常少用它,平时还是用着有pac的ss-NG爽点,毕竟还集成了kcptun可以加速,commandLine最多像上边说的,弄个开关切换一下。

@xiebruce Outline 依旧是 Shadowsocks 内核,并不是 VPN,不要误导。全局 != VPN。

是的,这位兄台说得对,刚刚忘记补充了,你用outline搭建的依然可以用ss client连接。

这个我知道,我也用着呢,因为它也是socks5协议的,但用socks5协议并不能代表它就不是VPN,根据上边我说的,我认为outline就是VPN。

@wi1dcard
Copy link

@wi1dcard wi1dcard commented Apr 19, 2019

@

@luvvien outline有两个缺点:

  • 1、服务器需要KVM装docker,而现在很多人还是买的小鸡OVZ
  • 2、它已经是VPN而不是普通的代理了,它是全局走VPN了,访问国内网站也绕地球一大圈(有些人服务器在米国),这样肯定会导致访问国内服务变慢。
    基于这样的原因,虽然我安装了,也能随时打开用,但我非常少用它,平时还是用着有pac的ss-NG爽点,毕竟还集成了kcptun可以加速,commandLine最多像上边说的,弄个开关切换一下。

@xiebruce Outline 依旧是 Shadowsocks 内核,并不是 VPN,不要误导。全局 != VPN。

是的,这位兄台说得对,刚刚忘记补充了,你用outline搭建的依然可以用ss client连接。

这个我知道,我也用着呢,因为它也是socks5协议的,但用socks5协议并不能代表它就不是VPN,根据上边我说的,我认为outline就是VPN。

@xiebruce VPN 有个很重要的特性是你能直接访问同一个虚拟内网内的其它设备,这也是它设计的初衷。虽然我没有实际求证,但我认为 Outline 并不具备这样的功能。你看到的 VPN 选项,只不过是 Outline 的 macOS 客户端为了转发系统流量而在本地启动的 VPN 服务端,你连接到的并不是远端服务器。ShadowsocksX-NG 也是一样,只不过使用本地 Socks5 服务代替了 VPN 而已。

@xiebruce
Copy link

@xiebruce xiebruce commented Apr 20, 2019

@wi1dcard 对,确实像你说的这样,它客户端按VPN的方式做了,但本身应该是不具备真正VPN的功能。

@yunkunrao
Copy link

@yunkunrao yunkunrao commented May 25, 2019

@liushazm
ss代理是基于tcp或者udp协议,而ping是走的icmp协议因此在ss下不能ping通google

参考:
https://stackoverflow.com/questions/5274934/use-ping-through-socks-server
👀这个comment,真的是及时雨。

@AlphaDu
Copy link

@AlphaDu AlphaDu commented Jun 23, 2019

求助。。貌似这样任然不成功。虽然cip.cc显示成功了,但是看linux的lastlogin还是老的ip。

@liushazm
Copy link

@liushazm liushazm commented Jun 26, 2019

@yunkunrao 这个确实可以,谢谢

@xiebruce
Copy link

@xiebruce xiebruce commented Jul 15, 2019

@mrdulin 问大佬一个问题,为什么终端的命令不走全局代理?你前面说ping不走是因为它是ICMP,可是git pull 这样的呢?只要是应用层协议,SOCKS5就能代理吧?毕竟它在应用层之下。

@Navven
Copy link

@Navven Navven commented Dec 12, 2019

非常感谢,代理已经能显示外国的地址,但是ping www.google.com 的时候还是ping不通,请问知道为什么吗

ping不通 因为ping 是ICMP,你不能通过ping 来判断这个问题

@zycode1561
Copy link

@zycode1561 zycode1561 commented Feb 17, 2020

curl: (7) Received invalid version in initial SOCKS5 response.运行curl cip.cc 出现了这个东西是怎么回事啊

@Interesting6
Copy link

@Interesting6 Interesting6 commented Feb 25, 2020

alias proxy='export socks5_proxy=socks5://127.0.0.1:1086;export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;'
alias unproxy='unset socks5_proxy http_proxy https_proxy'

这样可以把socks5和http以及https全都代理。

有用!
没弄http(s)代理前,curl www.google.com 时报错
curl: (52) Empty reply from server
用后就解决了

@phpmaple
Copy link

@phpmaple phpmaple commented Mar 22, 2020

proxychains4 brew install
并不能让 brew install 走代理 为什么呢?
只有设置 export http proxy这种才能让 brew 走代理

@VisonM
Copy link

@VisonM VisonM commented Apr 7, 2020

这里的人说话太好听了吧,超喜欢这里的[玫瑰]

@xgqfrms
Copy link

@xgqfrms xgqfrms commented Jun 19, 2020

image


what's wrong with that?

$ vim ~/.zshrc  
# SSR proxy alias ⚠️  1086 端口号 

# 添加如下代理 alias 配置(proxy 和 unproxy)
# alias proxy='export all_proxy=socks5://127.0.0.1:1080'

# proxy 端口根据实际设置, 如 1086
$ alias proxy='export all_proxy=socks5://127.0.0.1:1086'

$ alias unproxy='unset all_proxy'
# 保存退出
$ :wq!

# 刷新
$ source ~/.zshrc

image

@CrazyCatZhang
Copy link

@CrazyCatZhang CrazyCatZhang commented Sep 4, 2020

@xgqfrms I also set it to no effect, have you solved it?

@qu-peng
Copy link

@qu-peng qu-peng commented Mar 16, 2021

按照楼主写的配置好后,输入proxy命令后,执行curl cip.cc,还是显示国内地址及运营商,这是为什么?但是我感觉执行proxy后,终端下载东西确实快了很多,如何判断终端代理是否配置成功呢?

@xiebruce
Copy link

@xiebruce xiebruce commented Mar 16, 2021

按照楼主写的配置好后,输入proxy命令后,执行curl cip.cc,还是显示国内地址及运营商,这是为什么?但是我感觉执行proxy后,终端下载东西确实快了很多,如何判断终端代理是否配置成功呢?

curl https://www.google.com 就行了,如果是一大片,那说明成功(因为那一大片是google首页的html源码,如果只有一行,那一行就是报错,说明没走代理,无法访问google)

@zhuziyi1989
Copy link

@zhuziyi1989 zhuziyi1989 commented Mar 25, 2021

非常感谢,代理已经能显示外国的地址,但是ping www.google.com 的时候还是ping不通,请问知道为什么吗

你需要 tcping 工具 ,tcp 与 icmp 的区别~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet