Rustic-pages 需求与开发文档
发布时间:2023-08-31 12:36:47
归档分类:

1. 引言

要求使用 Rust 编写一个高效且易于使用的静态博客生成器,它将能正确处理 Markdown 和 SCSS 文件的文件。

它将支持以下命令行指令:

  • init: 初始化程序,创建相应文件夹及内容

  • generate : 渲染和生成所有的静态网站内容

  • clean : 清除缓存

  • server : 本地部署服务,该指令应该默认调用 cleangenerate

  • deploy : 自动部署静态文件到指定仓库

所有的内容应该均以变量的形式预先准备,然后再根据规则渲染文件。

2. 功能需求

2.1 博文编辑

  • 用户可以创建、编辑和删除博文。
  • 博文内容支持 Markdown 格式,允许用户使用 Markdown 语法编写博文。
  • 用户可以设置博文的标题、发布日期、标签和归档。
  • 用户可以上传图片和附件,并在博文中引用它们。
  • 用户可以保存博文为草稿,随时继续编辑。

2.2 博文生成

  • 用户可以使用命令行工具生成静态网站。
  • 博客生成器将从用户指定的目录中读取博文和资源文件,并生成静态 HTML 文件。
  • 用户可以指定生成的网站目标路径。
  • 生成的网站应包括主页、博文详细页、归档页、分类页面和标签页面。

2.3 主题和样式

  • 用户可以选择不同的博客主题和样式。
  • 博客生成器应支持多个默认主题,用户也可以自定义主题。
  • 用户可以自定义网站的样式表(CSS)。

3. 功能模块

3.1 数据结构

3.1.1 Post

  • title: String

  • date: String

  • date_simple : String

  • published: bool

  • tags: Vec

  • categories: Vec

  • raw_content: String

  • content: String

  • slug: String

  • link: String

3.1.2 Page

  • title: String,

  • date: String,

  • template: String,

  • raw_content: String,

  • content: String,

  • limited_cows:usize,

  • total: usize,

  • current: usize,

  • prev:usize,

  • prev_link: String,

  • next:usize,

  • next_link: String

3.1.3 Archive

  • posts - Vec
  • pages: Vec
  • tags: HashMap<String,Vec<& Post>>
  • categories: HashMap<String,Vec<& Post>>

3.1.4 Config

pass

3.2 构建逻辑(Generate)

  1. 程序首先构造一个 Archive 实例,用于保存接下来所有的变量数据。

  2. Post 处理过程

    1. 从 /source/content/posts 中获取所有的 markdown 文件,并进行解析,封装为一个可操作的 Post 数据实例。
    2. 所有的Post 插入到 Archive.posts
  3. Tag 处理过程

    1. 遍历 Archive.posts 将每个Post 内的 Tag 解析
    2. 所有的 Tag 插入到 Archive.tags
  4. Category 处理过程

    1. 遍历 Archive.posts 将每个Post 内的 Category 解析
    2. 所有的 Category 插入到 Archive.categories
  5. 页面构造逻辑

    1. 从 /source/content/pages 中获取所有的 markdown 文件,进行解析,封装为一个可操作的 Page 数据实例
    2. 所有的 Page 插入到 Archive.pages
    3. 若是front-matter 带有 pagination: tags,则对 Archive.tags 触发分页
    4. 若是front-matter 带有 template: xxx ,则渲染模板,否则默认输出 content

3.3 路径渲染逻辑

  • Index - Page
    • /public/index.html
    • /public/page/N/index.html
  • Archive
    • /public/archive/posts/2023/12/10/hello/index.html
    • /public/archive/tags/技术/index.html
    • /public/archive/categories/算法/index.html
  • Tags - Page
    • /public/tags/index.html
    • /public/tags/page/N/index.html
  • Categories - Page
    • /public/categories/index.html
    • /public/categories/page/N/index.html
  • Custom Page
    • /public/custom/index.html
    • /public/custom/page/N/index.html

