命令行+虚拟机 代理设置方案汇总
这里总结了 macOS 环境下命令行代理配置方案,使用的代理软件是 ClashX
不过应该对于大多数代理软件都是可以的;还介绍了 VMware 中的 Ubuntu 虚拟机的系统和命令行代理方式。
- 对于 Windows 虚拟机来说,实现系统代理的方法和 Ubuntu 是类似的,对于 Windows 环境下的命令行代理方式,可参考 给 Windows 的终端配置代理 一文;用不来 Windows 就不去尝试了。
VMware 虚拟机代理设置
【20201101 更新:一直以来也被虚拟机如何使用代理的问题搞得很头痛,最近突然想通了,总结如下。】
这篇 文章 介绍了在 VMware 上的 Ubuntu 的系统代理配置方法。
- 先在本机上使用
ifconfig
(win 下则是ipconfig /all
)查看VMware 生成的虚拟网卡,名字一般是vmnet1
等形式,记下它的地址; - 在宿主机上的代理软件中打开「允许来自局域网的连接」选项,记住端口号,例如在 ClashR 中的 HTTP/Socks5 的混合端口号为 7890;
- 打开虚拟机,在网络设置中直接可以配置系统带来,将不同协议的代理内容,分别填上前面两步得到的地址和端口号即可;
打开浏览器,不出意外现在可以使用宿主机上的代理服务了。
当然,这是 Terminal 还是无法使用代理的;但我灵光一闪,上面的流程,核心是在虚拟机上使用宿主机(本地网络)上的代理服务,那么对于虚拟机命令行的代理,和宿主机上的命令行配置代理是一样的。
尝试了一下思路正确,具体配置的命令和下面一节的代码基本一致,只需要将地址 127.0.0.1
修改为在上面第一步中得到的 VMware 虚拟硬件地址即可;另外,由于我在 Ubuntu 上没有安装 oh my zsh ,因此将配置内容放在 ~./bashrc
中,修改好之后 source ~/.bashrc
即可使用;可以尝试 curl www.google.com
。
另外,试了一下在 Windows 虚拟机中也可以进行相应设置,实现系统代理。
【对于为终端设置代理,自己走了很多弯路,最终发现简单地设置 http_proxy, https_proxy, all_proxy 即可解决大多数问题(用的是 ClashX),也不知道之前为啥出了那么多的乱子。最终的解决方案参考 此文,仅修改了 .zshrc
和 SSH 配置;这样可完美解决大多数问题了;后面的对 git 单独配置代理,修改 Homebrew 源,proxychains 等方案均已不用,仅供参考。】
终端代理配置
参见: MAC 配置终端(Shell)走代理,Git 走代理,加速网络
在执行一些非 ssh 协议的命令,比如 http(s) 协议的 curl 等等,我们也想走代理,这个时候怎么办呢?
拿我电脑举例子来讲,我的终端用的是 oh my zsh,那么打开 zsh 的配置文件
vi ~/.zshrc
在里面添加如下内容:
1 | export https_proxy=http://127.0.0.1:7890 |
另外,该文也介绍了 SSH(包括借由 SSH 的 git 服务)的配置方案,和下一章节是一致的
1 | #进入 ssh 配置目录 |
配置如下
1 | Host * |
git clone 速度慢的问题
并不需要怎么复杂,上面的命令行代理配置成功即可。
是一个老生常谈的问题了,参见知乎上的一个问题。看到的解决方案有:1. 修改 hosts;2. 换用国内的镜像网站 http://github.com.cnpmjs.org 和 http://git.sdut.me/ 等(显然都不优雅)。
更好的方案显然是采用本地的代理,然而知乎热门的那个回答试了下居然不行;直到看到 GitHub 上的 一个回答,发现原来是在本地代理端口上没有加引号;设置完毕后可从 4k 提速到 2m 左右👍。
注意有两种下载形式
HTTP 形式:
git clone https://github.com/owner/git.git
SSH 形式:
git clone git@github.com:owner/git.git
对于HTTP 形式,可以设置代理的代码是
1 | git config --global http.proxy "http://127.0.0.1:8080" |
若要换成 socks5(如 Shadowsocks) 直接将引号内的地址修改成相应形式即可。
还可以仅代理 GitHub:
1 | git config --global http.https://github.com.proxy "socks://127.0.0.1:7890" |
取消代理
1 | git config --global --unset http.proxy |
另外,发现 git 的配置文件在 ~/.gitconfig
,上述代理的配置等价于在该文件最后添加
1 | [http "https://github.com"] |
- SSH 形式的,可以修改
~/.ssh/config
1 | # 必须是 github.com |
Homebrew 国内源
【事实上,采用 all_proxy 代理之后 Homebrew 下载速度已经非常好了,也就没有必要进行换源这样的「下策」,相关讨论参见 https://www.logcg.com/archives/1617.html ;因此下面的方案仅供参考。】
- 清华源 https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/;
- 中科大源 https://lug.ustc.edu.cn/wiki/mirrors/help/brew.git/。
另外,可参考这篇文章: 为brew/git/pip设置代理&为brew正确换源终极版 。
重新安装 Homebrew
在调试 mbp 的过程中不知为为啥 Homebrew 验证错误,最后通过重装的方式解决了,参考 https://stackoverflow.com/questions/11038028/what-is-the-best-safest-way-to-reinstall-homebrew
1 | rm -rf /usr/local/Cellar /usr/local/.git && brew cleanup |
proxychains
【之前一段时间用过 porxychains 体验非常好,不过今天试了下用来代理 git 好像不太来赛,不过 proxychains4 curl www.google.com
是可以的,不知道什么原因】
安装
1 | brew install proxychains-ng |
配置相关文件 /usr/local/etc/proxychains.conf
,在最后添加本地代理,如
1 | socks5 127.0.0.1 1086 |
由于 mac os 有个安全保护,无法直接使用 proxychains,需要关闭某个安全保护才可以使用,可以
1 | proxychains4 curl www.google.com |
测试一下是否能工作。 重启电脑,出现白屏的时候按着 Command+R,等出现了系统管理页面后打开 Terminal,这时候的 Terminal 是管理员模式,使用命令 csrutil disable 来关闭服务。关闭后可用 csrutil status 查看是否关闭了。关闭服务器重启系统就可以用proxychains了。更多的内容在 http://osxdaily.com/2015/10/05/disable-rootless-system-integrity-protection-mac-os-x/
proxychains 后面可以接很多命令,curl
、wget
、git
等等,当要下载国外资源的时候这个能提速很多,特别是链接 github。
proxychains 后面接 ping
命令是不可以的,因为 proxychains 是在 tcp 层,ping 命令是基于 icmp 在 ip 层,所以使用 proxychains 后面接 ping 命令是没有的。
网速测试:speedtest-cli
最后,推荐一款终端快带测试工具 speedtest-cli ;mac 下仅需
1 | brew install speedtest-cli |
即可安装使用。