V2ray超强代理

V2ray具有高超的出墙性能,速度快,经混淆后的流量几无特征更易于穿墙。本文介绍 V2Ray+Caddy组合方式。

V2ray:用于构建代理绕过网络限制、审查、翻墙的平台
Caddy: 作为部署代理的前端web服务器。

本方法实际上是建立一个网站(网页),将代理隐身其中,出墙就像是实实在在的在浏览网站,消除代理的特征信号,提高出墙代理安全性,这样的思路一直是以前的出墙软件难以实现的,自从v2ray发布后,众多的网友不断推进v2ray用法,目前成为最好的出墙方法。

此组合方案还连带着HTTP/2(H2)或WebSocket网络传输协议;TLS安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。这个了解一下即可,部署代理过程中会遇到相关问题的处理。

一、准备工作

1、一个域名, 推荐freenom免费域名,注册申请和设置域名解析都很方便(方法见这里)。

2、远程主机( VPS ),部署的操作系统是 Debian ≧ 9,建议Debian 10,或者 Ubuntu ≧ 16.04 ;本代理组合方案不适用于 CentOS。

二、安装服务器端之前的几项基础性工作

1、首先参考自建代理准备,修改远程主机的SSH设置和设置防火墙。防火墙设置增加下面两条规则:

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

使用下面命令编辑防火墙设置:

nano /etc/iptables/rules.v4 

Ctrl+X保存修改和退出。执行下面命令载入规则:

/etc/init.d/netfilter-persistent  reload

2、更新系统:

apt update && apt -y upgrade

看到上面的终端屏幕好象太满了,可以用“ clear ” 这个命令清屏。

3、接下来我们要安装依赖环境:

a. 先安装cURL:

apt install curl -y

看到我这个系统里已经有了最新版的curl了,就当空跑一次了。

b. 安装 unzip 和 daemon:

apt install unzip daemon -y

哇,屏幕又满了,再用“ clear ”(回车) 清屏,如下图:

4、编辑sysctl.conf配置文件:

为代理服务器优化配置,提升TCP并发处理能力,需要调整系统控制参数,用下面命令打开:

nano /etc/sysctl.conf

将光标移至最下无“#”处:

将下面参数配置复制粘贴到里面:

# max open files
fs.file-max = 51200
# max read buffer
net.core.rmem_max = 67108864
# max write buffer
net.core.wmem_max = 67108864
# default read buffer
net.core.rmem_default = 65536
# default write buffer
net.core.wmem_default = 65536
# max processor input queue
net.core.netdev_max_backlog = 4096
# max backlog
net.core.somaxconn = 4096
# resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
# reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
# turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
# short FIN timeout
net.ipv4.tcp_fin_timeout = 30
# short keepalive time
net.ipv4.tcp_keepalive_time = 1200
# outbound port range
net.ipv4.ip_local_port_range = 10000 65000
# max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
# max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
# TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
# turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1
# for high-latency network
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control = bbr

Ctrl+X保存修改和退出。

激活更改:

sysctl -p

5、编辑安全限制配置文件 (此步非必须,可做可不做):

a. 将文件数限制增加到51200:

nano /etc/security/limits.conf

将光标移至最下无“#”处,添上下面两行:

* soft nofile 51200
* hard nofile 51200

Ctrl+X保存修改和退出。

b. 将当前文件数限制设置为51200:

ulimit -SHn 51200

c. 编辑永久配置文件:

nano /etc/profile

将下面设置粘贴到空行处:

ulimit -SHn 51200

Ctrl+X保存修改和退出。

三、安装与部署服务器端

1、安装 Caddy

Caddy是一个前端web服务器,因Caddy在默认情况下自动使用 HTTPS,可以很方便用来做一个代理的伪装网站、反向代理、SSL自动续期。依次输入:

wget -P /usr/local/bin "https://daofa.cyou/c1/caddy.tar"
tar -xvf /usr/local/bin/caddy.tar -C /usr/local/bin
rm /usr/local/bin/caddy.tar

如上图,好像出了一点问题,哦,原来是粘贴命令时少了一个 ”,重来:

确定caddy文件安装在何处,输入:

whereis caddy

显示为:
caddy: /usr/local/bin/caddy

赋予所有权和权限,root拥有caddy文件防止其他账户修改。输入:

chown root:root /usr/local/bin/caddy

修改权限为755,root可读写执行,其他账户不可写。输入:

chmod 755 /usr/local/bin/caddy

允许Caddy绑定到低号端口 ,由于Caddy不会由root运行,使用setcap允许caddy作为用户进程绑定低号端口(服务器需要80和443端口),输入下面命令:

setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

如果出现下面提示
setcap: command not found

那就需要安装 libcap2-bin (如果没有提示,就不用此步)
请输入:

apt install libcap2-bin

检查名为www-data的组和用户是否已经存在
输入:

cat /etc/group | grep www-data

输入:

cat /etc/passwd | grep www-data

注意:你的显示结果如果与上面两张截图一样,不需要下面输入,如果显示不一样,表明其组和用户不存在,则需要创建它们:

groupadd -g 33 www-data
useradd -g www-data --no-user-group --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system --uid 33 www-data

为 Caddy 创建目录,创建文件夹存储Caddy的配置文件,创建文件夹存储Caddy所管理的站点证书:

mkdir /etc/caddy
mkdir /etc/ssl/caddy

允许root及www-data组访问相关文件,允许Caddy写入站点证书文件夹:

依次输入:

chown -R root:root /etc/caddy
chown -R root:www-data /etc/ssl/caddy
chmod 770 /etc/ssl/caddy

创建记录文件
依次输入:

touch /var/log/caddy.log
chown root:www-data /var/log/caddy.log
chmod 770 /var/log/caddy.log

2、创建网站

在代理的前端做一个实实在在的网站,用代理时就象是真正在浏览一个加密网站,提高安全性。

先为您的网站创建目录:

mkdir -p /var/www/html

允许www-data组拥有站点文件夹:

chown -R www-data:www-data /var/www

创建空的Caddy配置文件:

touch /etc/caddy/Caddyfile

向网站添加内容:基本上有二种方式,一种是建立一个简单的网页,另一种是建立一个实实在在的简易网站,可以装一些内容。当用域名访问时,是可以看到真实内容的。

掩护网站建立的位置在 /var/www/html/ 目录中,其中网页启动文件是 index.html。了解网站的网友知道,你自己可以在网上找到很多网站模板(主题)程序,到处都有网站模板(主题)演示,下载一个模板(主题)后,把其全部文件(只要里面的内容文件,不要模板(主题)名目录)复制到 /var/www/html/ 目录中,其中的 启动文件 index.html 一定要在 html/ 目录下,不要放在其它子目录中,就OK了。上传用Bitvise SSH Client的SFTP即可完成。

如果只创建一个网页index.html,可以用下面的方法:

touch /var/www/html/index.html

编辑网页文件:

nano /var/www/html/index.html

将某个无版权的大众网页的源代码复制粘贴进去,然后Ctrl+X保存修改和退出。

3、设置SystemD服务

安装SystemD服务,配置 caddy.service。首先创建 caddy.service 空文件:

touch /etc/systemd/system/caddy.service

在nano编辑器中打开caddy.service:

nano /etc/systemd/system/caddy.service

将下面内容“原封不动”的复制出来,然后右键粘贴到nano编辑框中:

