打开 v2ray-core Github 的release界面,会看到开发者的一句话:“特别的爱给特别的你”,所以我沿用了这句话作为这篇服务器搭建教程的前言,也算是对开发者的致敬吧。 那么,什么是V2Ray呢? 由于天朝的封锁,科学上网变得越来越困难,V2Ray就是一个代理的平台,相比Shadowsocks它有更高的稳定性和加密的Vmess传输协议,被封锁的可能性大大低于Shadowsocks。具体关于它的介绍可以参考V2Ray的官方文档和说明 好的,闲话不说,直接进入正题

本文目录:

1.新的服务器的一些必须的配置

  • 准备
  • 安装Git
  • 配置终端fish

2.如何在海外的服务器上搭建V2Ray

  • 安装V2Ray
  • 设置服务器时间
  • 配置防火墙
  • 设置服务端配置
  • 设置服务器管理工具

3. 如何配置客户端

  • Android 客户端的配置
  • macOS 客户端的配置
  • Windows 客户端的配置
  • iOS 客户端的配置

1.新的服务器的一些必须的配置

准备:

  • 一台位于海外的,不被封锁的服务器
  • 一个ssh软件,macOS 和 Linux 下一般使用ssh,Windows推荐使用 Xshell
  • 一个能够编辑json文件的文本编辑器(推荐Atom 和 SublimeText)

在这里我使用了通过Github Education申请到的Github Student Pack,只要通过它的学生认证,你就可以得到一个开发工具包,其中里面有DigitalOcean服务器的50美金代金券,DigitalOcean的服务器位于海外,不被封锁,非常适合开发者使用。具体怎么申请这个开发工具包和购买服务器,可以参考网上教程,我们这里不予赘述。

实例教程配置环境

  • SanFrancisco 2区服务器
  • 最低价格5刀一个月的配置
  • Debian 9.2 x64

安装Git:

Git是很重要的依赖,一般在第一次登录服务器的时候,就要配置好Git。 在登录DigitalOcean的服务器以后,我们首先要更新apt的源:

sudo apt-get update

更新完包管理器的源以后,直接下载安装Git:

sudo apt-get install git-core

这样我们就配置好了Git: 配置Git

配置终端fish:

fish 是一款很方便的终端shell 软件,个人喜好,如果不喜欢也可以直接就使用系统默认的bash 首先,下载安装fish shell:

sudo apt-get install fish

安装好了以后我们推荐fish的一个开源配置Oh-My-Fish,具体可以查看它的官网 打开终端,输入:

sudo apt-get install curl

安装好了curl以后:

curl -L https://get.oh-my.fish | fish

安装好fish 这样就把fish完整地安装好了,接下来修改登录使用的shell: 输入以下命令来查看fish的安装位置:

which fish

然后再输入

chsh -s /你的fish的位置/

更改默认登录终端为fish 更改默认shell 这样我们的开始前的设置就配置好了

2.如何在海外的服务器上搭建V2Ray

安装V2Ray:

查看V2Ray用户手册,发现官网直接提供了下载的脚本,打开终端输入:

$ wget https://toutyrater.github.io/install-release.sh

执行一般不会出错,执行完成以后再次输入安装命令:

$ sudo  bash install-release.sh 

输出如下表示安装成功了: 安装 安装成功

设置服务器时间:

V2Ray对于服务器时间的设置要求十分严格,请求时间要是和服务器时间不一致(相差1min以内),就会认为是无效的服务器请求,所以安装好v2ray以后第一步就是要设置服务器实践与我们本地的时间一致,打开两个终端,一个连接到服务器另外一个保持本地。同时输入:

$ date -R

观察时间 观察时间的差别,将服务器同步到本机时间即可,输入以下命令修改时间为东8区:

$ sudo  rm /etc/localtime

删除本地时间区文件,链接新的东八区时间文件,这里输入的是上海的:

$ sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

再次输入date -R检查时间: 修改时区 修改完时间以后,我们要同步硬件时间,这样重新启动服务器的时候就不会自动重置为原来的时间了,在这里我们要使用ntpdate这个命令,如果系统没有的话,自己下载一个:

$ sudo apt-get install ntpdate

接下来设置时间校准:

$ sudo ntpdate time.nist.gov

这样,我们关于时间的设置就结束啦

配置防火墙:

这里我们使用的是德班系统,和ubuntu一样,用户可以选择在系统上设置防火墙:

$ sudo apt-get install ufw 

安装好ufw以后,我们将它启动,并且查看它的运行状态:

$ sudo ufw enable | status  

我们可以控制端口的开放和关闭,我们开放连接服务器用的22端口和后面要设置的代理端口,这个端口号可以自己设置:

