Notes and thoughts from Tony

V2Ray 简单部署

Comments

关于 V2Ray

Project V 是一个工具集合,它可以帮助你打造专属的基础通信网络。Project V 的核心工具称为V2Ray,其主要负责网络协议和功能的实现,与其它 Project V 通信。V2Ray 可以单独运行,也可以和其它工具配合,以提供简便的操作流程。

更多的信息和资料请参阅:https://v2ray.com/

V2Ray 更像个工具平台,支持一系列的协议,当然也支持 Shadowsocks,只不过从最近的稳定性和可用性来看,不推荐使用 ss。本文使用的是 VMess 的协议。

部署

以下操作基于已经部署完 VPS,并使用 root 用户登录的前提下。具体可以参考文章:科学上网完全指南

下载 V2Ray

[root@ss-1 ~]# wget https://install.direct/go.sh
--2019-06-24 07:32:51--  https://install.direct/go.sh
正在解析主机 install.direct (install.direct)... 104.31.178.6, 104.31.179.6, 2606:4700:30::681f:b306, ...
正在连接 install.direct (install.direct)|104.31.178.6|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [text/plain]
正在保存至: “go.sh”

    [ <=>                                             ] 13,871      --.-K/s 用时 0s

2019-06-24 07:32:51 (81.7 MB/s) - “go.sh” 已保存 [13871]

然后执行脚本安装 V2Ray:

[root@ss-1 ~]# bash go.sh
Installing V2Ray v4.19.1 on x86_64
Downloading V2Ray: https://github.com/v2ray/v2ray-core/releases/download/v4.19.1/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   2026      0 --:--:-- --:--:-- --:--:--  2033
100 11.2M  100 11.2M    0     0  4894k      0  0:00:02  0:00:02 --:--:-- 7245k
Updating software repo
http://mirror.nodesdirect.com/epel/7/x86_64/repodata/d61cfa966bb2988b5ecc41dc76376385f8d0094d473a3d2bfb26c0416adda7eb-updateinfo.xml.bz2: [Errno 14] HTTP Error 404 - Not Found
正在尝试其它镜像。
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/.

https://mirror.vcu.edu/pub/gnu%2Blinux/epel/7/x86_64/repodata/ac968a1fb8c66bbce1c8f8e5f524fad2163e3dd799f35a02fd138ed8ae0f6797-filelists.sqlite.bz2: [Errno 14] HTTPS Error 404 - Not Found
正在尝试其它镜像。
http://mirror.us.leaseweb.net/epel/7/x86_64/repodata/8b3a849ac7aae91918aba9fb66c2d2532e9bb39a2700c8168eff11ad0b6e7b7e-other.sqlite.bz2: [Errno 14] HTTP Error 404 - Not Found
正在尝试其它镜像。
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:11234
UUID:62b1262c-8c69-4f04-aa33-b45bf1eb8414
Created symlink from /etc/systemd/system/multi-user.target.wants/v2ray.service to /etc/systemd/system/v2ray.service.
V2Ray v4.19.1 is installed.

以上的 PORT:11234UUID:62b1262c-8c69-4f04-aa33-b45bf1eb8414,在后面会用到。

启动 V2Ray

systemctl start v2ray

开启防火墙

这个步骤一定不要漏,否则后面配置再久也没用。CentOS 7.0 默认使用的是 firewall 作为防火墙。

 开启端口

firewall-cmd –zone=public –add-port=80/tcp –permanent

命令含义:

– zone #作用域 – add-port=80/tcp #添加端口,格式为:端口/通讯协议 – permanent #永久生效,没有此参数重启后失效

[root@ss-1 ~]# firewall-cmd --zone=public --add-port=11234/tcp --permanent
success

以上的 11234 来自于执行脚本安装输出中的 PORT:11234。然后可以使用 firewall-cmd --list-ports 查看配置。

如果是 CentOS 6.0,则应该是 iptables。

命令:

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 11234 -j ACCEPT

systemctl restart iptables.service #重启防火墙使配置生效

客户端安装

我使用的是 Mac,所以我选用的是 V2RayX。其他平台可以在这里选择下载。

服务器端配置

V2Ray 配置使用 json 格式,相对复杂。当然如果是程序猿,应该会感到亲切的。服务器端默认的配置路径 /etc/v2ray/config.json

编辑配置 vi /etc/v2ray/config.json