[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

; Do not allow the process to be restarted in a tight loop. If the
; process fails to start, something critical needs to be fixed.
StartLimitIntervalSec=14400
StartLimitBurst=10

[Service]
Restart=on-abnormal

; User and group the process will run as.
User=www-data
Group=www-data

; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy

; Always set "-root" to something safe in case it gets forgotten in the Caddyfile.
ExecStart=/usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID

; Use graceful shutdown with a reasonable timeout
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s

; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
LimitNOFILE=1048576
; Unmodified caddy is not expected to use more than that.
LimitNPROC=512

; Use private /tmp and /var/tmp, which are discarded after caddy stops.
PrivateTmp=true
; Use a minimal /dev (May bring additional security if switched to 'true', but it may not work on Raspberry Pi's or other devices, so it has been disabled in this dist.)
PrivateDevices=false
; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
ProtectHome=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
; … except /etc/ssl/caddy, because we want Letsencrypt-certificates there.
;   This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
ReadWritePaths=/etc/ssl/caddy
ReadWriteDirectories=/etc/ssl/caddy

; The following additional security directives only work with systemd v229 or later.
; They further restrict privileges that can be gained by caddy. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
;CapabilityBoundingSet=CAP_NET_BIND_SERVICE
;AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Ctrl+X保存修改和退出。

设置caddy.service权限:

chown root:root /etc/systemd/system/caddy.service
chmod 644 /etc/systemd/system/caddy.service

重载systemd使其检测到新安装的Caddy服务:

systemctl daemon-reload

4、安装及配置 V2Ray

郑重提醒网友:最好是直接安装官方版V2Ray,就是本教程用到的方法,其实就是简单的命令,并不复杂。而网上有些一键安装包只会省略很少的步骤,却有一些特别的设置,如植入广告、后门等等,这对网友并非都适用,切记!

先下载指令,依次输入:

curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-dat-release.sh

该脚本在运行时会提供 info 和 error 等信息,可参考阅读。

安装和更新 V2Ray,输入:

bash install-release.sh

安装最新发行的 geoip.dat 和 geosite.dat:

bash install-dat-release.sh

生成UUID和设置端口(PORT):

UUID是新版V2Ray代理的通关密码,数字+字母组合,不要用符号,如:

a1199f80-a920-437b-9531-7f86b62533a0
共 32位数字字母组合,8位-4位-4位-4位-12位,中间用连字符“-”连接

那么如何生成这个UUID?
方法一、自己对照格式,编一个就行;
记住:一定要格式正确!

方法二、v2fly官方网站上生成
网址是:https://www.v2fly.org/awesome/tools.html

拟定端口可以选取30000~65535之间的一个数字,比如:33558

准备好UUID和端口后,就可以编辑 V2Ray 服务器配置文件了。

先备份原有的服务器配置文件:

cp /usr/local/etc/v2ray/config.json /usr/local/etc/v2ray/config.json.bak

清空原有内容并打开配置文件:

rm /usr/local/etc/v2ray/config.json && nano /usr/local/etc/v2ray/config.json

将自己的v2ray服务器配置文件内容编辑进去:

{
  "log": {
    "loglevel": "warning",
    "error": "/var/log/v2ray/error.log",
    "access": "/var/log/v2ray/access.log"
  },
  "dns": {},
  "stats": {},
  "inbounds": [
    {
      "settings": {
        "clients": [
          {
            "alterId": 64,
            "id": "a1199f80-a920-437b-9531-7f86b62533a0"
          }
        ]
      },
      "port": 33558,
      "tag": "in-0",
      "streamSettings": {
        "security": "tls",
        "httpSettings": {
          "path": "/ppp22",
          "host": [
            "www.dalaoy.ml"
          ]
        },
        "tlsSettings": {
          "certificates": [
            {
              "certificateFile": "/usr/local/etc/v2ray/v2ray.crt",
              "keyFile": "/usr/local/etc/v2ray/v2ray.key"
            }
          ]
        },
        "network": "h2"
      },
      "protocol": "vmess",
      "listen": "127.0.0.1"
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "blocked",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "outboundTag": "blocked",
        "ip": [
          "geoip:private"
        ],
        "type": "field"
      }
    ]
  },
  "policy": {},
  "reverse": {},
  "transport": {}
}

上面的配置文件内容里,UUID和端口(33558)要换成你自己的;里面的”path”: “/ppp22″,这个“/ppp22” 是可以随意修改为你自己的,但要记住,在后面的配置及客户端配置时要用到,设置相同一致就行;配置文件中的 “host”: “www.dalaoy.ml”,这个“www.dalaoy.ml” 要改为你自己的域名。

Ctrl+X保存修改和退出。

5、配置和启动 Caddy

先用nano打开配置文件:

nano /etc/caddy/Caddyfile

再粘贴下面已经修改为你自己的内容到编辑框中:

http://www.dalaoy.ml {
    redir https://www.dalaoy.ml{url}
}
https://www.dalaoy.ml {
    tls 12345@gmail.com
    log /var/log/caddy.log
    root /var/www/html
    proxy /ppp22 https://localhost:33558 {         
    insecure_skip_verify
    header_upstream X-Forwarded-Proto "https"
    header_upstream Host "www.dalaoy.ml"
  }
  header / {
    Strict-Transport-Security "max-age=31536000;"
    X-XSS-Protection "1; mode=block"
    X-Content-Type-Options "nosniff"
    X-Frame-Options "DENY"
  }
}

注意:上图中红框内的内容都要换成与前面v2ray服务器配置文件相一致的内容(信箱除外,但也要改成你自己的邮箱)。

说明:
a)www.dalaoy.ml:改为你自己的域名,域名前要不要加www都可,即dalaoy.ml和www.dalaoy.ml都可以,但在所有配置中一定要一致就行;
b)12345@gmail.com:改为你自己的邮箱(上面截图中我已经换成了我自己的邮箱ghwtyhdjhgdj5@gmail.com),Caddy将自动与Let’s Encrypt联系以获取SSL证书并在90天到期后自动更新证书;
c)proxy /ppp22 https://localhost:33558
此行的含义是:路径分流,流量转发,将443端口在/v2ray路径收到的流量转发给33558端口,在后面我们会让v2ray监听33558这个端口;
/ppp22 是路径,这个路径可以是空的/,也可自己指定的任何字母数字组合,但一定要与上面v2ray服务器配置文件中的路径相同,以及后面的客户端配置路径相同;
33558 这个端口前面已述,要自己设置一个;
d)Caddy将自动与Let’s Encrypt联系以获取SSL证书。它将证书和密钥放在“/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你自己的域名/”目录中;
e)此文件保存后,Caddy会随即向Let’s Encrypt发出SSL证书申请,一般很快在一分钟就可完成,但可能有人会遇到特殊情况比较久一些才会完成。
f)其中的mail,是申请证书用的,用真实的mail可以得到到期通知等,当然Caddy是自动续期,随意填一个mail,符合mail的格式,也是可以的。

