科学上网

畅游网络:使用V2Ray实现科学上网的简明指南

浅时光博客 · 2月3日 · 2020年 · · 58.4w 次已读

一、安装前准备工作

1.文章来源(Source):https://dqzboy.com1. 时间是否准确

  • V2Ray 对于时间有比较严格的要求,要求服务器和客户端时间差绝对值不能超过 2 分钟,所以一定要保证时间足够准确。V2Ray 并不要求时区一致。当然,也可以自行改成自己想要的时区。

1.2. Linux 版本的问题

  • 由于 V2Ray 使用的编程语言的特点,V2Ray 可以不依赖其它软件(库)而运行,并且可以在许多操作系统上运行(Windows、Linux、BSD等)

1.3. 防火墙

  • 使用VPS后,一般防火墙和SElinux都是关闭的状态,所以搭建好后就可以直接访问了;如果访问不了请确保防火墙是否开启了,如果开启了那么可以将防火墙关闭或者放开对应的V2Ray监听端口。

1.4. 启动问题

  • 使用脚本新安装 V2Ray 后不会自动运行,而是要自己手动运行。另外如果修改了配置文件,要重新启动 V2Ray 新的配置才会生效。本文介绍使用一位大神开发的v2ui的一键部署脚本,可以直接安装v2Ray并自带UI界面,可以方便自己去管理VPN账号。

1.5. 配置文件的格式问题

  • 因为 V2Ray 的配置文件比较长,层级也多,导致编辑时很容易出错,也难检查。所以使用V2-UI可以很方便的通过界面图形化的方式去创建VPN账号

二、注册Cloudflare[可选]

提示:

(1)此步骤主要是使用Cloudflare免费CDN服务来保护真实的服务器地址

(2)建议单独申请一个免费的域名用来给V2ray使用

1、登入官网注册

  • 此时Cloudflare会发送一份激活账号的邮件到你注册的邮箱中,然后登入邮箱并进入邮件中提供的地址进行激活账号
  • 邮箱验证成功
  • 选择免费版
  • 此时会检查你的域名解析记录

注意:如果在其他的厂商已经做了域名解析,则这里不需要再次进行添加,不然会出现提示:该记录已存在

  • 橘色云朵代表流量通过 CloudFlare 的 CDN,灰色云朵代表不通过 CDN,点击一下云朵即可切换。

2、修改域名服务器DNS

  • 继续下一步,到这里会提示让你修改Nameservers(域名服务器),并提供了两个域名服务器地址,先去你的注册域名的网站修改域名的域名服务器,下面我就以 腾讯云 为例来说明如何修改域名服务器
  • 进入到腾讯云的控制台,然后找到自己注册的域名后,点击域名进入如下界面后进行修改DNS服务器地址
  • DNS地址修改完成
  • 修改完域名服务器后回到 CloudFlare 原文链接:https://dqzboy.com网页上来,点击continue,此时 CloudFlare 可能会提示你还没有修改域名服务器,不要担心,修改域名服务器需要一定的时间才能生效,等一等就好了,一般几分钟就会生效,生效之后 CloudFlare 会发邮件给你。
  • 上图中的子域名的流量都是交由CloudFlar CDN进行加速处理了
  • 然后会收到CloudFlare域名解析变更邮件;到此域名解析变更工作完成

3、添加一条CDN的记录

  • 注意:目前 看国内大部分的CDN厂商加速的端口仅支持 80、443、8080 三个端口;而Cloudflare支持代理的端口更多,详情查看官网;所以这里添加的这个子域名对应的端口是需要Cloudflare所支持代理的端口,且需要确认V2Ray走的这个域名对应的端口未被占用;
  • 这个解析的域名用来配置V2UI面板访问同时也是V2Ray程序所使用的
  • 通过Dig命令检查域名解析的A记录

4、开启CloudFlare免费SSL认证

  • CloudFlare提供了免费SSL认证功能和HSTS,为了保护网站安全,我们这里进行配置下

三、安装V2Ray和xray面板

  • 项目地址:https://github.com/sprov065/v2-ui/ 该项目已经不在更新了!目前新的面板为:x-ui x-ui-msk xray-ui
  • 项目提供一键安装v2Ray程序和xray面板,只需要在服务器上运行项目提供的脚本即可完成安装
  • 开发语言Go
  • Telegram提醒

