2

linux配置Shadowsocks实现终端代理(精编)

 3 years ago
source link: https://www.meirenji.info/2018/11/18/linux%E9%85%8D%E7%BD%AEShadowsocks%E5%AE%9E%E7%8E%B0%E7%BB%88%E7%AB%AF%E4%BB%A3%E7%90%86-%E7%B2%BE%E7%BC%96/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

linux配置Shadowsocks实现终端代理(精编)

发表于 2018-11-18

| 分类于 善用佳软

| 0 Comments

配置PHP Laravel框架,Laravel框架需要Composer安装。结果安装Composer的时候遭遇到了GFW,光在浏览器上穿墙还不够,还要在终端上穿墙。
使用Shadowsocks在浏览器上穿墙很简单,但是在终端穿墙以前没接触过,这次花了5个小时搞定了。

利用linode翻墙安装相关配置时,哪速度,真是让人怀念。所以在局域网的一台机器上面开始动手了。

做开发的同学,应该都会经常接触终端,有些时候我们在终端会做一些网络操作,比如下载gradle包等,由于一些你懂我也懂的原因,某些网络操作不是那么理想,这时候我们就需要设置代理来自由地访问网络。

Shadowsocks是我们常用的代理工具,它使用socks5协议,而终端很多工具目前只支持http和https等协议,对socks5协议支持不够好,所以我们为终端设置shadowsocks的思路就是将socks协议转换成http协议,然后为终端设置即可。仔细想想也算是适配器模式的一种现实应用吧。

想要进行转换,需要借助工具,这里我们采用比较知名的polipo来实现。

polipo是一个轻量级的缓存web代理程序。

前题是,已经在服务器端安装好了相关应用。

Shadowsocks 是一个开源安全的 Socks5 代理,中文名称“影梭“,类似于 SSH 代理。与一度非常流行的基于 GAE 的科学上网方式相比,Shadowsocks 部署简单,使用灵活;同时与全局代理的 VPN 不同,Shadowsocks 可以仅针对浏览器代理,轻巧方便,如果说 VPN 是一把 ==屠龙宝刀==,那么 Shadowsocks 就是一把 ==瑞士军刀==,虽小巧但功能强大。

1.ubuntu or centos 安装shadowsocks

运行环境安装

sudo apt-get update
sudo apt-get install python-pip
sudo apt-get install python-setuptools m2crypto
yum install epel-release -y
yum install python-pip
pip install --upgrade pip

接着安装shadowsocks

pip install shadowsocks

2.启动shadowsocks

安装好后,在本地我们要用到sslocal ,终端输入sslocal –help 可以查看帮助,像这样

通过帮助提示我们知道各个参数怎么配置,比如 sslocal -c 后面加上我们的json配置文件,或者像下面这样直接命令参数写上运行。

sslocal -s 11.22.33.44 -p 50003 -k "123456" -l 1080 -t 600 -m aes-256-cfb

-s表示服务IP, -p指的是服务端的端口,-l是本地端口默认是1080, -k 是密码(要加””), -t超时默认300,-m是加密方法默认aes-256-cfb,

为了方便我推荐直接用sslcoal -c 配置文件路径 这样的方式,简单好用。

我们可以在/home/mudao/ 下新建个文件shadowsocks.json (mudao是我在我电脑上的用户名,这里路径你自己看你的)。内容是这样:

{
"server":"11.22.33.44",
"server_port":50003,
"local_port":1080,
"password":"123456",
"timeout":600,
"method":"aes-256-cfb"
}

确定上面的配置文件没有问题,然后我们就可以在终端输入

sslocal -c /etc/shadowsocks.json

如果想增加开启自动启动,执行:

echo " nohup sslocal -c /etc/shadowsocks.json /dev/null 2>&1 &" >> /etc/rc.local

查看后台sslocal是否运行

ps aux |grep sslocal |grep -v "grep"

回车运行。如果没有问题的话,下面会是这样…


3.开机后台自动运行ss

如果你上面可以代理上网了可以进行这一步,之前我让你不要关掉终端,因为关掉终端的时候代理就随着关闭了,之后你每次开机或者关掉终端之后,下次你再想用代理就要重新在终端输入这样的命令 sslocal -c /home/mudao/shadowsocks.json ,挺麻烦是不?