赋予Caddy配置文件权限:

chown root:root /etc/caddy/Caddyfile
chmod 644 /etc/caddy/Caddyfile

启动Caddy之前,先重载systemd使其检测到新安装的Caddy服务:

systemctl daemon-reload

输入下面命令启动Caddy:

systemctl start caddy

检查Caddy是否正在运行并且正在侦听端口80和443上:

systemctl status caddy

看到如下绿色 active (running),表明 caddy已经启动:

按Ctrl+C回到命令行状态:

设置开机自启动Caddy:

systemctl enable caddy

成功。

如果Caddy没有正常启动,则需要检查Caddy配置文件Caddyfile是否有错:

caddy -agree -conf /etc/caddy/Caddyfile

如果要修改 Caddyfile、caddy.service等等文件,那么就会用到如下的一些命令:

a. 修改前,一般要先停止Caddy服务:

caddy -service stop

b. 修改完成后,重载systemd使其检测到新安装的Caddy服务:

systemctl daemon-reload

c. 启动或重启动Caddy服务:

caddy -service start
caddy -service restart

d. 查看启动状态:

systemctl status caddy

e. 卸载Caddy服务(若不需要、或安装错误Caddy服务,可卸载再重新安装):

caddy -service uninstall

6、检查SSL证书是否生效及效果

上面Caddy配置是否生效,SSL证书是否已经生成,到这里就可以进行检查,因本教程需要ssl,这在构建代理时是需要做的,若SSL证书没有生成,后面是不能成功搭建代理的。

检查方法很简单:

在浏览器中用 https://你的域名,即:
https://www.dalaoy.ml 注:要改为你的域名
我们设置有转向,http也测试:
http://www.dalaoy.ml 注:要改为你的域名

如果已经可以访问你的网站,显示你自己建的网站内容,就表明SSL已经安装成功了。

接下来要将caddy建立的SSL证书与V2Ray关联

注意:下面命令中的域名www.dalaoy.ml必须先改为你自己的,然后,再依次输入:

ln /etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/www.dalaoy.ml/www.dalaoy.ml.crt /usr/local/etc/v2ray/v2ray.crt
ln /etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/www.dalaoy.ml/www.dalaoy.ml.key /usr/local/etc/v2ray/v2ray.key

修改证书文件权限:

chown root:root /usr/local/etc/v2ray/v2ray.crt
chown root:root /usr/local/etc/v2ray/v2ray.key
chmod 644 /usr/local/etc/v2ray/v2ray.crt
chmod 644 /usr/local/etc/v2ray/v2ray.key

7、启动和测试V2Ray

输入:

systemctl daemon-reload
systemctl start v2ray

检查V2Ray是否正在运行:

systemctl status v2ray

看到上图中绿色active (running),表明 v2ray已经启动。

如果想修改 V2Ray 配置,修改前,一般要先停止v2ray服务:

systemctl stop v2ray

修改完成后,重载systemd使其检测到新安装的v2ray服务:

systemctl daemon-reload

启动或者重启动v2ray服务:

systemctl start v2ray
systemctl restart v2ray

查看启动状态:

systemctl status v2ray

删除V2Ray(若不需要V2Ray时,可以删除 V2Ray,这在测试时常用,安装失败后需要重新安装时也可以使用):

bash install-release.sh --remove

关于 V2Ray 版本更新:V2Ray团队会不断更新v2fly/V2Ray版本、及时修复发现的问题和技术改进。有时候,网友会遇到本来用的好好的V2Ray,突然不能上网了,也有一种可能就是旧版出现了一些问题,只需要更新V2Ray到最新版就好了。

V2Ray版本更新方法,依次输入如下命令:

bash install-release.sh
systemctl daemon-reload
systemctl restart v2ray
systemctl status v2ray

以上是V2Ray+Caddy组合服务器端的全部教程,过程虽然感觉繁琐一些,但并没有什么难度,只要一步一步的坚持下来即可大功告成。

客户端的配置和应用请看这里:客户端配置 – V2RayN

说明:本组合方法的原创是《美博园》