$ ufw allow 22 

防火墙 这样我们就配置好了防火墙

设置服务端配置:

V2Ray的服务端设置是基于json的配置文件:config.json,一般放置在/etc/v2ray/目录下。这里不赘述关于它的各种配置,我们推荐新手直接使用一些服务端管理工具,如:v2ray.fun 安装v2ray.fun命令:

$ wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/v2ray.fun/master/install.sh && bash install.sh

接下来我们稍微介绍一下关于服务端最基本的配置要求,安装好v2ray以后,在/etc/v2ray/目录下会有一个config.json文件,这个就是我们的代理服务端配置文件了,使用终端编辑软件打开,有这么一段位置:

....省略一段....
 "inbound": {
        "port": 12345,
        "protocol": "vmess",
        "settings": {
            "clients": [
                {
                    "id": "5da8771d-1c5f-4007-a36a-1924e7cd25b5",
                    "level": 1,
                    "alterId": 64
                }
            ]
        },
        "streamSettings": {
            "network": "kcp"
        },
        "detour": {
            "to": "vmess-detour-565571"
        }
    },
....省略一段....

这里就是你的用户连接设置了,port代表的是连接的远程端口,就是我们在防火墙里面开启的那个端口,这个是可以由用户自己设置的,protocol代表着传输协议是vmessclients里面包含的就是具体的用户连接设置;id在这里是用uuid来表示的唯一链接密码,可以去很多随机生成网站生成一个uuid,客户端的配置要和服务端一致才能够成功连接。同样alterId指的是一个动态的用户连接数,这个数越大越不容易给流量检测工具检测到,但是太大的话会严重占用计算机内存,所以一般我们设置一个在50到100之间的数字,注意这个参数在用户的配置文件里面也要保持一致。 同时,我们要设置v2ray的服务器随着服务器的开机自动启动,因为ssh关闭以后,服务器上的v2ray也就随之关闭了,我们只能通过一些开机配置脚本来保持它在后台的工作:

#!/bin/sh
### 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: socksv5 based proxy written by go.
# Description:       v2ray is a socksv5 proxy written by go. Connection can be crypto by aes or
#            des. this might help for people in China to corss GFW.
### END INIT INFO

# Author: Shell Xu <shell909090@gmail.com>
# Modify: Isulew Li <netcookies@gmail.com>

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin  
DESC=v2ray             # Introduce a short description here  
NAME=v2ray             # Introduce the short server's name here  
DAEMON=/usr/bin/v2ray  #这里改成v2ray程序的绝对路径
PIDFILE=/var/run/$NAME.pid  
LOGFILE=/var/log/$NAME.log  
SCRIPTNAME=/etc/init.d/$NAME

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

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()  
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    #   3 if configuration file not ready for daemon
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null 
        || return 1
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background 
         --no-close -m -- $DAEMON_OPTS >> $LOGFILE 2>&1 
        || return 2
    chmod -f 600 $LOGFILE
    # Add code here, if necessary, that waits for the process to be ready
    # to handle requests from services started subsequently which depend
    # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()  
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    # Wait for children to finish too if this is a daemon that forks
    # and if the daemon is only ever run from this initscript.
    # If the above conditions are not satisfied then add some other code
    # that waits for the process to drop all resources that could be
    # needed by services started subsequently.  A last resort is to
    # sleep for some time.
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {  
    #
    # If the daemon can reload its configuration without
    # restarting (for example, when it is sent a SIGHUP),
    # then implement that here.
    #
    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE
    return 0
}

case "$1" in  
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
  ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  reload|force-reload)
    #
    # If do_reload() is not implemented then leave this commented out
    # and leave 'force-reload' as an alias for 'restart'.
    #
    log_daemon_msg "Reloading $DESC" "$NAME"
    do_reload
    log_end_msg $?
    ;;
  restart|force-reload)
    #
    # If the "reload" option is implemented then remove the
    # 'force-reload' alias
    #
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
        # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $SCRIPTNAME {start|stop|status|reload|restart|force-reload}" >&2
    exit 3
    ;;
esac

复制这段配置,将它保存为v2ray,通过ssh上传到服务器上的/etc/init.d/目录下: 上传自启动配置 为上传的文件加载权限:

$ sudo chmod +x /etc/init.d/v2ray

设置开机启动:

$ sudo update-rc.d v2ray defaults

这样就算配置好了

设置服务器管理工具:

我们刚才安装好了v2ray.fun这个服务器管理脚本,安装完成以后,可以直接输入v2ray打开。 我们现将系统的v2ray服务开启:

