基于 v2ray 实现科学上网

前言

原本在 vultr 上面购买的 VPS 上面搭建的 VPN 不能用了,具体原因就是 GTW 经过一波加强,可以通过 TCP 阻断来封锁一些用于搭建 VPN 的 VPS。TCP 阻断的结果就是在国内无法通过 tcp 来连接访问国外的 vps,从而在国内无法 ssh 登录 vps,但是使用 ping 工具却能 ping 通被 tcp 阻断的服务器,因为 ping 是基于 ICMP 的。这样给人一种 vps 没被封的错觉。

当 vps 被 TCP 阻断时,原本基于 shadowsocks 的科学上网方式就不能使用了,本文就是针对被 TCP 阻断的 vps,通过 v2ray 来实现科学上网。当然对于没有被 TCP 阻断的 vps 使用该方法来搭梯子也不容易被封。


实现过程

1. 服务器安装

在 Linux 操作系统, V2Ray 的安装有脚本安装、手动安装、编译安装 3 种方式,选择其中一种即可,本指南仅提供使用使用脚本安装的方法,并仅推荐使用脚本安装,该脚本由 V2Ray 官方提供。该脚本仅可以在 Debian 系列或者支持 Systemd 的 Linux 操作系统使用。

本文基于 CentOS 7 服务器来实现。

首先下载脚本:

1
2
3
4
5
6
7
8
9
10
11
# wget https://install.direct/go.sh
--2019-02-15 07:53:34-- https://install.direct/go.sh
Resolving install.direct (install.direct)... 104.27.174.71, 104.27.175.71, 2606:4700:30::681b:af47, ...
Connecting to install.direct (install.direct)|104.27.174.71|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/plain]
Saving to: ‘go.sh’

[ <=> ] 13,915 --.-K/s in 0s

2019-02-15 07:53:34 (58.3 MB/s) - ‘go.sh’ saved [13915]

然后执行安装脚本:

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
# sudo bash go.sh
Installing V2Ray v4.16.0 on x86_64
Downloading V2Ray: https://github.com/v2ray/v2ray-core/releases/download/v4.16.0/v2ray-linux-64.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 608 0 608 0 0 1330 0 --:--:-- --:--:-- --:--:-- 1333
100 10.2M 100 10.2M 0 0 1723k 0 0:00:06 0:00:06 --:--:-- 2356k
Updating software repo
http://mirrors.syringanetworks.net/fedora-epel/7/x86_64/repodata/5a7d69681e5cfd3ae41829a733077e717b512d3dee2d802edeeb206b7d8bda33-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found
Trying other mirror.
To address this issue please refer to the below wiki article

https://wiki.centos.org/yum-errors

If above article doesn't help to resolve this issue please use https://bugs.centos.org/.

Installing unzip
Extracting V2Ray package to /tmp/v2ray.
Archive: /tmp/v2ray/v2ray.zip
inflating: /tmp/v2ray/config.json
creating: /tmp/v2ray/doc/
inflating: /tmp/v2ray/doc/readme.md
inflating: /tmp/v2ray/geoip.dat
inflating: /tmp/v2ray/geosite.dat
creating: /tmp/v2ray/systemd/
inflating: /tmp/v2ray/systemd/v2ray.service
creating: /tmp/v2ray/systemv/
inflating: /tmp/v2ray/systemv/v2ray
inflating: /tmp/v2ray/v2ctl
extracting: /tmp/v2ray/v2ctl.sig
inflating: /tmp/v2ray/v2ray
extracting: /tmp/v2ray/v2ray.sig
inflating: /tmp/v2ray/vpoint_socks_vmess.json
inflating: /tmp/v2ray/vpoint_vmess_freedom.json
PORT:40827
UUID:505f001d-4aa8-4519-9c54-6b65749ee3fb
Created symlink from /etc/systemd/system/multi-user.target.wants/v2ray.service to /etc/systemd/system/v2ray.service.
V2Ray v4.16.0 is installed.

看到类似于这样的提示就算安装成功了。如果安装不成功脚本会有红色的提示语句,这个时候你应当按照提示除错,除错后再重新执行一遍脚本安装 V2Ray。

在上面的提示中,有一行 “PORT:40827” 代表着端口号为 40827,还有一行 “UUID:505f001d-4aa8-4519-9c54-6b65749ee3fb” 代表着 id 为 505f001d-4aa8-4519-9c54-6b65749ee3fb。这两个都是随机生成的,不用担心跟别人撞上了。

安装完之后,使用以下命令启动 V2Ray:

1
# systemctl start v2ray

在首次安装完成之后,V2Ray 不会自动启动,需要手动运行上述启动命令。


2. 服务端配置

