centos6.5搭建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 使用该方法来搭梯子也不容易被封。

服务器搭建

安装

选择一台有外网Ip的服务器,可以选择 Vultr服务器,参考https://www.stackcc.com/2018/11/08/ssr-vps/

img

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

脚本一键安装

1
2
3
wget https://install.direct/go.sh
chmod+x go.sh
sudo bash go.sh

go.sh 支持如下参数,可在手动安装时根据实际情况调整:

-p 或 –proxy: 使用代理服务器来下载 V2Ray 的文件,格式与 curl 接受的参数一致,比如 “socks5://127.0.0.1:1080” 或 “http://127.0.0.1:3128"。
-f 或 –force: 强制安装。在默认情况下,如果当前系统中已有最新版本的 V2Ray,go.sh 会在检测之后就退出。如果需要强制重装一遍,则需要指定该参数。
–version: 指定需要安装的版本,比如 “v1.13”。默认值为最新版本。
–local: 使用一个本地文件进行安装。如果你已经下载了某个版本的 V2Ray,则可通过这个参数指定一个文件路径来进行安装。

示例
使用地址为 127.0.0.1:1080 的 SOCKS 代理下载并安装最新版本:

1
./go.sh -p socks5://127.0.0.1:1080

安装本地的 v1.13 版本:

1
./go.sh --version v1.13 --local /path/to/v2ray.zip

安装提示

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
2
3
4
systemctl start v2ray

# centos6.5
service v2ray restart

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

查看安装后的文件

1
2
3
4
5
/usr/bin/v2ray/v2ray:V2Ray 程序;
/usr/bin/v2ray/v2ctl:V2Ray 工具;
/etc/v2ray/config.json:配置文件;
/usr/bin/v2ray/geoip.dat:IP 数据文件
/usr/bin/v2ray/geosite.dat:域名数据文件

开启端口

查看端口是否开启,在远程使用telnet检测

1
telnet ip地址 40827

服务器开启服务器端口

1
# vi /etc/sysconfig/iptables

添加记录

1
2
-A INPUT -p udp -m state --state NEW -m udp --dport 40827 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 40827 -j ACCEPT
1
service iptables restart

服务端配置文件

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的配置中关于数据流向分为”inbound”和”outbound”两个部分。字面意思也很好理解,”inbound”是入流量,也就是程序要接收的数据。

“port” 是V2Ray程序侦听的端口号,可以由用户自己设定。

”protocol”是指入流量数据使用的加密协议,默认是V2Ray项目自行开发的 vmess 协议,一般不做修改。

”id”是用来区分不同V2Ray软件的识别码,只有”id”完全一致时,才可以让两个V2Ray软件协同工作,个人认为是一个加密密钥,只有两个软件的密钥一致,才可以正常识别数据。

配置Shadowsocks协议

V2Ray也支持Shadowsocks协议,把V2Ray软件当做Shadowsocks服务器来使用。完成此功能,需要在配置文件中增加”inboundDetour”配置块,使其支持另一种入流量:

1
2
3
4
5
6
7
8
9
10
11
"inboundDetour": [
{
"protocol": "shadowsocks",
"port": 10087,
"settings": {
"method": "aes-256-cfb",
"password": "www.rultr.com",
"udp": false
}
}
]

“inboundDetour” 的字面意思就很有意思,就是指入流量的另一条道路。

配置文件中”protocol”指入流量使用的协议,直接写 “shadowsocks”就是了。

port是指使用”shadowsocks”协议侦听的端口,注意要和”vmess”协议端口有区别。

settings部分是使用”shadowsocks”协议时的主要配置项。

password部分,由用户自行设定,用于客户端的连接。

这样设置完成后,V2Ray就可以同时作为V2Ray和Shadowsocks的服务器,响应不同客户端的连接。

可以用 netstat -tnlp 命令查看一下10086端口和10087端口是不是都显示为侦听状态。

客户端配置

V2Ray是不区分服务端还是客户端的。

安卓

安卓客户端需要安装一个app,名为v2rayNG,参考这里:https://github.com/2dust/v2rayNG

下载地址:https://github.com/2dust/v2rayNG/releases 记得选择最新版本号的这个文件: app-universal-release.apk

安装包https://github.com/2dust/v2rayNG/releases/download/1.1.1/app-universal-release.apk

Window

windows 系统下,带有图形界面的版本。https://github.com/2dust/v2rayN/releases,下载 Lastest release 的 v2rayN.zip 压缩包。下载地址https://github.com/2dust/v2rayN/releases/download/2.40/v2rayN.zip

解压后运行 v2rayN.exe 程序

双击任务栏图标打开界面:

img

检查更新 v2rayCore

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

添加[VMess]服务器

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

img

启用http代理

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

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

Mac

v2rayu

1
brew cask install v2rayu

或者下载https://github.com/yanue/V2rayU/releases

当前版本https://github.com/yanue/V2rayU/releases/download/1.4.0/V2rayU.dmg