{
  "inbounds": [{
    "port": 11234,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "62b1262c-8c69-4f04-aa33-b45bf1eb8414",
          "level": 1,
          "alterId": 64
        }
      ]
    }
  }],
  "outbounds": [{
    "protocol": "freedom",
    "settings": {}
  },{
    "protocol": "blackhole",
    "settings": {},
    "tag": "blocked"
  }],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "blocked"
      }
    ]
  }
}

必要的解释:

"port": 11234,就是之前提到的端口。注意,这是服务器的端口。 "id": "62b1262c-8c69-4f04-aa33-b45bf1eb8414",,这是客户端 id,需要与客户端的配置一致,后面会提到。 "level": 1,"alterId": 64 在后面客户端配置也会用到,配置一致就可以了。

客户端配置

打开 V2RayX 后,查看其菜单,打开 Configure

v2ray-01

然后按照上面 json 的配置填入相应的配置。

v2ray-02

确定后再在菜单里面勾选 Load core。若前面的步骤没问题,则此时应该可以科学上网了。

排错及优化

这里只提供基本的思路和方法。

V2Ray 是有日志的,方便我们排错。客户端的配置和日志这样查看。

v2ray-03

服务端的日志需要先配置下,才能会进行记录。

编辑配置 vi /etc/v2ray/config.json

添加配置,注意,不要漏掉英文状态的逗号。

{
  "inbounds": [{
    "port": 11234,
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "62b1262c-8c69-4f04-aa33-b45bf1eb8414",
          "level": 1,
          "alterId": 64
        }
      ]
    }
  }],
  "outbounds": [{
    "protocol": "freedom",
    "settings": {}
  },{
    "protocol": "blackhole",
    "settings": {},
    "tag": "blocked"
  }],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["geoip:private"],
        "outboundTag": "blocked"
      }
    ]
  },
  "log": {
    "loglevel": "info",
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log"
  }
}

这样,便可以通过命令 tail -f /var/log/v2ray/error.log 查看服务器端的日志。我在第一次配置时漏掉了开启防火墙端口,便是通过查看日志之后推测出来的。

另外,我们使用 tcp 协议,可以进行 HttpHeader 的伪装。具体可以参见这里

关键配置是:

"streamSettings": {
        "network": "tcp",
        "tcpSettings": {
          "header": {
            "type": "http",
            "response": {
              "version": "1.1",
              "status": "200",
              "reason": "OK",
              "headers": {
                "Content-Type": ["application/octet-stream", "application/x-msdownload", "text/html", "application/x-shockwave-flash"],
                "Transfer-Encoding": ["chunked"],
                "Connection": ["keep-alive"],
                "Pragma": "no-cache"
              }
            }
          }
        }
      }

添加在服务器配置的 inbounds 中,与 port 同级。同时在客户端的配置中也要添加,只不过是添加在 outbounds 中。

优化主要是用 BBR。

注意,一定要检查系统版本。以下是在 CentOS 7 下的版本,如果其他版本,重启时系统就起不来了。如果是 CentOS 8,看后面。

wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh
TCP加速 一键安装管理脚本 [v1.3.1]
  -- 就是爱生活 | 94ish.me --

 0. 升级脚本
————————————内核管理————————————
 1. 安装 BBR/BBR魔改版内核
 2. 安装 BBRplus版内核
 3. 安装 Lotserver(锐速)内核
————————————加速管理————————————
 4. 使用BBR加速
 5. 使用BBR魔改版加速
 6. 使用暴力BBR魔改版加速(不支持部分系统)
 7. 使用BBRplus版加速
 8. 使用Lotserver(锐速)加速
————————————杂项管理————————————
 9. 卸载全部加速
 10. 系统配置优化
 11. 退出脚本
————————————————————————————————

 当前状态: 已安装 BBR 加速内核 , 未安装加速模块

 请输入数字 [0-11]:

选择 1 就好了。安装完成后需要重启 VPS,然后再次启动 V2Ray,systemctl start v2ray,再运行刚才的脚本 ./tcp.sh,选择 5,5. 使用BBR魔改版加速,就完成了。

CentOS 8 默认内核版本为 4.18.x,内核版本高于 4.9 就可以直接开启 BBR,所以 CentOS 8 启用 BBR 非常简单。

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

然后重启一下系统。

sysctl -n net.ipv4.tcp_congestion_control
lsmod | grep bbr

如果输出包含 BBR,说明启用成功。

实际上还有更多优化,但是实在是没时间搞,暂时先这样。

另外,iOS 客户端,使用的是 Kitsunebi。