README 文档

A lightweight static blog generator developed using Rust

Usage

You can compile the source code of this project using the cargo build command.

cargo build

When you run cargo build, it searches for the Cargo.toml file in the current directory and builds the project based on the configuration information specified in that file. Cargo.toml is the configuration file for Rust projects and contains the project's dependencies and other build configurations.

  • rustic-pages
  • 需求文档
  • 我的静态博客生成器
    发布时间:2023-08-27 09:22:56
    归档分类:

    近些日子无心向学,于是又手痒折腾起了代码。

    起因是接触到了 Rust 这门语言,并了解到了它的很多特性。我认为这真的是一个很棒的语言并且惊叹于它的性能。正因如此,我决定以此为契机,开始了一个新的项目,一个使用 Rust 编写的静态博客生成器。

    项目情况

    目前它只是一个堪堪能用的状态,我甚至还没想好它的名字,现在只是使用 static-blog-rust-make 作为项目名字,我并没有想出一个正式的名字。我目前开源在Github 上,由于时间实在是不够用,我在有限的时间内已经做到了极限,优化代码和新功能的添加只能在日后完成了,但是,我仍然十分满意于这个项目!

    虽然如此,这个生成器确实已经可以正常使用。我用它来重新生成了一个这个网站,并将之前为 Hexo 写的主题应用其中。目前的版本是 v0.03 。项目仅仅是一个粗劣地模仿 Hexo 的产物,并没有融入很多我的思考,很多核心功能也只是调用别人写好的包,但是这次的代码仍然给我很多地启示,我发觉我开始接触到了很多软件工程的内容,同时对一个项目的整体规划有了一些了解。总之,这一次的项目开发还是很有意思的,之后的一段时间会着手于新的开发文档,并希望能在书写开发文档的过程中,思考更多新的功能。

    最后,这是一个非常不完美的项目,里面的代码混乱不堪,复杂的逻辑结构几乎把我压倒。在多次重构和清理冗杂代码后,确实完成了我一开始定下的所有功能需求,但是这样的代码总归让人看了倒胃口,但也只能在之后的日子里慢慢修改完善啦,至少它没有夭折在漫长的开发期中。我确实是以最快的速度开发的,为的就是减少枯燥,目前看来确实如此,我在耐心消耗殆尽前完成了这个项目。

  • 开发日志
  • 你好,OrangePi Zero3!
    发布时间:2023-08-17 11:48:44
    归档分类:

    本篇文章将详细地写下我配置这块单板计算机的全过程,之后若是有新的自托管服务也会在本文记录下来。

    购买

    自从接触 Linux 之后渴望得到一个树莓派了,奈何因为疫情导致了全球的芯片供应紧张,树莓派的价格水涨船高,价格已经远远超过了它的价值,更重要的是超过了我的预算,即使是二手的价格也非常不值当。总之,出于囊中羞涩的考虑,我最终选择了这块国产的派 —— OrangePi Zero3.

    2023-08-17_12-27.png

    我购买的是内存为 1.5G 的版本价格为一百出头,刚拿到快递的时候我就疑惑了, 为何如此之小!开箱后更是震惊,它甚至没有我的巴掌大呢!虽然但是,这还是很精致的,而且对于这样的设备而言,小其实是更好的,更方便搭载在其他的设备上。

    photo_6264513425795298480_y.jpg

    除开这块板子,我还另外买了:

    • 亚克力的外壳
    • 风扇+散热片
    • USB to TTL 用于串口调试
    • 64G 闪迪 tf 卡

    关于系统镜像方面,我还是选择了熟悉的 debian 发行版,毕竟我的 vps 用的也是这个,这块单板计算机我是拿来内网穿透的 官方镜像

    2023-08-17_12-42.png

    系统配置

    在向 tf 卡刷完系统后,就可以通过串口进行连接了。

    自动连接热点 WiFi

    使用串口多少是不方便的,所以先来配置一下网络,让其他机器可以通过 ssh 访问这块板子。

    1. 使用nmcli dev wifi查看当前扫描到的 wifi 列表。

    2. 使用 nmcli 连接到热点并输入密码:

    sudo nmcli dev wifi connect YourHotspotName password YourPassword
    
    1. 将连接的配置设置为自动连接:
    sudo nmcli connection modify "YourHotspotName" connection.autoconnect yes
    

    YourHotspotName 替换为你的热点名称,YourPassword 替换为密码。

    完成后通过 ip addr 即可看到 ip 地址,然后就可以通过 ssh 正常访问板子了

    添加一个新用户

    useradd -m -G additional_groups -s login_shell username
    
    passwd username
    

    然后去修改 /etc/sudoers 文件

    FRP 内网穿透

    在这个 releases 页面中,找到对应架构的压缩包,可以使用 uname -a 查看到。

    通过 wget 下载

    wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_arm64.tar.gz
    

    通过 tar 解压

    tar xvf frp_0.51.3_linux_arm64.tar.gz
    
    • frpc: 这是 FRP 客户端的可执行文件。FRP 客户端用于连接到 FRP 服务器并将内部网络服务暴露给外部访问。
    • frps: 这是 FRP 服务器的可执行文件。FRP 服务器用于接收来自客户端的连接,并将这些连接转发到内部的网络服务。
    • frpc.ini: 这是 FRP 客户端的配置文件,用于指定客户端的连接设置、代理规则等。
    • frps.ini: 这是 FRP 服务器的配置文件,用于指定服务器的监听端口、代理规则等。
    • frpc_full.ini: 这是 FRP 客户端的完整配置文件,可能包含更多详细的设置。
    • frps_full.ini: 这是 FRP 服务器的完整配置文件,可能包含更多详细的设置。

    服务器配置

    下载完对应架构的文件后,即可开始配置,只需要关心 frpsfrps.ini 文件即可,前者是FRP 服务器的可执行文件,后者是这是 FRP 服务器的配置文件。

    打开 frps.ini进行配置,配置文件的内容如下:

    [common]
    bind_port = 7000
    token = 1234567890
    

    客户端和服务器的配置文件中都需要设置相同的 Token 才能正确进行连接和通信。

    为了保障安全性,你应该选择一个强密码的 Token,并确保不会轻易泄露给他人。如果你怀疑 Token 可能已经暴露,应当立即生成一个新的 Token 并更新配置文件。

    完成后,运行 ./frpc -c ./frpc.ini

    若无问题,则说明配置成功。

    接下来,配置一下 systemd 服务,让上面这条运行命令能开机自动启动,这非常实用:

    但是在此之前,我们需要先将 frpsfrps.ini 文件放到合适的地方:

    sudo cp frps /usr/local/bin/
    sudo mkdir /usr/local/etc/frp
    sudo cp frps.ini /usr/local/etc/frp/
    

    首先,创建一个名为frps.service的文件,该文件将存储有关你的自启动服务的信息。通常,这些文件存放在/etc/systemd/system/目录下。

    sudo vim /etc/systemd/system/frps.service
    
    [Unit]
    Description=frps
    After=network.target
    [Service]
    TimeoutStartSec=30
    WorkingDirectory=/usr/local/bin/
    ExecStart=/usr/local/bin/frps -c /usr/local/etc/frp/frps.ini
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    

    保存后,执行:

    sudo systemctl enable frps
    sudo systemctl start frps
    sudo systemctl status frps
    

    若无问题,则可进入客户端的配置。

    下面是一些常用的命令:

    • 启动服务:sudo systemctl start frps
    • 停止服务:sudo systemctl stop frps
    • 重启服务:sudo systemctl restart frps
    • 查看服务状态:sudo systemctl status frps
    • 关闭自启动:sudo systemctl disable frps

    客户端配置

    下载完对应架构的文件后,即可开始配置,只需要关心 frpcfrpc.ini 文件即可,前者是FRP 客户端的可执行文件,后者是这是 FRP 客户端的配置文件。

    假设:

    服务器的ip地址是 1.1.1.1, 服务端frp正在监听的端口是7000, token是1234567890

    客户端目前正在运行一个项目叫 bitwarden ,它正在本地 0.0.0.0 地址上监听 1111 端口

    打开 frpc.ini进行配置,配置文件的内容如下:

    [common]
    server_addr = 1.1.1.1
    server_port = 7000
    token = 1234567890
    
    [bitwarden]
    type = tcp
    local_ip = 0.0.0.0
    local_port = 1111
    remote_port = 8111
    

    值得注意的是,配置文件中的 [bitwarden] 可以替换成任何想要的名字

    为了方便,我们同样设置 systemd 服务

    但是在此之前,我们需要先将 frpcfrpc.ini 文件放到合适的地方:

    sudo cp frpc /usr/local/bin/
    sudo mkdir /usr/local/etc/frp
    sudo cp frpc.ini /usr/local/etc/frp/
    

    首先,创建一个名为frpc.service的文件,该文件将存储有关你的自启动服务的信息。通常,这些文件存放在/etc/systemd/system/目录下。

    sudo vim /etc/systemd/system/frpc.service
    
    [Unit]
    Description=frpc
    After=network.target
    [Service]
    TimeoutStartSec=30
    WorkingDirectory=/usr/local/bin/
    ExecStart=/usr/local/bin/frpc -c /usr/local/etc/frp/frpc.ini
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target
    

    保存后,执行:

    sudo systemctl enable frpc
    sudo systemctl start frpc
    sudo systemctl status frpc
    

    若无问题的话,则说明没有问题!

    原理

    Frp(Fast Reverse Proxy)是一个用于内网穿透的工具,它允许你在公网上访问位于内网的计算机服务。它的原理是通过在公网服务器上部署 frps(Frp 服务器端)和在内网机器上部署 frpc(Frp 客户端),通过公网服务器作为中转,将外部请求转发到内网机器上。

    • 在公网服务器上部署 frps:公网服务器上运行的 frps 监听一个指定的端口,等待来自 frpc 的连接。
    • 在内网机器上部署 frpc:内网机器上的 frpc 将建立到 frps 的连接,并注册自己的服务信息。frpc 和 frps 之间建立的连接可以被用于穿透数据。
    • 数据传输:当公网客户端请求连接到公网服务器的指定端口时,frps 会将这个请求转发给已经连接的 frpc 客户端,然后 frpc 客户端再将请求转发到内网机器的指定服务上。

    在我上面的配置中,其转换的意思就是:

    frps 监听在公网服务器的 7000 端口,frpc 连接到公网服务器的 7000 端口,并注册自己的服务信息。frpc 客户端配置了一个类型为 TCP 的服务,将本地的 bitwarden 服务映射到公网服务器的 8111 端口上。

    若是请求 https://1.1.1.1:8111 那么这个请求就转发给客户端的 http://0.0.0.0:1111

    Nginx 配置

    我在服务器中是使用 Nginx 来进行反向代理的,若你的服务器不是,则可以跳过此内容。若你完全不了解 nginx 建议先去学习了之后再回来进行配置,因为此处我写得很简略,可能会对你产生误导。

    我的 Nginx 代理了80端口,所有的请求都是从此处进入上文提到,需要从 8111 端口进入才能访问内网,所以我需要对 nginx 添加一些配置:

    2023-08-17_15-48.png

    这样,当请求 bitwarden 路径时,将会反向代理到 8111 端口

    当然,通过 nginx 也可以配置子域名来访问,首先将三级域名 bitwarden.yarnom.top 通过 CNAME 指向当前的服务器地址

    然后,nginx 设置一个新的 server ,server_name 就是这个三级域名:

    2023-08-17_15-26.png

    搭建 Vaultwarden

    由于官方的 Bitwarden 服务对于我的小机子来说过于庞大了,所以选择了社区用 Rust 编写 Vaultwarden 项目

    它可以用 docker 搭建,那就是几条命令就能安装完毕:

    Pull the docker image and mount a volume from the host for persistent storage:
    
    docker pull vaultwarden/server:latest
    docker run -d --name vaultwarden -v /vw-data/:/data/ --restart unless-stopped -p 80:80 vaultwarden/server:latest
    

    完成!

    搭建 Memos

    docker 搭建

    docker run -d --name memos -p 5230:5230 -v ~/.memos/:/var/opt/memos ghcr.io/usememos/memos:latest
    

    自行修改参数即可。

    完成!

  • Orangepi
  • Linux
  • Nginx
  • 七月与八月
    发布时间:2023-08-08 22:51:43
    归档分类:

    七月就这样过去了呢,很久没有写博文了,主要是生活现在千篇一律,没啥想写的内容,总不能写一大堆的流水账不是嘛。

    虽说是千篇一律,但最近也是有好好用功的。最近在捣鼓一个新的项目:用 Rust 语言完成静态博客生成器。我目前使用的 Hexo 就是这样的工具,它将markdown文件转换为html文件,再对 tags 和 categories 等内容进行整理。这是之前未曾接触过的代码经历。

    事实上,一开始为真的无从下手,于是我开始询问 ChatGPT,这真是一个很棒的人工智能,它认真地回答了我很多的问题,给予了我很多实际地代码。我用了一天时间了解了 rust 的语法,囫囵吞枣地学习显然不足以支撑我完成这个项目,但是有了 ChatGPT 的帮助,事情真的变得容易了很多,之后完成了这个项目,我会写一篇更详细的文章来介绍这一过程。

  • 思考
  • 🎉 评论区功能上线
    发布时间:2023-06-14 17:29:46
    归档分类:

    今天上线了友链,于是寻思着把评论区也添加上,使用的是 giscus ,这是利用 GitHub Discussions 实现的评论系统。

  • 网站维护
  • 开发记录
  • 🎉 友链功能上线
    发布时间:2023-06-14 16:03:31
    归档分类:

    今日和朋友闲聊,话题扯到了我们各自的博客上,我周围写博客的人还是蛮少的,很高兴他也一直在写博客,于是我们便萌生了交换友链的想法。

    但问题在于,我的博客并没有这个功能,但是 Hexo 完成这个功能也简单,这也是静态博客的一大优势,代码的实现非常简单。

    于是在经过了两分钟的编程后,我正式宣布我的博客友链功能正式上线 !!!🎉🎉🎉

  • 网站维护
  • 开发记录
  • 发布时间:2023-06-14 12:20:18
    归档分类:

    最近事情真的很多,实训整得我莫名其妙地很累,也没啥时间写博文,况且静态博客的弊端就是无法随时地去写啦,最近想着要不要用 java 去搭建一个服务,上面用来写一些短的评论或者吐槽的话语,目前的初步想法是这样的。

  • post
  • V2ray 搭建与配置记录
    发布时间:2023-05-22 12:34:43
    归档分类:

    前言

    近来想纯净自己的ip,同时也想试着搭建 v2ray 服务供以自己代理使用,所以上两个星期便购买了一台 Vultr 的 VPS。出现了一些问题,同时也确实都得以解决了,这里将问题和解决办法列出:

    1. 未做伪装的 ip 被封杀

    这是第一次尝试使用 vps 搭建 v2ray 服务,事实上非常的顺利,我确实完成了 v2ray 的搭建,但是第三天便遭到了中国政府的防火墙一记 ban ip 操作。现在想着这是极为危险的,但事情还得继续,问题自然是发生在我未对 v2ray 进行伪装,因为初次接触,所以对很多新的名词有恐惧心理,一开始便没有去尝试伪装操作,最终酿下错误,但是错误的本身其实也在推动着我技术的进步。

    问题的解决方法是,首先通过 WebSocket+TLS+Web 完成对传输层流量伪装,原理就是通过 Nginx 搭建了一个真实的网站,分流一个特定的路由去转发 v2ray 的流量,其实正常的伪装到这里就结束了。但前面我说了,我的 VPS ip 被封杀了,其导致了我没办法在国内正常通过 ssh 访问到服务器,所以根据攻略我又加了一层伪装,我将我的域名名服务器交给 cloudflare 让其帮我把域名伪装成其他的ip,从而躲过封杀。

    这样的后果也很明显,虽然更加安全了,但是代理速度确实也下来了。。。于是,我还是决定摧毁当前的 vps ,重新构建一个,Vulter 会重新分配一个 新的ip。

    2. ChatGPT 封杀所有 vultr 的 ip

    如小标题所言,openai 确实封杀了所有来自 vultr 的 ip,但是这个问题不大,我还是通过 cloundflare 单独对这个域名伪装了 ip 得以成功使用chatgpt,这个在后文中会详细讲到。

    配置 vps 和 v2ray

    修改 hostname

    这个对v2ray 没啥子用,只是我想改而已:)

    vim /etc/hostname
    
    

    安装 git

    apt-get install git
    

    安装 zsh 和 ohmyzsh

    Linux 自带的 bash 不是那么地方便使用,所以换成 zsh 是个更好的选择。

    apt-get install zsh
    sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    

    安装 v2ray

    通过官方脚本自动安装 v2ray 本体

    确实有很多种方式安装 v2ray,我这里选择使用 fhs-install-v2ray 项目提供的安装脚本进行安装: 主要是它能帮我自动创建一些文件:

    installed: /usr/local/bin/v2ray
    installed: /usr/local/bin/v2ctl
    installed: /usr/local/share/v2ray/geoip.dat
    installed: /usr/local/share/v2ray/geosite.dat
    installed: /usr/local/etc/v2ray/config.json
    installed: /var/log/v2ray/
    installed: /var/log/v2ray/access.log
    installed: /var/log/v2ray/error.log
    installed: /etc/systemd/system/v2ray.service
    installed: /etc/systemd/system/[email protected]
    

    执行下面的程序脚本即可(目前时间是:2023-05-22,该脚本未来可能发生变动,以具体情况为准) 此处贴出项目 README 文件:README.zh

    bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
    

    执行完后,若无明显错误,即可通过 systemctl start v2ray.servicesystemctl status v2ray.service 查看是否能正确启动。

    配置 v2ray 服务端

    无论是服务端亦或是客户端的配置,其实都非常简单,只需要将配置文件改动一些即可使用。 以下是官方提供的服务端配置:

    {
        "inbounds": [
            {
                "port": 10086, // 服务器监听端口
                "protocol": "vmess",
                "settings": {
                    "clients": [
                        {
                            "id": "xxxxxxxxxxxxxxx"
                        }
                    ]
                }
            }
        ],
        "outbounds": [
            {
                "protocol": "freedom"
            }
        ]
    }
    

    在入门阶段,只需要了解 inbounds 中的 portid 即可。

    • port 即是服务器的监听端口
    • id 可以理解为某种密钥一样的存在,在服务端与客户端交流时,需要通过这值进行辨别身份。可以使用 cat /proc/sys/kernel/random/uuid 指令生成这个 id。

    服务器的配置中需要确保 id 和端口与客户端一致,就可以正常连接了。

    最后重启一下 v2ray 服务即可:systemctl restart v2ray.service ,当然因为可能存在的将配置文件写错的问题,最好再查看一下有没有错误产生 systemctl status v2ray.service

    没有问题后,即可开始配置 v2ray 客户端。

    啊,最后注意让防火墙放开对应的端口,比如这里的10086端口

    ufw allow 10086/tcp
    

    配置 v2ray 客户端

    • Linux 平台可以使用 v2ray 程序(服务器所用的那个),它即可以当服务端也可以作为客户端使用
    • Android 平台可以使用 v2rayNG

    无论是 android 还是 windows,其都有相应的图形界面,配置起来很简单,这里主要讲一下 v2ray 如何作为客户端使用。

    以下贴出官方提供的客户端配置:

    {
        "inbounds": [
            {
                "port": 1080, // SOCKS 代理端口,在浏览器中需配置代理并指向这个端口
                "listen": "127.0.0.1",
                "protocol": "socks",
                "settings": {
                    "udp": true
                }
            }
        ],
        "outbounds": [
            {
                "protocol": "vmess",
                "settings": {
                    "vnext": [
                        {
                            "address": "server", // 服务器地址,请修改为你自己的服务器 ip 或域名
                            "port": 10086, // 服务器端口
                            "users": [
                                {
                                    "id": "b831381d-6324-4d53-ad4f-8cda48b30811"
                                }
                            ]
                        }
                    ]
                }
            },
            {
                "protocol": "freedom",
                "tag": "direct"
            }
        ],
        "routing": {
            "domainStrategy": "IPOnDemand",
            "rules": [
                {
                    "type": "field",
                    "ip": [
                        "geoip:private"
                    ],
                    "outboundTag": "direct"
                }
            ]
        }
    }
    

    虽然这看起来蛮多的,但需要修改的地方也就是 outbounds 里的 addressportid

    • address 填入 vps 的 ip 地址亦或是域名
    • port 填入服务端中监听的那个地址
    • id 填入服务端的 id

    这样一切弄完后,在配置一下 socks_proxy 的环境变量即可。

    export socks_proxy=https://127.0.0.1:1080;"
    

    当然也可以把 http_proxyhttps_proxy 代理填入。

    若是你想在浏览器使用:

    • firefox 相对方便,直接在设置中选择 socks5 代理,地址即填入配置文件中的:127.0.0.1:1080
    • chrome 可以去下载 名为 SwitchyOmega 的插件,也使用 sock5 配置即可

    使用 WebSocket+TLS+Web 完成伪装

    此处先给出参考的文章引用,在文章末尾也会重复给出,感谢各位前辈的教程。

    在完成了之前那些操作后,自然是可以正常使用 v2ray 的,但是非常容易被封杀(我的坚持了两天hhhhh),这也是我后来才得知道的 :(

    总之,被封杀了我便意识到了伪装是极其重要的,以下先介绍一些概念名称,我刚开始接触这一部分便直接放弃了,但遗憾的是这一部分却又不得不学,GFW 太强啦,我们只能被迫去与之对抗。

    TLS

    TLS 加密,TLS 中文叫 传输层安全性协议,以下是 wikipedia 的描述:

    将通信两方交换的资料做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听

    这是用来加密的,广为人知的 HTTP 在经过 TLS 加密后,成为了HTTPS

    若是 v2ray 的流量没有被 TLS 加密,那么审查者便能根据数据内容分析出,这是违“法”的数据,而且代理流量源源不断地从固定 ip 发来,这样的流量同样是不正常的。

    网站前置伪装 与 websocket 协议

    仅用 TLS 加密依旧是不够的,因为流量不正常,这些大规模的流量因为代理的原因来去于同一个ip,这样的流量即使是加密的,也应该是有问题的。所以,需要再完成一次伪装,使用 Nginx 与 域名 搭建一个真实的网站,我们的客户端通过 websocket(ws)协议与这个用 Nginx 作为前端的网站进行数据交流,这样一来,我们的服务器就是正儿八经的网站服务器(事实也确实如此),而非代理服务器,在找到某种特征之前,不可能大面积封杀这样的正常服务器。

    使用,我们现在的任务很简单,购买一个域名(可以是免费的二级域名),在我们的 VPS 中通过 Nginx 搭建一个真实但简单的网站,然后让客户端和服务器端通过ws协议交流,接着通过 Nginx 分流特定的路由。

  • VPS
  • v2ray