有详细的试用介绍https://github.com/yanue/V2rayU

可以查询日志,看服务是否正常启动。日志如果提示报错: open config.json: no such file or directory,请严格按照 dmg 文件,拖动到 Applications 里面试下。

V2Rayx

Mac 下,V2RayX 是比较好用的一个。下边我来介绍它的使用方法。

V2rayX 发布在 GitHub 上边,它的发行地址是:https://github.com/Cenmrev/V2RayX/releases,打开页面之后选择一个最新版本的下载即可。

例如https://github.com/Cenmrev/V2RayX/releases/download/v0.7.8/V2RayX.dmg

单击显示菜单

Mac

img

img

然后把相关的信息修改为我们自己的服务器即可

1
2
3
Address: 你的服务器IP/地址 : 后边的是端口,对应服务器配置文件内 inbound 部分的 port
User ID : 服务器配置文件内 inbound 部分的 ID
alterId : 服务器配置文件内 inbound 部分的 alterId

可能错误

服务搭建错误

执行go.sh自动安装时,可能出错

image-20190922102917948

提示

1
2
3
Installing daemon
错误:无须任何处理
Failed to install daemon. Please install it manually.

错误原因

这是因为V2ray官方安装脚本只支持Debian7,Debian8、9和CentOS7系列。
可是很多Linux服务器却还是运行着CentOS6系列。
如果直接运行v2ray官方的安装脚本

1
bash <(curl -L -s https://install.direct/go.sh)

就会提示

1
Install daemon fail, please install it manually

问题就是安装脚本在创建守护服务的时候不支持CentOS6

解决办法

将下述代码保存为/etc/init.d/v2ray,并添加执行权限。

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/bin/sh
#
# v2ray Startup script for v2ray
#
# chkconfig: - 24 76
# processname: v2ray
# pidfile: /var/run/v2ray.pid
# description: V2Ray proxy services
#

### BEGIN INIT INFO
# Provides: v2ray
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: V2Ray proxy services
# Description: V2Ray proxy services
### END INIT INFO

DESC=v2ray
NAME=v2ray
DAEMON=/usr/bin/v2ray/v2ray
PIDFILE=/var/run/$NAME.pid
LOCKFILE=/var/lock/subsys/$NAME
SCRIPTNAME=/etc/init.d/$NAME
RETVAL=0

DAEMON_OPTS="-config /etc/v2ray/config.json"

# Exit if the package is not installed
[ -x $DAEMON ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Source function library.
. /etc/rc.d/init.d/functions

start() {
local pids=$(pgrep -f $DAEMON)
if [ -n "$pids" ]; then
echo "$NAME (pid $pids) is already running"
RETVAL=0
return 0
fi

echo -n $"Starting $NAME: "

mkdir -p /var/log/v2ray
$DAEMON $DAEMON_OPTS 1>/dev/null 2>&1 &
echo $! > $PIDFILE

sleep 2
pgrep -f $DAEMON >/dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
success; echo
touch $LOCKFILE
else
failure; echo
fi
return $RETVAL
}

stop() {
local pids=$(pgrep -f $DAEMON)
if [ -z "$pids" ]; then
echo "$NAME is not running"
RETVAL=0
return 0
fi

echo -n $"Stopping $NAME: "
killproc -p ${PIDFILE} ${NAME}
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE}
}

reload() {
echo -n $"Reloading $NAME: "
killproc -p ${PIDFILE} ${NAME} -HUP
RETVAL=$?
echo
}

rh_status() {
status -p ${PIDFILE} ${DAEMON}
}

# See how we were called.
case "$1" in
start)
rh_status >/dev/null 2>&1 && exit 0
start
;;
stop)
stop
;;
status)
rh_status
RETVAL=$?
;;
restart)
stop
start
;;
reload)
reload
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|reload|restart}" >&2
RETVAL=2
;;
esac
exit $RETVAL

加入开机启动,开启服务,问题彻底解决

1
2
3
chmod a+x /etc/init.d/v2ray
chkconfig v2ray on
service v2ray start

服务无法正常使用

先检查服务端是否正常启动

1
top -b -n 1 |grep v2ray

查看防火墙是否开启端口

远程telnet检测端口

1
telnet IP地址 端口

查看服务器access.logerror.log,需要提前在config.json文件中配置

1
2
3
4
5
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
}

客服端无法使用

查看错误日志,可以解决大部分问题

参考文章

http://bbs.itzmx.com/thread-89057-1-1.html

https://cao0507.github.io/2019/02/15/v2ray实现科学上网/

Github源码 https://github.com/v2ray/v2ray-core

https://www.stackcc.com/2018/11/08/ssr-vps/

客户端 https://www.jianshu.com/p/fdecbbf18e31

V2rayU,基于v2ray核心的mac版客户端 https://github.com/yanue/V2rayU

https://www.rultr.com/tutorials/proxy/2268.html

螃蟹 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!