目前x-ui项目已经停更一年多了,目前部署之后存在一些问题,比如切换成 [Xray-core v1.8.0]内核错误,无法使用;这里建议使用基于x-ui进行改进后的项目 FranzKafkaYu/x-uixray-ui 配置都与x-ui一样

1、功能介绍

  • 系统状态监控
  • 支持多用户多协议,网页可视化操作
  • 支持的协议:vmessvlesstrojanshadowsocksdokodemo-doorsockshttp
  • 支持配置更多传输配置
  • 流量统计,限制流量,限制到期时间
  • 可自定义 xray 配置模板
  • 支持 https 访问面板(自备域名 + ssl 证书;脚本提供一键生成ssl证书)
  • 更多高级配置项,详见面板

2、执行安装

# x-ui一键部署脚本
bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)

# xray-ui一键部署脚本
bash <(curl -Ls  https://raw.githubusercontent.com/qist/xray-ui/main/insinst.sh)

# FranzKafkaYu/x-ui部署脚本【推荐,可集成TG Bot】
bash <(curl -Ls https://raw.githubusercontent.com/FranzKafkaYu/x-ui/master/install.sh)

注意:有时第一次运行会出现失败,然后重新再次运行该脚本即可安装成功

3、Nginx反代【可选】

说明:如果未使用CDN以及域名的朋友,此步骤可以跳过!

  • 使用 CDN 的朋友们注意了,CDN 通常只支持常见的 http 和 https 端口,所以使用 54321 是访问不了的,建议将面板端口设置为 CDN 商家支持的端口,肯定受支持的端口号是 80(http)和 443(https)
  • 我们这里通过Nginx反代进行访问前端页面

3.1:配置Nginx反代

  • Nginx的安装步骤此处省略
  • 添加一个v2ray的nginx反代配置文件,配置内容如下
  • 如果在Cloudflare中配置SSL模式为FULL的话,这里Nginx就需要添加给该域名添加证书文件
  • 为了安全我这里给当前反代的域名本地服务器上添加了SSL证书
  • 证书可以选择免费的即可,我这里是腾讯提供的免费域名SSL证书
[root@dqzboy ~]# vim /etc/nginx/conf.d/v2ray.conf
server {
    listen    443 ssl;
    server_name    cool.xxxx.com; #填写上面添加的子域名
    ssl_certificate  1_www.xxxx.com_bundle.crt;  #SSL证书存储路径,我这里是在nginx的主目录下/etc/nginx/,所以我这里直接填写证书名
    ssl_certificate_key  2_www.xxxx.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:54321;
    }
}
[root@dqzboy ~]# nginx -t
[root@dqzboy ~]# nginx -s reload

3.2:访问页面

  • 这里就可以直接输入配置的域名进行访问了
  • 注意:未配置域名的朋友,访问时请输入服务器公网IP + 上面安装时自定的访问端口进行访问

3.3:更改账号密码

4、Telegram提醒

4.1:Bot使用介绍

X-UI支持通过Telegram bot实现每日流量通知,面板登录提醒以及cmd控制等功能,使用Telegram bot,需要自行申请

由于X-UI会设定默认command,推荐使用新申请的Telegram bot进行使用,避免破坏使用者自己设定的command

使用说明:在面板后台设置机器人相关参数,具体包括

  • Telegram bot Token
  • Telegram bot ChatId
  • Telegram bot 定时周期,可使用crontab语法

Token在申请Telegram bot时由自动生成,如Token泄漏或者遗失,可以通过 botfather 重新生成。而ChatId则与账户强绑定且具有唯一性,可通过 userinfobot 获取你的个人ChatId

4.2:Bot功能介绍

定时通知参考语法:

  • 30 * * * * * //每一分的第30s进行通知
  • 0 0 20 * * * //每天晚上8点进行通知
  • @hourly //每小时通知
  • @daily //每天通知(凌晨零点整)
  • @every 8h //每8小时通知
  • @every 30s //每30s通知一次

TG通知内容:

  • 节点流量使用
  • 面板登录提醒
  • 节点到期提醒
  • 流量预警提醒
  • SSH 登录提醒
  • X-UI状态变化
  • 节点接入IP变化

4.3:创建TG机器人

4.4:启用TG机器人

4.4:Bot功能菜单

Telegram Bot 指令控制内容:

  • 状态查询:用于查询当前系统状态以及X-UI/Xray相关信息
  • 重启服务:将会重启xray服务,该命令不会重启x-ui面板自身
  • 停止服务:将会停止xray服务,但不会影响面板自身运行
  • 切换版本:将会切换xray服务版本
  • 删除节点:将会删除对应端口的节点
  • 复制节点:将会根据已有节点进行复制,除端口与别名外其余均与前者保持一致
  • 关闭节点:将会关闭对应端口的节点
  • 开启节点:将会开启应端口的节点
  • 清除流量:将会清除所有节点的流量统计
  • 调整限额:将会调整面板设定中的流量限额
  • 重置流量:将会重置对应端口节点的流量统计
  • 获取链接:将会生成对应端口节点的分享链接

关于控制菜单的进入,目前支持三种方式进入:

  • 菜单列表中点击 /functions
  • 对话框内输入 start 文本,点击功能菜单
  • 直接在对话框内输入 功能菜单

5、VMESS配置

说明:如果未使用CDN以及域名的朋友,此步骤可以跳过!

5.1:申请证书

注意:我们这里采用的是VMESS+WS+TLS的方式进行代理,所以创建账号前首先需要给对应的域名申请一个证书
将上面复制的TXT记录与相应的值添加至DNS中
返回浏览器点击验证
然后保存在自己的PC上,最后将证书和私钥都拷贝到服务器中

5.2:创建账号

比较推荐的节点组合:

  • Vless+reality+xtls-rprx-vision
  • Vless+tls+xtls-rprx-vision
  • Vmess+tls+ws(CDN)
  • Vmess+tls+grpc
  • Trojan+tls+grpc

个人首推使用 xtls-rprx-vision 的组合,使用 xtls-rprx-vision 消除 tls in tls 特征,但只支持tcp,延迟较高;使用xtls-rprx-vision流控需要xray core版本为1.7.5及以上

注意:在下图中,如果未使用域名和证书的朋友,tls关闭、域名和证书文件的配置留空即可!

  • 点击二维码,然后弹出二维码框之后,手机可以直接使用V2RayNG或者IOS版小火箭客户端扫描添加节点信息;点击二维码下面的复制,拷贝节点信息

6、客户端配置

  • 注意配置客户端时,填写的地址时一定要是第二步中添加的那条专门用来解析V2Ray的子域名地址

6.1:下载V2Ray客户端

6.2:配置客户端

  • 将上面拷贝的节点信息添加到V2rayN客户端中
  • 添加完成之后,选中对应的节点右键设为活动服务器
  • 右键点击任务栏中的V2Ray程序图标,开启代理后才可以正常访问外网

6.3:访问谷歌测试

至此V2Ray安装完成,并创建了一个基于VMESS协议的账号,接下来我们再来看下V2Ray4.27+版本开源的最新的VLESS协议的操作流程!!!

7、VLESS配置

7.1:VLESS介绍

  • VLESS是一种无状态轻量级数据传输协议,被定义为下一代V2ray数据传输协议。作者对该协议的愿景是可扩展性空前,适合随意组合、全场景广泛使用,符合很多人的设想、几乎所有人的需求,足以成为 v2ray 的下一代主要协议,乃至整个 XX 界的终极协议。由此可见VLESS协议的强大。
  • 与VMESS协议相同,VLESS使用UUID进行身份验证,配置分入栈和出栈两部分,可用在客户端和服务端。
  • V2ray 在 4.27.0  内核中加入了 VLESS 协议支持

7.2:VLESS配置

  • 注意:V2Ray版本必须是4.27以上的版本,V2UI面板也要更新到最新版本,旧版本是不支持VLESS协议的
  • 上面的注意事项中都达到要求后,我们只需要在V2UI面板中,将VMESS协议中的内容改一改然后换成VLESS协议即可使用
  • 我这里V2Ray-Core版本与V2UI版本如下图所示:
如果你之前使用的是VMESS+WS+TLS,那么创建VLESS就很简单,只需要创建账号时将VMESS协议改成VLESS协议即可!!!

注意:在下图中,如果未使用域名和证书的朋友,tls关闭、域名和证书文件的配置留空即可!

7.3:客户端配置

注意:目前VLESS不支持一键复制链接和二维码的方式导入账号信息,目前x-ui面板中已经支持vless 分享链接与二维码
  • 点击二维码,然后弹出二维码框之后,手机可以直接使用V2RayNG或者IOS版小火箭客户端扫描添加节点信息;点击二维码下面的复制,拷贝节点信息
  • 将上面拷贝的节点信息添加到V2rayN客户端中
  • 然后右键设置为活动服务器即可使用了

8、xtls-rprx-vision

  • 用户设置中选择flow为xtls-rprx-vision
    • 注意:点击添加账号之后,需要把下面的tls打开之后,用户配置里面才会出现 flow的配置选项框)
    • 每个用户拥有自己独立UUID/PassWordemail,添加用户时会自动生成默认值,可以自行修改;Email用于在日志/流量统计中区分单独的用户,请确保每个用户的Email值是唯一的
  • 开启tls,网络必须选择tcp

