很早之前自己找教程搭建pptpd失败了好几次就没再去搞过了。今天可以说是“旧情复燃”,只不过是换了种方式,没想到却简单得多。

服务器端

2018-3-11更新
建议使用脚本安装服务器端

以我的Centos为例

1. 安装shadowsocks

yum -y install python python-pip
pip install shadowsocks

2. 配置shadowsocks

vim /etc/shadowsocks.json

输入配置内容

{
    "server": "服务器的ip",
    "local_address": "127.0.0.1",
    "local_port":1080,
    "port_password": {
        "端口1": "密码1",
        "端口2": "密码2",
         .....
        "端口n": "密码n" 
    },
    "timeout": 300,
    "method": "aes-256-cfb"
}

2017-10-11 15:42:42 星期三 更新
多端口貌似不能用了,单独一个端口可以继续使用,默认设置多个设备都可以用一个端口。

{
    "server": "服务器的ip",
    "server_port": 端口号,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password": "密码",
    "timeout": 300,
    "method": "aes-256-cfb"
}

然后就是开启/关闭服务
开启服务:sudo ssserver -c /etc/shadowsocks.json -d start
关闭服务:sudo ssserver -c /etc/shadowsocks.json -d stop

Android客户端

自行下载 shadowsocks App

操作界面
操作也是很简单的

  1. 配置名称 : 任意
  2. 服务器 : vps ip
  3. 远程端口 : vps 开放端口号
  4. 密码 : 字面意思
  5. 加密方法 : 与服务器端保持一直

Linux客户端

安装 shadowsocks

yaourt -S shadowsocks-qt5

添加配置基本与android相同
connection -> add -> manually

终端

以我的 Arch 为例

1.安装shadowsocks

yaourt -S python2.7 python-pip
pip install shadowsocks

编辑文件vim /etc/shadowsocks.json,填写代理信息:

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

后台启动/停止shadowsocks
启动:sslocal -c /etc/shadowsocks.json -d start
停止:sslocal -c /etc/shadowsocks.json -d stop

2. sock5转http

Shadowsocks使用socks5协议,而终端很多工具目前只支持http和https等协议,所以我们为终端设置Shadowsocks的思路就是将socks5协议转换成http协议,然后为终端设置即可。

简而言之,我们需要一个代理的代理去支持我的vpn,因为Shadowsocks不支持我们常用的传输协议。
这里我用到的是 privoxy ,附带一个比较详细的博文介绍

2.1 安装 privoxy

yaourt -S privoxy

2.2 配置 privoxy

终端输入 sudo vim /etc/privoxy/config

修改如下

# listen-address  127.0.0.1:8118 找到这句并改成以下
listen-address  0.0.0.0:8118
# 添加一句
forward-socks5   /               127.0.0.1:1080 .

然后再是重启一下服务 就可以使用代理

sudo systemctl restart privoxy

现在,你可以在某个命令前面加上http_proxy=http://localhost:8118设置代理。
(8118 端口是 privoxy 的默认端口

2.3 验证代理是否成功

没有挂代理的时候:

curl ip.gs
Current IP / 当前 IP: (手动马赛克)
ISP / 运营商:  ChinaTelecom
City / 城市: Wuhan Hubei
Country / 国家: China

挂了代理的时候:

http_proxy=http://localhost:8118 curl ip.gs
Current IP / 当前 IP: (手动马赛克)
ISP / 运营商:  digitalocean.com
City / 城市:  London
Country / 国家: United Kingdom

如果要在当前shell内一直使用代理,只要设置 export http_proxy=http://127.0.0.1:8118/ 即可
如果想在当前shell取消代理,则 $ unset http_proxy
如果想要在终端内一直使用代理,也可以在 ~/.bashrc 中设置一下也可。

vim ~/.bashrc

添加一句

export http_proxy=http://127.0.0.1:8118/

最后是source一下让它立刻生效

source ~/.bashrc

3. Proxychains

无疑,无论是临时使用 http_proxy=http://127.0.0.1:8118/ ,当前shell 设置代理,还是全局设置都不是很方便。这里提供一种方式,你只需要在你想要代理的命令前输入 proxychains4 即可。

3.1 安装

git clone https://github.com/rofl0r/proxychains-ng.git
cd proxychains-ng
./configure
(sudo) make && make install
cp ./src/proxychains.conf /etc/proxychians.conf
cd .. && rm -rf proxychains-ng

3.2 修改配置

vim /etc/proxychains.conf

输入以下操作

strict_chain
proxy_dns 
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode

[ProxyList]
socks5  127.0.0.1 1080

3.3 测试

proxychains4 curl ip.gs
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.so
Current IP / 当前 IP: (手动马赛克)
ISP / 运营商:  digitalocean.com
City / 城市:  London
Country / 国家: United Kingdom

如何给Linux下的所有应用挂代理

Linux下的shadowsocks貌似没有全局设置,像telegram这种自带代理设置的还好说,而没有自带代理设置的应用就很蛋疼了。这里说下我的解决方法(应该不是最好的。

直接开终端运行

因为在前文已经配置了终端代理,所以我们可以选择开启一个虚拟终端,然后在终端中以命令行形式启动应用,当然要在前面加个proxychains4
举个例子,因为经常需要使用gmail,而我一直使用的邮件客户端是 Nylas Mail(安利一下啦,界面非常美观,如何下载自己去找吧。),而他本身是没有自带代理设置的,它的命令行是nylas-mail

那么就是命令proxychains4 nylas-mail就ok了。

当然这样的话这个终端就会“废了”,你必须一直开着。这样当然不行,我们可以使用nohup命令另其在后台运行。命令如下

nohup nylas-mail > /dev/zero 2>&1 &

上面那个命令会忽视所有输出和错误,否则单纯是nohup nylas-mail &会将输出存到当前目录的nohup.out文件中。

在*.desktop文件中更改

对于常用的应用上面那个方法还是不方便,最方便的方法是在desktop entry文件中更改。desktop entry文件具体的我说不来啊,我理解的就是一个代替终端启动的格式化脚本。不知道的自己去搜一下了解一下吧。

desktop entry文件都存在/usr/share/applications目录下,随便找一下就可以了啊。
然后打开这个文件,在Exec中的最前面加个proxychains4就行了。

什么原理的话,你只要知道desktop entry文件是什么作用,他的格式是怎么样的,你就知道了。

这个方法有一个缺点就是,你每次更新系统的时候,这个应用一旦被更新,那么他的desktop entry文件也会被更新,暂时没有找到好的解决办法。。