$ sudo systemctl start v2ray

然后查看v2ray的运行状态:

$ service v2ray status

v2ray状态 然后打开v2ray.fun管理工具: v2ray.fun 按照他的指示,可以很好的修改服务器配置: v2ray.fun修改配置 到这里,我们的服务端配置就已经配置好了。

3. 如何配置客户端

配置好了我们的服务器端,现在很重要的就是客户端的配置,只有配置好了我们的客户端,我们才能科学上网。

Android 客户端的配置:

准备

使用方法

  • 打开Actinium软件
  • 点击软件右上角三个点,选择添加配置
  • 下载上面配置,并将配置导入安卓手机
  • 在软件中添加导入的配置文件,弹出是否转化的对话框,选择确定
  • 点击右下角红色的按钮开始学习马克思主义
  • 再次点击(打勾的形状)结束马克思主义的学习

macOS 客户端的配置:

准备

  • 一台运行macOS的电脑
  • 上述格式为:json的配置文件
  • v2ray-core macOS版本下载
  • V2RayX 软件 V2RayX.dmg下载
  • HomeBrew macOS的包管理工具
  • 终端软件
  • 浏览器代理插件(这里使用Chrome 的SwitchyOmega插件)

使用方法

  • 打开终端输入命令添加v2ray-core的homebrew Tap:
    brew tap kofj/v2ray
    
  • 使用brew 在系统安装v2ray-core:
    brew install v2ray-core
    

    1. 使用图形界面客户端

  • 下载V2RayX软件并安装
  • 下载上述格式为json的配置文件,并将文件名称设置为:config.json
  • config.json配置文件放置到目录:/Applications/V2RayX.app/Contents/MacOS/
  • 如果不想手动移动配置文件,可以采用图形化设置

2. 使用V2Ray核心

  • 使用终端打开v2ray-core的话,直接将配置文件命名为:config.json放置到/Users/用户名
  • 然后直接在终端输入:
    v2ray
    

3. 上述两种方法都要使用的浏览器配置

  • 打开浏览器,保证之前开启的v2ray的终端窗口在回话不被关闭(或者是V2RayX软件不关闭)
  • 在谷歌商店里面搜索:SwitchyOmega ,下载地址并安装
  • 打开浏览器SwitchyOmega设置:新建一个情景模式:

    网址协议:默认 代理协议:SOCKS5 代理服务器:127.0.0.1 代理端口:1080 删除“不代理的地址列表”里面原有的东西

  • 设置好后,点击左下角:应用选项,并且将默认情景模式切换为自己新建的这个

4. 能否正常使用检测

  • 打开一个新的终端:输入以下命令检测:
    curl -v --socks5-hostname 127.0.0.1:1080 https://www.google.com/
    
  • 若是显示大量谷歌官网数据,那么说明代理成功,去试一试浏览器的吧!

注意

  • 使用v2ray-core不用打开V2RayX这个软件,但是得保持开启v2ray的终端一直运行
  • 使用v2ray-core每次要使用代理的时候,只需要终端输入:
    v2ray
    

    Windows 客户端的配置:

准备

  • 一台运行windows的计算机
  • v2ray-core windows版本
  • config.json 配置文件(本教程已贴出)

使用方法

1. 安装v2ray-core

  • 安装v2ray-core,先下载官方软件(下载x64)(下载x32)
  • 将下载好的文件解压,里面有一堆零散的文件。将自己的配置命名为config.json并且放在与解压得到的v2ray同一目录下,覆盖原有的config.json
  • 将解压得到的文件夹整个添加到环境变量里面(具体怎么操作请自行搜索)

2. 设置浏览器代理

  • 打开浏览器,保证之前开启的v2ray的终端窗口在回话不被关闭(或者是V2RayX软件不关闭)
  • 在谷歌商店里面搜索:SwitchyOmega ,下载地址并安装
  • 打开浏览器SwitchyOmega设置:新建一个情景模式:

    网址协议:默认 代理协议:SOCKS5 代理服务器:127.0.0.1 代理端口:1080 删除“不代理的地址列表”里面原有的东西

  • 设置好后,点击左下角:应用选项,并且将默认情景模式切换为自己新建的这个

3. 设置完成

  • 设置完成以后每次要使用代理时,只要打开cmd或者按下win+R里面输入v2ray,正常运行v2ray即可
  • 注意要保持运行v2ray的窗口一直在后台运行

iOS 客户端的配置:

别废话,先下载客户端ShadowRocket,现在这款软件已经在国区下架,有能力使用美区账号下载的童鞋或是能够找到下载账号的童鞋,我觉得配置已经不是什么难事了…..