Categories
V2ray

v2ray最快手动纯净部署

v2ray+vmess/vless+tls+websocket+nginx最快手动纯净部署

准备工作:

一台vps带公网IP,ubuntu 18.04+ 即可,root用户

一个解析到你vps公网IP的域名【如 vmess.v2ray.one】

第一部分 [ 手动配置v2ray ]

# 配置系统时区为东八区

rm -f /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# ubuntu官方源安装nginx和依赖包并设置开机启动

apt clean all && apt update
apt install nginx curl pwgen openssl netcat cron uuid-runtime -y
systemctl enable nginx
systemctl start nginx
ufw disable

# 开始部署之前,我们先配置一下需要用到的参数,如下:

# “域名,端口,uuid,ws路径,ssl证书目录

# ngin和v2ray配置文件目录

#1.设置你的解析好的域名,如本例子中的vmess.v2ray.one
domainName="vmess.v2ray.one"

#2.随机生成v2ray需要用到的服务端口
port="`shuf -i 20000-65000 -n 1`"

#3.随机生成一个uuid
uuid="`uuidgen`"

#4.随机生成一个websocket需要使用的path
path="/`pwgen -A0 6 8 | xargs |sed 's/ /\//g'`"

#5.以时间为基准随机创建一个存放ssl证书的目录
ssl_dir="$(mkdir -pv "/usr/local/etc/v2ray/ssl/`date +"%F-%H-%M-%S"`" |awk -F"'" END'{print $2}')"

#6.定义nginx和v2ray配置文件路径
nginxConfig="/etc/nginx/conf.d/v2ray.conf"
v2rayConfig="/usr/local/etc/v2ray/config.json"

# 检测域名解析是否正确

#域名解析正确不会输出任何内容,如果不正确会退出当前终端
local_ip="$(curl ifconfig.me 2>/dev/null;echo)"
resolve_ip="$(host "$domainName" | awk '{print $NF}')"
if [ "$local_ip" != "$resolve_ip" ];then echo "域名解析不正确";exit 9;fi

# 使用v2ray官方命令安装v2ray,并设置开机启动

bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh) --version 5.1.0
systemctl enable v2ray
# 修正官方5.1+版本安装脚本启动命令错误
grep -r 'v2ray -config' /etc/systemd/system/* | cut -d: -f1 | xargs -i sed -i 's/v2ray -config/v2ray run -config/' {}
systemctl daemon-reload

# 安装acme,并申请加密证书

#会提示安装socat,这里使用alpn模式,不用理会

source ~/.bashrc
if nc -z localhost 443;then /etc/init.d/nginx stop;fi
if nc -z localhost 443;then lsof -i :443 | awk 'NR==2{print $1}' | xargs -i killall {};sleep 1;fi
if ! [ -d /root/.acme.sh ];then curl https://get.acme.sh | sh;fi
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
~/.acme.sh/acme.sh --issue -d "$domainName" -k ec-256 --alpn
~/.acme.sh/acme.sh --installcert -d "$domainName" --fullchainpath $ssl_dir/v2ray.crt --keypath $ssl_dir/v2ray.key --ecc
chown www-data.www-data $ssl_dir/v2ray.*

# 把续签证书命令添加到计划任务

echo -n '#!/bin/bash
/etc/init.d/nginx stop
wait;"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" &> /root/renew_ssl.log
wait;/etc/init.d/nginx start
' > /usr/local/bin/ssl_renew.sh
chmod +x /usr/local/bin/ssl_renew.sh
(crontab -l;echo "15 03 * * * /usr/local/bin/ssl_renew.sh") | crontab

# 配置nginx,执行如下命令即可添加nginx配置文件

echo "
server {
	listen 80;
	server_name "$domainName";
	return 301 https://"'$host$request_uri'";

}
server {
	listen 443 ssl http2 default_server;
	listen [::]:443 ssl http2 default_server;
	server_name "$domainName";

	ssl_certificate $ssl_dir/v2ray.crt;
	ssl_certificate_key $ssl_dir/v2ray.key;
	ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:"!"MD5;
	ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

	root /usr/share/nginx/html;
	
	location "$path" {
		proxy_redirect off;
		proxy_pass http://127.0.0.1:"$port";
		proxy_http_version 1.1;
		proxy_set_header Upgrade "'"$http_upgrade"'";
		proxy_set_header Connection '"'upgrade'"';
		proxy_set_header Host "'"$http_host"'";
	}

}
" > $nginxConfig

# 配置v2ray,执行如下命令即可添加v2ray配置文件

echo '
{
  "log" : {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbound": {
    "port": '$port',
    "listen": "127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "decryption":"none",
      "clients": [
        {
          "id": '"\"$uuid\""',
          "level": 1
        }
      ]
    },
   "streamSettings":{
      "network": "ws",
      "wsSettings": {
           "path": '"\"$path\""'
      }
   }
  },
  "outbound": {
    "protocol": "freedom",
    "settings": {
      "decryption":"none"
    }
  },
  "outboundDetour": [
    {
      "protocol": "blackhole",
      "settings": {
        "decryption":"none"
      },
      "tag": "blocked"
    }
  ],
  "routing": {
      "domainStrategy": "IPIfNonMatch",
      "rules": [
        {
          "domain": [
              "geosite:cn"
          ],
          "outboundTag": "blocked",
          "type": "field"
        },      
        {
            "ip": [
                "geoip:cn"
            ],
            "outboundTag": "blocked",
            "type": "field"
        }
      ]
  }
}
' > $v2rayConfig

# 默认配置vmess协议,如果指定vless协议则配置vless协议
[ "vless" = "$2" ] && sed -i 's/vmess/vless/' $v2rayConfig

# 完工,你现在只需要重启v2ray和nginx即可

systemctl restart v2ray
systemctl status -l v2ray
/usr/sbin/nginx -t && systemctl restart nginx

# 输出配置信息

echo
echo "域名: $domainName" 
echo "UUID: $uuid" 
[ "vless" = "$2" ] && echo "协议:vless" || echo "额外ID: 0" 
echo "安全: tls"
echo "传输: websocket"
echo "路径: $path"

#:为适应v2ray-core目前和未来的版本更新,vmess协议额外ID选项已移除,客户端vmess协议额外id配置为0即可,当前最新版v2rayN客户端已默认为0,另外最新v2rayN需要选择内核类型否则连接不成功,v2rayN客户端配置图片:https://github.com/HappyLife-page/v2ray/issues/2#issuecomment-1282005206

31 replies on “v2ray最快手动纯净部署”

acme.sh作者更新了acme.sh版本为3.0,默认ssl证书供应商已更换,修改了申请证书的规则。我这里已同步修正脚本,现测试无问题,你可以再试试~

首先你需要明白cloudflare代理模式的结构:
browser——cloudflare——server

所以你需要修改cloudflare的ssl模式为full
默认的flexible模式表:
browser——cloudflare加密,而cloudflare——server不加密
你v2ray是加密服务,所以cloudflare和server线路之间不加密根本无法连接

full模式表:browser——cloudflare——server 之间都加密

大佬你好,我想按照你的教程写一个shell脚本,并使用teddysun的v2ray docker,脚本运行后,nginx和dokcer都能正常启动,但是节点无法使用,测速显示链接超时,请问能帮我看下有啥问题吗,感谢
脚本见:https://notepad.pw/code/41ncqsmwt

浏览器打开域名查看默认站点能否打开
默认站点无问题的话看证书是否生效
具体问题你可以发出来错误日志看看

wspath=$(cat /dev/urandom | head -1 | md5sum | head -c 5)
这里是错误的,改为如下试试
wspath=”`cat /dev/urandom | head -1 | md5sum | head -c 5`”

非常感谢大佬的分享,照视频部署直接就成功了,但是感觉响应有点慢,速度也不是很好,有什么办法提升下么,额外id已经让我改成1了

vultr的大多中国周边的云服务(韩国,日本,新加坡等)貌似网络都非常不好,延迟100左右是可以,但是关键丢包严重(启动一台新vps后应该首先从本地ping测,关键看是否丢包,延迟200左右都没为题,所以你看到视频里播主用的就是欧洲的)
目前我这里了解到的最具性价比的vps有: Amazon的Lightsail,阿里轻量云,腾讯轻量云
任何时间段网络都超好的只有谷歌云香港
你可以考虑 腾讯轻量云香港,阿里轻量香港,Amazon的Lightsail的日本或新加坡

非常感谢你的耐心回复,我用了vultr的美国服务器尝试了下,速度上来了,丢包也很低,过两天尝试下腾讯或阿里的轻量。
另外,关于v2ray,我想除了ws再添加个tcl的协议可以么,我有的软件走的tcl协议,不知道现在的协议规则能不能支持tcl协议

websocket属于应用层(第7层)协议,以TCP协议(第4层)为基础,他们之间并不矛盾
websocket应该和http做对比。http是无状态单向协议,而websocket是有状态双向协议
所以v2ray使用websocket协议是比较优的方案
你不需要再修改你的配置

大老能出一期x-ui面板的安装教程吗?最近一直在搞这个,一直卡在证书审请和nginx的配置上面。

真·最快最无脑的tls+ws+nginx的v2ray部署方式了,一路复制粘贴下来没报任何错(除了几个环境变量是自己手动设的),太丝滑了,感谢PO主

今天使用这个批处理脚本好像有问题,不管是搭建VMESS 还是VLESS节点都不通,不能正常使用。一开始还以为是路径的问题。生成路径是这样的路径: /uwaemo/vejaez/ughome/ciejoo/queofu/exohno/daegem/uofahx

路径是随机生成的,每个人每次执行都不一样,如果使用的是v2rayN最新版,需要右上角选择内核类型;如果有错误日志发出来最好

PO主这篇文章真的太棒了!有深入浅出的讲解,有懒人一键的脚本!一次过,NB!还有两个问题想跟博主探讨下,我的便宜域名只有一年的有效期,一年后就要换别的便宜域名,假定不更换服务器,需要改哪些内容?证书和nginx配置的?有没有办法不用域名改用固定IP?以及,这里的nginx是起到什么作用的,v2ray是在nginx之后的吗?

不更换服务,只更换域名,需要重新申请证书,并且修改nginx配置和acme配置。生不带来死不带去。一支域名年付10美金而已。另外该方案必须要使用域名。nginx的作用是一个代理;对于gfw来说nginx像是一个web服务,并且是https的,符合当前web主流标准。v2ray是在nginx之后

谢谢博主!但感觉我这刚用了几天,就被gfw干掉了……博主知道有哪些方法可以帮助判断问题出在自己配置还是gfw上

我在客户端电脑上上创建套接字尝试去连接服务端的443端口失败了,但是80端口,22端口都能连接成功,PO主能帮忙分析下可能的原因不T_T,C++程序员对nginx实在是不了解,也不知道怎么看nginx的日志/配置啥的

另外我之前在用Trojian的时候,有篇教程说应该把正常流量的80端口、443端口做一个简单的网页,更有欺骗性,不知道v2ray有这个必要吗?

Leave a Reply

Your email address will not be published.