v2ray 的配置文件位于 /etc/v2ray/config.json。v2ray 相对于 shadowsocks 更复杂的地方就在于其有众多的配置选项,针对不同的应用场景有不同的配置方案,从而实现不同的功能,而 shadowsocks 则相对傻瓜一些。要详细讲述 v2ray 的所有配置选项是需要很长的内容的,本文针对被 TCP 阻断的 VPS 来实现 vpn 的场景。下面简单介绍一些配置内容:

  • VMess

    VMess 协议是由 V2Ray 原创并使用于 V2Ray 的加密传输协议,如同 Shadowsocks 一样为了对抗墙的深度包检测而研发的。在 V2Ray 上客户端与服务器的通信主要是通过 VMess 协议通信。

    V2Ray 使用 inbound(传入) 和 outbound(传出) 的结构,这样的结构非常清晰地体现了数据包的流动方向,同时也使得 V2Ray 功能强大复杂的同时而不混乱,清晰明了。形象地说,我们可以把 V2Ray 当作一个盒子,这个盒子有入口和出口(即 inbound 和 outbound),我们将数据包通过某个入口放进这个盒子里,然后这个盒子以某种机制(这个机制其实就是路由,后面会讲到)决定这个数据包从哪个出口吐出来。以这样的角度理解的话,V2Ray 做客户端,则 inbound 接收来自浏览器数据,由 outbound 发出去(通常是发到 V2Ray 服务器);V2Ray 做服务器,则 inbound 接收来自 V2Ray 客户端的数据,由 outbound 发出去(通常是如 Google 等想要访问的目标网站)。

  • mKCP

    V2Ray 引入了 KCP 传输协议,并且做了一些不同的优化,称为 mKCP。 mKCP 使用 UDP 来模拟 TCP 连接,这样即使 vps 被 TCP 阻断了,还是能够通过 UDP 来连接。mKCP 牺牲带宽来降低延迟,传输同样的内容,mKCP 一般比 TCP 消耗更多的流量,但是对于我购买的 vps 流量一般都用的很少,每个月用不完 十分之一,所以采用 mKCP 对流量消耗也没有太大的问题。

服务端采用 vmess + mKCP 的配置时,配置文件 /etc/v2ray/config.json 的内容如下:

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
{
"inbounds": [
{
"port": 40827,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "505f001d-4aa8-4519-9c54-6b65749ee3fb",
"alterId": 64
}
]
},
"streamSettings": {
"network": "mkcp",
"kcpSettings": {
"uplinkCapacity": 5,
"downlinkCapacity": 100,
"congestion": true,
"header": {
"type": "none"
}
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"settings": {}
}
]
}

修改完配置文件后,需要重新启动 v2ray:

1
# systemctl restart v2ray

最后,还需要修改 vps 的防火墙设置,将对应的 udp 端口放行:

1
2
# firewall-cmd --zone=public --add-port=40827/udp --permanent
# firewall-cmd --reload

再设置 v2ray 开机自启动,修改 /etc/rc.local 文件,添加:

1
systemctl restart v2ray

服务端配置完毕。


3. 客户端安装

下载客户端,windows 系统下有两种客户端,一种是不带图形界面的,另一种是在其基础上增加了图形界面的。为了方便,使用带有图形界面的版本。下载连接:v2rayN,下载 Lastest release 的 v2rayN.zip 压缩包。

解压后运行 v2rayN.exe 程序,双击任务栏图标打开界面:

v2rayN界面

点击上方检查更新检查更新 v2rayCore,点击“是”。

更新完后,点击服务器添加[VMess]服务器,如下配置:

vmess服务器配置

配置完成点击确定,右键任务栏 v2rayN 图标,点击启用http代理,http 代理模式可选择 PAC模式 或者 全局模式

这样,客户端的配置也完成,即可开始科学上网。


其他内容

  1. 非图形界面客户端配置:

    如果客户端没有使用带有图形界面的 v2rayN,其配置稍微复杂一点,需要自己修改客户端配置文件 config.json,配置内容如下:

    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
    {
    "inbounds": [
    {
    "port": 1080,
    "protocol": "socks",
    "sniffing": {
    "enabled": true,
    "destOverride": ["http", "tls"]
    },
    "settings": {
    "auth": "noauth"
    }
    }
    ],
    "outbounds": [
    {
    "protocol": "vmess",
    "settings": {
    "vnext": [
    {
    "address": "xxx.xxx.xxx.xxx",
    "port": 40827,
    "users": [
    {
    "id": "505f001d-4aa8-4519-9c54-6b65749ee3fb",
    "alterId": 64
    }
    ]
    }
    ]
    },
    "streamSettings": {
    "network": "mkcp",
    "kcpSettings": {
    "uplinkCapacity": 5,
    "downlinkCapacity": 100,
    "congestion": true,
    "header": {
    "type": "none"
    }
    }
    }
    }
    ]
    }

    配置完 v2ray 并启动之后,还需要配合浏览器的一些代理插件来实现科学上网,如谷歌浏览器与火狐浏览器的 SwitchyOmega 插件,如何使用这里不介绍。

  2. 参考链接

    v2ray 配置指南:https://toutyrater.github.io

    v2ray配置模板:https://github.com/KiriKira/vTemplate