四、问题总结

问题1:Outbound:failedtoread header

  • 连接后在V2Ray客户端提示如下报错:
    • Proxy|VMess|Outboundfailed to read header > Proxy|VMess|Encodingfailed to read response header > websocketclose 1000 (normal) ...

问题原因:

  • 服务端与客户端时间的之前不同步,时差超过了2分钟

问题解决:

服务端时间同步

[root@dqzboy ~]# yum -y install ntp
[root@dqzboy ~]# systemctl start ntpd
[root@dqzboy ~]# systemctl enable ntpd
[root@dqzboy ~]# ntpdate -d time.windows.com		#如果offset超过2s则进行时间同步
[root@dqzboy ~]# ntpdate time.windows.com

客户端时间同步

  • 这里客户端为Windows为例子
  • 控制面板—>时钟和区域 —> 设置日期和时间 —> Intenet时间

问题2:开启系统代理之后,Microsoft Store 等 UWP 应用无法联网

# 以管理员方式打开 Powershell
输入 foreach ($n in (get-appxpackage).packagefamilyname) {checknetisolation loopbackexempt -a -n="$n"}

# 等待执行完毕

声明:此文章请勿转载!!!

五、路由器配置科学上网

Redmi-AX6000路由器科学上网详细教程请查阅项目文章:Github