我们现在可以在你的ubuntu上安装一个叫做supervisor的程序来管理你的sslocal启动。关于supervisor在前面介绍安装mod-ss-panel时,有介绍!

sudo apt-get install supervisor

安装好后我们可以在/etc/supervisor/目录下找到supervisor.conf配置文件,我们可以用以下命令来编辑

sudo gedit /etc/supervisor/supervisor.conf

在这个文件的最后加上以下内容

[program:shadowsocks]
command=/usr/local/bin/sslocal -c /etc/shadowsocks.json
autostart=true
autorestart=true
user=root
log_stderr=true
logfile=/var/log/shadowsocks.log

现在关掉你之前运行sslocal命令的终端,再打开终端输入

sudo service supervisor restart

然后去打开浏览器看看可不可以继续代理上网。你也可以用

ps -ef|grep sslocal

命令查看sslocal是否在运行。

这个时候我们需要在/etc下编辑一个叫rc.local的文件 ,让supervisor开机启动。

sudo gedit /etc/rc.local

在这个配置文件的

exit 0

前面一行加上

service supervisor start

看你是否配置成功你可以在现在关机重启之后直接打开浏览器看是否代理成功。

以上原文引自这里

  • centos下安装supervisor

suppervisor不支持python3的版本安装

yum install python-setuptools
wget supervisor-3.3.4.tar.gz
cd supervisor
python setup.py install

成功安装后可以登陆python控制台输入import supervisor 查看是否能成功加载

创建配置文件(supervisord.conf)

使用root身份创建一个全局配置文件

echo_supervisord_conf > /etc/supervisord.conf
supervisord -c /etc/supervisord.conf
  • 修改配置文件(supervisord.conf)

如果修改了 /etc/supervisord.conf ,需要执行 添加

[program:shadowsocks]
command=/usr/local/bin/sslocal -c /etc/shadowsocks.json
autostart=true
autorestart=true
numprocs=1
supervisorctl reload
supervisorctl status

来重新加载配置文件,否则不会生效

supervisord 是启动supervisor
supervisorctl 是控制supervisord


4. 终端穿墙

浏览器能穿墙就已经能满足绝大多数需求了,但是有的时候终端也必须穿墙,就比如Composer。关于终端穿墙,本人尝试了很多种方案,比如Privoxy、Proxychains和Polipo,最后选择了Privoxy。

为什么终端需要单独穿墙呢?难道Shadowsock不能“全局”代理么?这个问题当时困惑了我很久,最后一句话点醒了我。

Shadowsocks是一个使用SOCKS5(或者SOCK4之类)协议的代理,它只接受SOCKS5协议的流量,不接受HTTP或者HTTPS的流量。所以当你在Chrome上能穿墙的时候,是Proxy SwitchyOmega插件把HTTP和HTTPS流量转换成了SOCKS协议的流量,才实现了Shadowsocks的代理。而终端是没有这样的协议转换的,所以没法直接使用Shadowsock进行代理。

这时候就需要一个协议转换器,这里我用了Privoxy(我用privoxy没有成功!但是用polipo成功了)。

~$ sudo apt-get install privoxy
yum install install autoconf automake libtool

wget http://www.privoxy.org/sf-download-mirror/Sources/3.0.26%20%28stable%29/privoxy-3.0.26-stable-src.tar.gz

tar -vxf privoxy-3.0.26-stable-src.tar.gz

安装前需要执行useradd privoxy创建一个用户privoxy,然后依次执行如下三条命令

autoheader && autoconf
./configure
make && make install
less /usr/local/etc/privoxy/config
先搜索关键字:listen-address找到listen-address 127.0.0.1:8118这一句,保证这一句没有注释,8118就是将来http代理要输入的端口。

然后搜索forward-socks5t,将forward-socks5t / 127.0.0.1:1080
~$ sudo /etc/init.d/privoxy restart

接着配置一下终端的环境,需要如下两句。

export http_proxy="127.0.0.1:8118"

export https_proxy="127.0.0.1:8118"

为了方便还是在/etc/rc.local中添加如下命令,注意在exit 0之前。

sudo /etc/init.d/privoxy start

service privoxy start

在/etc/profile的末尾添加如下两句。

