服务端搭建Shadowsocks和V2Ray详解

今天是柏林墙倒塌三十周年,为了纪念这个伟大的日子分享一下shadowsocks和v2ray的搭建教程,谁叫俺们的墙越来越高了呢?shadowsocks用的是最新源码编译和官方脚本安装两种方法,v2ray官方确实没找到编译文档,再加上go语言的特性,确实不需要那么多依赖,也就用官方脚本直接部署了。

服务端系统为Ubuntu18.04

部署Shadowsocks-libev服务端

为什么要部署libev版本的服务端呢?因为就这个版本还在更新,而且占用小,下面给出两种安装部署方法,一是官方脚本直接安装,二是最新源码进行编译安装。

官方脚本安装

1
2
3
4
5
6
7
8
9
10
11
12
mkdir ./build-area

cd build-area

//下载脚本
$ wget https://github.com/shadowsocks/shadowsocks-libev/raw/master/scripts/build_deb.sh

//给运行权限
$ chmod +x build_deb.sh

//部署
./build_deb.sh all

官方这个脚本带obfs也一起安装了,倒省事了,填上config.json配置文件也就可以运行了。

运行命令:ss-server -c /etc/shadowsocks-libev/config.json
或者:systemctl start shadowsocks

上面是第一种方法,俺用这种方法倒没感觉什么缺陷,就是shadowsocks-libev版本号好像不是最新的,下面的方法就是用最新源码进行编译。

官方源码编译,安装

编译前先更新一下系统,避免不必要的麻烦

apt update && apt upgrade

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 下载源码
git clone https://github.com/shadowsocks/shadowsocks-libev.git
cd shadowsocks-libev

// 更新子模块
git submodule update --init --recursive

// 安装依赖
apt-get install --no-install-recommends autoconf automake \
debhelper pkg-config asciidoc xmlto libpcre3-dev apg pwgen rng-tools \
libev-dev libc-ares-dev dh-autoreconf libsodium-dev libmbedtls-dev

// 编译,安装
./autogen.sh && ./configure --prefix=/usr && make

make install

配置文件

mkdir -p /etc/shadowsocks-libev

vi /etc/shadowsocks-libev/config.json

新建,修改配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
# /etc/shadowsocks-libev/config.json

{
"server":["[::0]","0.0.0.0"],
"server_port":1024,
"password":"https://yeahwu.com/",
"timeout":600,
"method":"aes-256-gcm",
"fast_open":true,
"plugin":"obfs-server",
"plugin_opts":"obfs=tls;obfs-host=cloudflare.com"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
# 多用户manager.json文件
{
"server":["[::0]","0.0.0.0"],
"port_password":{
"8388":"password", # 端口号与密码
"8389":"password"
},
"timeout":600,
"method":"chacha20-ietf-poly1305",
"fast_open":true,
"plugin":"obfs-server",
"plugin_opts":"obfs=tls;obfs-host=cloudfront.net"
}

如果不加下面obfs插件,上面部署也就完成了,启动运行也就可以了,加混淆就请往下看!

启动:ss-server -c /etc/shadowsocks-libev/config.json

编译和安装 simple-obfs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
apt install zlib-devel openssl-devel -y

// 下载源码
git clone https://github.com/shadowsocks/simple-obfs.git

cd simple-obfs

// 更新子模块
git submodule update --init --recursive

//编译,安装
./autogen.sh

./configure && make

make install

使用systemctl 控制

新建shadowsocks.service文件

vi /etc/systemd/system/shadowsocks.service添加内容如下:

1
2
3
4
5
6
7
8
9
10
[Unit]
Description=Shadowsocks Server
After=network.target

[Service]
ExecStart=/usr/local/bin/ss-server -c /etc/shadowsocks-libev/config.json -u
Restart=on-abort

[Install]
WantedBy=multi-user.target

完成后,就可以启动Shadowsocks了。

Systemctl重载命令: systemctl daemon-reload

启动命令: systemctl start shadowsocks

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
systemctl start shadowsocks   //启动

systemctl stop shadowsocks //停止

systemctl restart shadowsocks //重新启动

systemctl status shadowsocks //查看状态

systemctl enable shadowsocks //添加开机自启动

cd shadowsocks-libev && make uninstall //卸载然后删除配置文件

ss-server -c /etc/shadowsocks-libev/config.json //前台启动

更新shadowsocks和obfs

1
2
3
4
5
6
7
8
9
systemctl stop shadowsocks

在 shadowsocks-libev 目录下:

cd shadowsocks-libev
git pull
./configure
make
make install
1
2
3
4
5
6
7
在 simple-obfs 目录下:

cd simple-obfs
git pull
./configure
make
make install
1
systemctl start shadowsocks

开启TCP Fast Open

vi /etc/sysctl.conf,加入如下一行

net.ipv4.tcp_fastopen = 3

执行如下命令使其生效,

sysctl -p

当然最后别忘了,在ss配置文件cofing.json里面添加:

"fast_open":true

注:目前Linux内核都是默认开启了TCP BBR,所以大家也不必多费手脚了!

v2ray服务端搭建

v2ray安装

利用官方脚本搭建v2ray服务端,记下常用命令和自己的服务端配置文件。

1
2
3
4
5
6
7
8
9
10
11
// 下载脚本
$ wget https://install.direct/go.sh

// 安装v2ray
$ bash go.sh

// 启动v2ray
$ systemctl start v2ray

//更新服务端
$ bash go.sh

在首次安装完成之后,V2Ray 不会自动启动,需要手动运行下面启动命令。而在已经运行 V2Ray 的 VPS 上再次执行安装脚本,安装脚本会自动停止 V2Ray 进程,升级 V2Ray 程序,然后自动运行 V2Ray。在升级过程中,配置文件不会被修改。

启动命令: systemctl start v2ray

常用命令

1
2
3
4
5
6
7
8
9
10
11
systemctl start v2ray  //启动

systemctl stop v2ray //停止

systemctl status v2ray //查看状态,runing表示成功运行

systemctl reload v2ray //重新载入

systemctl restart v2ray //重新启动

systemctl enable v2ray //添加开机自启动

彻底删除v2ray

停用并卸载服务

1
2
systemctl stop v2ray
systemctl disable v2ray

删除配置残留

1
2
3
4
5
rm -rf /etc/v2ray/*  //配置文件
rm -rf /usr/bin/v2ray/* //程序
rm -rf /var/log/v2ray/* //日志
rm -rf /lib/systemd/system/v2ray.service //systemd 启动项
rm -rf /etc/init.d/v2ray //sysv 启动项

v2ray配置文件

下面是俺的配置文件,开了动态端口,修改了一下,防Google跳出验证,Google类网站走IPv4.

文件路径 /etc/v2ray/config.json,修改config.json文件,建议本地修改好再scp到服务端,因为js文件用vi编写容易遇到缩进问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
{
"inbounds":[
{
"port": 10086,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "dd31476c-beb0-4a64-9d5f-f618eabb2953e",
"alterId": 64
}
],
"detour": { // 绕行配置,即指示客户端使用 dynamicPort 的配置通信
"to": "dynamicPort"
}
}
},
{
"protocol": "vmess",
"port": "10000-20000", // 端口范围
"tag": "dynamicPort", // 与上面的 detour to 相同
"settings": {
"default": {
"alterId": 64
}
},
"allocate": {
"strategy": "random", // 随机开启
"concurrency": 10, // 同时开放两个端口,这个值最大不能超过端口范围的 1/3
"refresh": 3 // 每三分钟刷新一次
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
},
{
"protocol": "freedom", // Google类网站走IPv4,避免跳出验证
"settings": {
"domainStrategy": "UseIPv4"
},
"tag": "ip4-out"
},
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
"routing": {
"rules": [
{
"type": "field",
"domain": [
"domain:google.com"
],
"outboundTag": "ip4-out"
},
{
"type": "field",
"ip": [
"0.0.0.0/8",
"10.0.0.0/8",
"100.64.0.0/10",
"127.0.0.0/8",
"169.254.0.0/16",
"172.16.0.0/12",
"192.0.0.0/24",
"192.0.2.0/24",
"192.168.0.0/16",
"198.18.0.0/15",
"198.51.100.0/24",
"203.0.113.0/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
}
]
}
}

关于本地端的应用,俺主要讲一下iOS端,因为其他Windows,Android ,Linux端官方GitHub都能找到。iOS国内只有Outline,找个美区账号可以下载 Shadowrocket ,Quantumult,Kitsunebi ,91VPN,ConnectSPro .

参考:

Bitcoin:1MQ3DJHnEdkP9scCiA1pGXTe9wyBmDtrvv