六、V2rayN开启TUN模式

系统代理非常方便,但是存在比较棘手的问题,并不是所有软件都遵循系统代理,除去浏览器,绝大部分软件都不会走系统代理,甚至连设置代理的地方都没有,行为完全取决于软件开发者,并且系统代理一般都是http代理而非socks5, http代理不支持udp,游戏也是没法玩的,并且游戏一般都不会添加代理功能,所以使用系统代理模式一般都是看看网页聊聊天,如果说系统代理能满足你的需求,那就是最方便省事的模式了;如果无法满足,比如设置好系统代理后 软件还是无法使用,可能是软件并没有走代理,这个时候就可以使用tun或者tap模式。这种模式的原理是创建一张虚拟网卡,从网络层接管系统所有流量,因为所有发往互联网的流量都必须经过网络层的封装,在这层进行拦截就能够获取所有应用产生的网络数据,这是目前主流的模式。 我们的手机默认就是这种模式,所以才能实现所有app翻墙。软路由接管全家的科学上网也是同样的原理。

正因为有了tun才能让科学上网达到近乎完美的状态。目前v2rayN6.0以上的版本支持了tun模式,其实就是调用singbox的内核。对于不习惯用clash的用户来讲是一个好消息,软件界面也做了很大的改变。 开启tun模式 需要以管理员权限运行。默认情况下会弹出命令行窗口,如果觉得这个黑框很碍事,可以在tun设置中将显示控制台关闭,保存后再来尝试开启就不会再有那个黑框了。