export http_proxy="127.0.0.1:8118"
export https_proxy="127.0.0.1:8118"

安装privoxy的参考原文在这里

supervisorctl status

出现如下提示,即表示成功!


过设置alias简写来简化操作,每次要用的时候输入setproxy,不用了就unsetproxy。

alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1080"

alias setproxy="export http_proxy="127.0.0.1:8118""
alias unsetproxy="unset ALL_PROXY"
alias ip="curl -i http://ip.cn"
  • 怎样让Centos开机时就让supervisor启动这些配置文件呢
vi /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

/usr/bin/supervisord -c /etc/supervisord.conf
touch /var/lock/subsys/local

在rc.local里直接写 supervisord -c /etc/supervisord.conf 还不行,还得写全supervisord所在的路径

如果想撤销当前会话的http_proxy代理,使用

unset http_proxy

如果想要更长久的设置代理,可以将

export http_proxy=http://localhost:8123
export https_proxy=http://localhost:8123

加入.bashrc或者.bash_profile文件


6.设置Git代理

复杂一些的设置Git代理

git clone https://android.googlesource.com/tools/repo --config http.proxy=localhost:8123

Cloning into 'repo'...
remote: Counting objects: 135, done
remote: Finding sources: 100% (135/135)
remote: Total 3483 (delta 1956), reused 3483 (delta 1956)
Receiving objects: 100% (3483/3483), 2.63 MiB | 492 KiB/s, done.
Resolving deltas: 100% (1956/1956), done.

其实这样还是比较复杂,因为需要记忆的东西比较多,

下面是一个更简单的实现

首先,在.bashrc或者.bash_profile文件加入这一句。

gp=" --config http.proxy=localhost:8123"

执行source操作,更新当前bash配置。

更简单的使用git的方法

git clone  https://android.googlesource.com/tools/repo $gp

Cloning into 'repo'...
remote: Counting objects: 135, done
remote: Finding sources: 100% (135/135)
remote: Total 3483 (delta 1956), reused 3483 (delta 1956)
Receiving objects: 100% (3483/3483), 2.63 MiB | 483 KiB/s, done.
Resolving deltas: 100% (1956/1956), done.

[在git终端mac终端加入代理原文引自这里]http://droidyue.com/blog/2016/04/04/set-shadowsocks-proxy-for-terminal/)


7.apt-get怎么使用代理服务器

升级到Ubuntu10.04后,发现apt-get的代理设置有改变了,在9.10以前使用“http_proxy”环境变量就可以令apt-get使用代理.

然后在Ubuntu10.04下就无效了,看来apt-get已经被改成不使用这个环境变量了。

一阵郁闷后,最后我发现在“首选项”->“网络代理”那里,多了个“System-wide”按钮(我用的是英文环境,不知道中文被翻译成怎样,关闭窗口时也会提示你),在这里设置后,apt-get确实可以使用代理了。

但是我依然鄙视这种改进,因为我通常就是偶尔使用代理,更新几个被墙掉的仓库而已(如dropbox和tor),根本不想使用全局代理,本来用终端就能搞定的事,现在切换代理要点N次鼠标,真烦。

所以我研究了一下,发现那个代理设置修改了两个文件,一个是“/etc/environment”,这个是系统的环境变量,里面定义了“http_proxy”等代理环境变量。另一个是“/etc/apt/apt.conf”,这个就是apt的配置,内容如下

在/etc/apt/apt.conf中追加

Acquire::http::proxy "http://127.0.0.1:8123/";
Acquire::ftp::proxy "ftp://127.0.0.1:8123/";
Acquire::https::proxy "https://127.0.0.1:8123/";

很明显的代理设置代码,我看了下apt-get的手册,发现可以用“-c”选项来指定使用配置文件,也就是复制一份为“~/apt_proxy.conf”,然后“网络代理”那里重置回直接连接,以后使用

sudo apt-get -c ~/apt_proxy.conf update
sudo apt-get -c ~/apt_proxy.conf install mongodb

apt-get 使用代理在的原文在这里

CENTOS 使用 SUPERVISOR 管理进程

centos下安装supervisor

supervisor(一)基础篇

让终端走代理的几种方法

Centos 6 Supervisor 开机启动

CentOS6 Supervisor安装

linux 配置shadowsocks代理全局代理


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK