Mac设置Parallels Desktop中的虚拟机使用宿主机代理

Mac设置Parallels Desktop中的虚拟机使用宿主机代理

需求

前提:你的mac本身已经安装ss,并且可以通过ss科学上网(或者win也一样)
想要实现:Parallels Desktop里的虚拟机也想科学上网(或者win里安装vmware也一样,或者是另一台物理机也是一样的)

方法一:虚拟机也安装一个ss客户端

对于有窗口的系统,比如你虚拟机里安装的是win、或者ubuntu等,那么再安装一个客户端是很方便的,这就相当于在另一台电脑里使用ss客户端,既然mac上你会用了,那在其他电脑上也是一样的。

但是如果你虚拟机里是最小化安装的纯命令行的centos,那么使用客户端可能有一定的麻烦,yum无法安装,pip安装的感觉也是ssserver,并没有客户端,所以客户端还得编译,编译还有很多依赖,编译好还得写对配置文件,很多人都不太清楚这个,所以还是挺麻烦的。

方法二:虚拟机设置代理到宿主机

即虚拟机里设置代理到mac(这里mac就是虚拟机的宿主机),让虚拟机通过mac的ss科学上网,这里如果宿主机换成win,虚拟机软件换成vmware或virtualbox,它的原理也都是一样的。

设置方法:
1、首先把宿主机(我这里是mac)的ss设置里的Local Socks5 Listen Address由原来的127.0.0.1设置为0.0.0.0,如果你需要通过HTTP代理,那么也要把ss里的HTTP选项打开,并把HTTP proxy Listen Address地址由原来的127.0.0.1设置为0.0.0.0,这样做表示代理所有ip,而不只是本机的127.0.0.1。或者如果你用的是其他科学上网工具,也有些写成“share over LAN(通过局域网共享)”,如果有这个选项,选上了就表示监听0.0.0.0

2、搞清楚你的虚拟机是通过什么方式联网的,虚拟机连网无非有两种方式:

  • 桥接
  • NAT

如果你是桥接连网,那么你只要找出你的宿主机的联网ip即可(mac的话,一般都是wifi,或者你通过转接头插网线的话,那就是转接头对应的ip)

如果你是NAT连网的,那么你要找出你的宿主机中NAT网卡的ip(在mac里使用parallels desktop虚拟机的话,NAT网卡一般是parallels Shared开头的)

3、在虚拟机里的~/.bashrc~/.zshrc里,添加以下两句的其中一句:

export ALL_PROXY=SOCKS5://10.211.55.2:1086
export ALL_PROXY=HTTP://10.211.55.2:1087

第一句表示使用SOCKS5代理,第二句表示使用HTTP代理,注意ip和端口不要照抄我的,填你自己的,ip就是第2步中找到的ip,端口就是你的ss对应的端口,打开ss的设置里就有,一般ss有两个端口,一个socks5端口,一个http端口,找到对应端口填进去即可。

最后source一下配置文件:

source ~/.bashrc

或者你用zsh shell的话就是:

source ~/.zshrc

测试你的ip是哪里的:

curl https://ip.cn

如果显示的是你当前城市的ip或者附近城市的ip,说明代理无效,检查一下哪里搞错了。
如果显示的是你的代理服务器所在地址(比如美国)和ip,那说明代理设置成功。

然后试试能否访问google:

curl https://www.google.com

如果报以下错误,那就是不能访问
curl: (7) Failed connect to www.google.com:443; Connection timed out

如果返回一大片内容,那就是能访问,那一大片内容就是google首页的html源码。

如果是Windows,可以直接在cmd里设用set http_proxy=http://127.0.0.1:1087set https_proxy=http://127.0.0.1:1087set all_proxy=http://127.0.0.1:1087


其实更好的方式是这样,为什么这样写请参考Mac让Mail(自带邮箱客户端)的gmail走代理及终端走代理

# 设置使用代理
alias setproxy="export https_proxy=http://127.0.0.1:1087; export http_proxy=http://127.0.0.1:1087; export all_proxy=socks5://127.0.0.1:1086; echo 'Set proxy successfully'"
# 设置取消使用代理
alias unsetproxy="unset http_proxy; unset https_proxy; unset all_proxy; echo 'Unset proxy successfully'"
打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

Mac设置Parallels Desktop中的虚拟机使用宿主机代理