这种虚拟网卡模式和真正的VPN已经非常接近了,但是也只能说非常接近,还不是真正的VPN。因为我们用的ss、vmess、trojan等主流的翻墙协议都无法封装网络层的数据包,最直观的感受就是ping命令这个网络层的工具。

当我们使用tun模式ping谷歌的话,会返回一个假的延迟,这个1毫秒的延迟是直接从虚拟网卡返回的,并且,如果使用fakeIP模式的话,还会直接返回一个假的IP;因为ss、vmess等协议无法代理网络层的icmp协议,而ping就是icmp协议的工具,真正的VPN可以代理网络层。而使用真正的VPNwireguard是可以ping通谷歌并且可以看到真实的延迟。

目前来讲tun模式是比较完美的客户端代理方式,既能实现在网络层接管系统所有流量,又能在此基础上实现分流,美中不足的地方就是使用ping命令来测试网络延迟的时候就不太方便了。如果你平时只是用来浏览网页的话,系统代理的方式也是一个不错的选择。至于真VPN的话,并不推荐用来科学上网,更适合有内网穿透需求的用户。

七、解决DNS泄露问题

为什么会存在DNS泄露?

DNS泄露的说法只有在我们使用代理之后才存在,假设我们当前没有使用代理的情况下查询DNS泄露,列表中返回了国内的DNS服务器,这只能说明这些DNS服务器负责帮我们进行了DNS查询,并不代表DNS泄露了。如果此时我将电脑的本地DNS服务器 改成1.1.1.1 意思是让1.1.1.1负责DNS解析,列表中返回了美国的DNS服务器,这也不能说明DNS没有泄露,只有当我们通过代理访问目标网站时,电脑给互联网发送了请求目标网站IP地址的明文DNS请求,这种情况就是DNS泄露。

DNS泄露原因以及如何解决

DNS泄露的原因就是在代理的情况下,本地发送了DNS请求,那只要让本地不发送DNS请求,直接将数据加密后发给节点服务器,就能避免了。因为加密的数据中已经包含了域名,节点服务器会负责DNS 并帮我们访问网站,本地进行DNS请求获取IP的行为只是为了匹配分流规则,所以只要我们的分流规则配置合理,就可以避免发起DNS请求,从而降低延迟,解决DNS泄露。

v2rayN配置防止DNS泄露

  • v2rayN比较简单,直接使用客户端提供的绕过大陆路由方式就能解决DNS泄露的问题。

注意:系统代理方式不要选择PAC模式

  • 也可以进入路由设置,将域名策略改成AsIs,如果你以前手动修改过绕过大陆的路由规则,可以双击进入修改,将配置恢复成官方规则即可。

以上就是本次文章所有知识点,如果文章对你有帮助就动动你那发财的小手,点个赞留个言,给本站加点热度。谢谢支持!

声明


免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

版权声明:未经本站作者允许不得转载本文内容,否则将视为侵权。


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/110.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以>超链接形式标明文章原始出处和作者信息
免责声明:本站内容仅供个人学习与研究,严禁用于商业或非法目的。请在下载后24小时内删除相应内容。继续浏览或下载即表明您接受上述条件,任何后果由用户自行承担。

8 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

  1. 别梦惊心的小白江苏·南京2022-8-19 · 15:11

    x-ui里面设置http代理能出个介绍吗,有个插件需要porxy_http和porxy_all。好像用vless之类的协议不行

    • 浅时光博客2022-8-19 · 15:36

      不好意思,现在我这边不再使用自建的了

  2. yiyun重庆2022-1-29 · 17:51

    看到了,原来有个cf支持代理端口列表

  3. yiyun重庆2022-1-29 · 17:46

    话说 只能是 2053 (2053是 CF DNS 所支持) 端口吗?那岂不是只能添加一条

    • 浅时光博客2022-1-29 · 17:47

      有去看过官方文档吗?

  4. 思齐甘肃·酒泉2021-12-13 · 2:40

    从第三步开始时看不懂了

    • 浅时光博客2021-12-13 · 8:05

      反向代理你可以不做

  5. 思齐甘肃·酒泉2021-12-13 · 2:28

    卡在第三步了,这个反代配置文件是直接创个文件粘贴进去吗?