From f59c45decd98d9452d82e9434ac628e41562b64a Mon Sep 17 00:00:00 2001 From: JimhHan <50871214+JimhHan@users.noreply.github.com> Date: Sun, 4 Apr 2021 14:31:01 +0800 Subject: [PATCH] Fix: format --- docs/document/level-0/ch01-preface.md | 2 +- docs/document/level-0/ch02-preparation.md | 2 +- docs/document/level-0/ch03-ssh.md | 14 +- docs/document/level-0/ch04-security.md | 60 ++-- docs/document/level-0/ch05-webpage.md | 6 +- docs/document/level-0/ch06-certificates.md | 2 +- docs/document/level-0/ch07-xray-server.md | 274 +++++++++-------- docs/document/level-0/ch08-xray-clients.md | 325 +++++++++++---------- docs/document/level-1/fallbacks-lv1.md | 2 +- docs/document/level-1/routing-lv1-part1.md | 2 +- docs/document/level-2/README.md | 8 +- 11 files changed, 362 insertions(+), 335 deletions(-) diff --git a/docs/document/level-0/ch01-preface.md b/docs/document/level-0/ch01-preface.md index bf5b13298..11b2d44e1 100644 --- a/docs/document/level-0/ch01-preface.md +++ b/docs/document/level-0/ch01-preface.md @@ -75,7 +75,7 @@ 现在,你已经看到了机场的优势和风险,要用什么,就请各位充分思考并自行决定。毕竟,最适合你的方案才是最好的方案。 - It's Your Choice! +![It's Your Choice!](./ch01-img01-choice.png) 1. 如果决定使用机场的话,现在,你可以关闭本文了。 diff --git a/docs/document/level-0/ch02-preparation.md b/docs/document/level-0/ch02-preparation.md index 689580272..d270df53e 100644 --- a/docs/document/level-0/ch02-preparation.md +++ b/docs/document/level-0/ch02-preparation.md @@ -27,7 +27,7 @@ 1. 请选择靠谱的国际域名服务商。选择一些常见的域名后缀就行,注意不要用 `.cn` 后缀。 2. 在 DNS 设置中,添加一条指向你 VPS 的 IP 地址的 A 记录(A 记录的名字可以随便起,本文会用 `"a-name"` 来表示。完整的域名则会用 `"二级域名.你的域名.com"` 或者 `"a-name.yourdomain.com"` 来表示)。效果如下图: -添加A记录 +![添加A记录](./ch02-img01-a-name.png) ::: tip **注意:** 这**不是**一个真实可用的网址,请替换成你的真实网址 diff --git a/docs/document/level-0/ch03-ssh.md b/docs/document/level-0/ch03-ssh.md index e85b2c15b..3c5c57feb 100644 --- a/docs/document/level-0/ch03-ssh.md +++ b/docs/document/level-0/ch03-ssh.md @@ -10,15 +10,15 @@ 1. 进入 PuTTY 的[官网](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html),选择适合你操作系统的版本下载。(本文以 64 位版本为例) - 下载PuTTY + ![下载PuTTY](./ch03-img01-putty-download.png) -2. 安装运行后,将会看到 PuTTY 的主界面。现在请拿出你上一章记东西的[小本本](../ch02-preparation/#21-%E8%8E%B7%E5%8F%96%E4%B8%80%E5%8F%B0vps),在下图的对应位置填入你 VPS 的**IP 地址(VPS IP)**和**端口(VPS PORT)**。为了方便以后使用时不用重复输入,我们可以保存会话 (Saved Sessions),未来使用时只要按 Load 即可一键载入设置。 +2. 安装运行后,将会看到 PuTTY 的主界面。现在请拿出你上一章记东西的[小本本](./ch02-preparation.md#21-%E8%8E%B7%E5%8F%96%E4%B8%80%E5%8F%B0vps),在下图的对应位置填入你 VPS 的**IP 地址(VPS IP)**和**端口(VPS PORT)**。为了方便以后使用时不用重复输入,我们可以保存会话 (Saved Sessions),未来使用时只要按 Load 即可一键载入设置。 - 设置PuTTY + ![设置PuTTY](./ch03-img02-putty-settings.png) 3. 我建议将 `Connection` 中的 `keepalive` 设置为 `60` 秒,防止你一段时间没有操作之后 SSH 自动断线。另外务必再次保存设置。 - 防止频繁断线 + ![防止频繁断线](./ch03-img03-putty-keepalive.png) ::: warning 注意 对 PuTTY 的任何设置更新都要再次手动保存 Session,不然关闭后就会丢失 @@ -26,13 +26,13 @@ 4. 点击 Open 就会进入 SSH 连接窗口,对应下图输入用户名与密码,与你的 VPS 远程主机建立连接。(本文假设默认用户名是 `root`,另外,在 Linux 系统输入密码的时候,是不会出现 `******` 这种提示符的,这样可以避免密码长度泄漏,不是你的键盘坏掉了哦!) - SSH远程登录 + ![SSH远程登录](./ch03-img04-ssh-login.png) ## 3.2 成功登录 SSH!初识命令行界面! 1. 如果你的信息都填写正确,你将会看到类似下图的界面,说明已登录成功: - 初次登录VPS + ![初次登录VPS](./ch03-img05-ssh-login-success.png) 这个界面,就等于远程服务器的【桌面】,但它没有你熟悉的图标和鼠标,没有绚丽的色彩,有的只是简单文字,这就是【**命令行界面**】- `Command Line Interface`,或者缩写为 `CLI`。 @@ -76,7 +76,7 @@ 6. 完整流程演示如下: - 初次软件更新流程演示 + ![初次软件更新流程演示](./ch03-img06-apt-upgrade-full.gif) ## 3.4 你的进度 diff --git a/docs/document/level-0/ch04-security.md b/docs/document/level-0/ch04-security.md index 74afe95bf..0d73b816a 100644 --- a/docs/document/level-0/ch04-security.md +++ b/docs/document/level-0/ch04-security.md @@ -69,7 +69,7 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 4. 文件打开后,你就进入了`nano`的界面,稍微观察一下,你会发现,它把重要的快捷键都显示在屏幕下方了(下图红框内),直接开卷考试、不用死记硬背,是不是很贴心呢? - nano的界面 + ![nano的界面](./ch04-img01-nano-ui.png) 5) 我们要做的第二件事,是【在打开的文件中找到`Port`这一项,并修改它的端口】。Port 后面的数字就是 SSH 的端口,一般建议把它改成一个大于`1024`小于`65535`的整数(本文以`9753`为例)。请结合`nano`的快捷键,想一下该怎么操作呢?果然,你又说对了!就是: @@ -95,7 +95,7 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 8. 完整流程演示如下: - 修改非22端口演示 + ![修改非22端口演示](./ch04-img02-sshd-conf-full.gif) 9. 修改 PuTTY 配置 @@ -121,18 +121,17 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 # adduser vpsadmin ``` - 执行命令后,根据提示操作即可。请务必设置一个用户密码(别忘记设置密码时你时看不到 `******` 的)。之后系统会询问你一些用户的附加信息,这些就可以无视,一路回车即可。 - 建立新用户 + ![建立新用户](./ch04-img03-adduser.png) ::: warning 注意 本文以`vpsadmin`为例,就意味着随着本文的发布,这个用户名也会变成一个不大不小的特征,也许会被攻击者优先尝试。所以和端口一样,我强烈建议你用一个自己想到的其他用户名。 ::: 4. 完整流程演示如下: - - 建立新用户 + + ![建立新用户](./ch04-img04-adduser-full.gif) 5. 我们要做的第二件事,是【安装`sudo`功能】(`sudo` 就是在关键时刻,让普通账户临时获得 `root` 的神力,战力全开拯救世界) @@ -158,8 +157,8 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 ::: 7. 完整流程演示如下: - - 建立新用户 + + ![建立新用户](./ch04-img05-sudo-full.gif) ## 4.6 禁用 root 用户 SSH 远程登录 @@ -186,12 +185,12 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 ``` 5. 完整流程演示如下: - - 禁用root用户SSH远程登录 + + ![禁用root用户SSH远程登录](./ch04-img06-ssh-no-root-full.gif) 6. 下次通过 PuTTY 远程 SSH 登录的时候,`root`用户已无法连接,用户名就要换成`vpsadmin`了!方便起见,我们可以在 PuTTY 中把`vpsadmin`设置成默认登录用户名。(啰嗦君:别忘了保存 Session) - PuTTY设置默认用户名 + ![PuTTY设置默认用户名](./ch04-img07-putty-default-user.png) ## 4.7 使用 RSA 密钥登录并禁用密码登录 @@ -220,7 +219,8 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 1. 运行`PuTTYgen` (PuTTY 密钥生成器)。位置是 `开始菜单` --> `所有程序` --> `PuTTY (64-bit)` --> `PuTTYgen` 1. 点击`Generate`开始生成(在界面空白处乱晃鼠标增加随机数) - 生成密钥 + + ![生成密钥](./ch04-img08-puttygen-save.png) ::: warning 注意 本图中是以 `2048` 位的 `RSA` 密钥为例的。但实际上,如果要获得与 `EDCSA/Ed25519` 的 `256` 位密钥相同的安全性,你需要使用 `3072` 位的 `RSA` 密钥。(即右下角的数字改成 `3072`) @@ -230,33 +230,41 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 3. 点击 `Save public key` 保存公钥,文件名为 `id_rsa.pub` 4. 点击 `Save private key` 保存私钥,文件名为 `id_rsa` (PuTTY 私钥自带`.ppk`后缀) 5. 最重要的,将上方红框内的内容,向下滚动全部复制出来并保存,文件名为 `authorized_keys`。(用 vscode 保存,默认会变成带`txt`后缀的文本文件,这没关系,之后上传 VPS 时我们会把后缀名去掉) - 保存密钥 + + ![保存密钥](./ch04-img09-puttygen-save-keys.png) 2. 将公钥上传至 VPS 的`vpsadmin`用户下 1. 这一步就需要用到之前准备的`WinSCP`了。 2. 去[官网](https://winscp.net/eng/index.php)下载并安装,会提示你导入 PuTTY 的设置,当然一键导入啦! - 一键导入Session + + ![一键导入Session](./ch04-img10-winscp-import-session.png) 3. 如果没有提示导入或者你已经提前安装好了,那按照下图进行配置即可 - WinSCP登录设置 + + ![WinSCP登录设置](./ch04-img11-winscp-ui.png) 4. WinSCP 左边的目录就是本地电脑上的文件夹和文件,请定位到密钥所在的文件夹 5. WinSCP 右边的目录则是 VPS 服务器上的文件夹和文件,默认就在 `/home/vpsadmin/` 文件夹,此时在请点击右下角 `X hidden` 来显示隐藏文件 - 本地和远程文件夹 + + ![本地和远程文件夹](./ch04-img12-winscp-locations.png) 6. 在右边(VPS 中)点击右键并新建文件夹,起名`.ssh` (注意有一个`.`) - 在VPS中建立放置公钥的文件夹 + + ![在VPS中建立放置公钥的文件夹](./ch04-img13-winscp-newfolder-key.png) 7. 将【公钥】`authorized_keys`上传到`.ssh`文件夹内 - 上传authorized_keys + + ![上传authorized_keys](./ch04-img14-winscp-upload-key.png) 8. 在上传时,将【公钥】从 `authorized_keys.txt` 改名为 `authorized_keys`(去掉`.txt`这个后缀名) - 确保没有任何后缀 + + ![确保没有任何后缀](./ch04-img15-winscp-rename-key.png) 9. 完整流程演示如下: - WinSCP操作完整演示 + + ![WinSCP操作完整演示](./ch04-img16-winscp-full.gif) 3. 在 VPS 端设置 SSH 启用 RSA 密钥验证登录、同时禁用密码验证登录 @@ -290,24 +298,24 @@ Linux 服务器的安全防护是一个纷繁复杂的巨大课题。无数的 $ sudo systemctl restart ssh ``` - 8. 完整流程如下: - - SSH开启密钥验证并禁用密码验证 + 8. 完整流程如下: + + ![SSH开启密钥验证并禁用密码验证](./ch04-img17-rsa-login-full.gif) 4. VPS 端已经设置好了公钥,现在要给 PuTTY 指定私钥位置供登录时使用(啰嗦君:别忘了保存 Session) - PuTTY指定私钥位置 + ![PuTTY指定私钥位置](./ch04-img18-putty-privatekey-location.png) 5. 至此,【密钥登录】已成功开启、【密码验证】已成功关闭、并且还给 PuTTY 保存了默认的登录用户名和私钥。未来使用 PuTTY 登录时,载入`VPS-SERVER`配置后,点击`Open`就可以一键登录了。 如果你给私钥设置了密码保护,登录时当然还需要输入这个密码才能使用密钥,如下图: - 输入私钥密码 + ![输入私钥密码](./ch04-img19-putty-privatekey-passphrase.png) 6. 别忘了给`WinSCP`也做对应的密钥设置,否则之后想要传输文件时就无法登录了: - WinSCP指定私钥位置 + ![WinSCP指定私钥位置](./ch04-img20-winscp-privatekey-location.png) ::: warning 注意 任何需要借助 SSH 进行登录的软件都需要密钥验证了,软件过多,无法逐一展示,请根据你的需要自行设置好哦 diff --git a/docs/document/level-0/ch05-webpage.md b/docs/document/level-0/ch05-webpage.md index 918657165..f34d60eaf 100644 --- a/docs/document/level-0/ch05-webpage.md +++ b/docs/document/level-0/ch05-webpage.md @@ -26,7 +26,7 @@ 2. 完成后,Nginx 已经自动运行。此时打开 Windows 上的浏览器并输入 `http://100.200.300.400:80`,若看到下图的界面就说明 Nginx 已经正常在运行了。 - Nginx默认界面 + ![Nginx默认界面](./ch05-img01-nginx-default-running.png) ## 5.3 创建一个最简单的网页 @@ -118,11 +118,11 @@ 4. 完整的设置流程如下: - 网页设置演示 + ![网页设置演示](./ch05-img02-nginx-conf-full.gif) 5. 此时如果你访问 `http://二级域名.你的域名.com`,你看到这样的页面则说明成功: - http网页成功 + ![http网页成功](./ch05-img03-nginx-http-running.png) ## 5.4 常见错误的说明 diff --git a/docs/document/level-0/ch06-certificates.md b/docs/document/level-0/ch06-certificates.md index 9cac82976..15ffe7962 100644 --- a/docs/document/level-0/ch06-certificates.md +++ b/docs/document/level-0/ch06-certificates.md @@ -40,7 +40,7 @@ 5. 到这一步的完整流程如下图: - acme.sh安装演示 + ![acme.sh安装演示](./ch06-img01-acme-install.gif) ## 6.3 测试证书申请 diff --git a/docs/document/level-0/ch07-xray-server.md b/docs/document/level-0/ch07-xray-server.md index 7b6ef2754..1260b10fa 100644 --- a/docs/document/level-0/ch07-xray-server.md +++ b/docs/document/level-0/ch07-xray-server.md @@ -7,7 +7,9 @@ 其实这样的结构是我多番思考之后的决定,毕竟只有打好基础,才能在后面事半功倍快速反超。我在群里看到许多新人连`nano`都无法正确使用,也不会用`WinSCP`,远程手写编辑出来的`config.json`自然错误百出,连查错也变得举步维艰。 ::: warning -经过了前 6 章的准备,各位已经跟我一起翻越了 Linux 基本操作、VPS 远程管理、网页搭建、域名管理、证书申请等等几座大山。是不是回头看看,觉得其实非常简单呢?现在我们有了如此扎实的准备,接下来安装和配置 Xray 时会有一种【水到渠成】的轻快感觉。 + +经过了前 6 章的准备,各位已经跟我一起翻越了 Linux 基本操作、VPS 远程管理、网页搭建、域名管理、证书申请等等几座大山。是不是回头看看,觉得其实非常简单呢?现在我们有了如此扎实的准备,接下来安装和配置 Xray +时会有一种【水到渠成】的轻快感觉。 ::: 后面要做的事情非常简单: @@ -19,16 +21,15 @@ ## 7.2 安装 Xray -首先,Xray 的官方载体,就是 [xray-core](https://github.com/XTLS/Xray-core) 开源项目(基于 `MPL 2.0` 开源协议)生成的二进制程序。你把这个二进制放在服务器运行,它就是服务器端;你把它下载到本地电脑运行,它就是客户端。主要区别来源于【配置】。 +首先,Xray 的官方载体,就是 [xray-core](https://github.com/XTLS/Xray-core) 开源项目(基于 `MPL 2.0` +开源协议)生成的二进制程序。你把这个二进制放在服务器运行,它就是服务器端;你把它下载到本地电脑运行,它就是客户端。主要区别来源于【配置】。 -安装时,直接使用官方安装脚本就很简单直接。它提供了多种安装选项,有兴趣的可以去官方的[安装脚本仓库](https://github.com/XTLS/Xray-install)中看看脚本的说明,**本文使用的是【非 root 用户】安装模式**。 +安装时,直接使用官方安装脚本就很简单直接。它提供了多种安装选项,有兴趣的可以去官方的[安装脚本仓库](https://github.com/XTLS/Xray-install)中看看脚本的说明,**本文使用的是【非 root +用户】安装模式**。 写本文时,安装脚本在使用非 root 账户时有一些小 bug,所以我决定正好把这几步分开操作,可以顺便说明一下 Linux 下的删除命令。 -1. 小小白白 Linux 基础命令: - | 编号 | 命令名称 | 命令说明 | - |:--:|:--:|:--:| - | `cmd-14` | `rm` | 删除命令 | +1. 小小白白 Linux 基础命令: | 编号 | 命令名称 | 命令说明 | |:--:|:--:|:--:| | `cmd-14` | `rm` | 删除命令 | 2. 将安装脚本下载至本地: @@ -49,16 +50,20 @@ ``` ::: warning 注意 - 使用 `rm` 命令删除文件的时候,默认其实就是删除现在所在的文件夹下的文件。但是,**我依然写了完整的路径**: `~/install-release.sh`,这是我使用 `rm` 时的一个安全习惯、也是我把安装分成几步之后想强调一下的内容。如果你听过一些“程序员从删库到跑路”之类的段子,大概就知道为什么了。 + + 使用 `rm` 命令删除文件的时候,默认其实就是删除现在所在的文件夹下的文件。但是,**我依然写了完整的路径**: `~/install-release.sh`,这是我使用 `rm` + 时的一个安全习惯、也是我把安装分成几步之后想强调一下的内容。如果你听过一些“程序员从删库到跑路”之类的段子,大概就知道为什么了。 ::: 5. 完整流程演示如下: - Xray服务器端安装流程演示 + ![Xray服务器端安装流程演示](./ch07-img01-xray-install.gif) ## 7.3 给 Xray 配置 TLS 证书 -虽然我们前面已经申请好了 TLS 证书,但是按照 [`acme.sh`的官方说明](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6),申请后的证书不建议直接使用。正确的方法是使用 `--install-cert` 命令安装给需要的程序。我们现在就来把证书安装给 `xray-core` 使用。 +虽然我们前面已经申请好了 TLS +证书,但是按照 [`acme.sh`的官方说明](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6),申请后的证书不建议直接使用。正确的方法是使用 `--install-cert` +命令安装给需要的程序。我们现在就来把证书安装给 `xray-core` 使用。 1. 为了规避非 root 账户的各种潜在的权限困扰,我们在 vpsadmin 账户下建立一个证书文件夹 @@ -82,68 +87,71 @@ 4. 过程比较简单就不放动图了: - Xray证书安装 + ![Xray服务器端安装流程演示](./ch07-img02-xray-cert-install.png) 5. `acme.sh` 会每 60 天检查一次证书并自动更新临期证书。但据我所知是它并不会自动将新证书安装给 `xray-core`,所以我们需要新增一个系统的自动周期任务来完成这一步。 - 1. 小小白白 Linux 基础命令: - | 编号 | 命令名称 | 命令说明 | - |:--:|:--:|:--:| - | `cmd-15` | `crontab -e` | 编辑当前用户的定时任务 | + 1. 小小白白 Linux 基础命令: | 编号 | 命令名称 | 命令说明 | |:--:|:--:|:--:| | `cmd-15` | `crontab -e` | 编辑当前用户的定时任务 | - 2. 建立一个脚本文件(`xray-cert-renew.sh`) + 2. 建立一个脚本文件(`xray-cert-renew.sh`) - ``` - $ nano ~/xray_cert/xray-cert-renew.sh - ``` + ``` + $ nano ~/xray_cert/xray-cert-renew.sh + ``` - 3. 把下面的内容复制进去,记得替换你的真实域名,然后保存退出 + 3. 把下面的内容复制进去,记得替换你的真实域名,然后保存退出 - ``` - #!/bin/bash + ``` + #!/bin/bash + + /home/vpsadmin/.acme.sh/acme.sh --install-cert -d a-name.yourdomain.com --ecc --fullchain-file /home/vpsadmin/xray_cert/xray.crt --key-file /home/vpsadmin/xray_cert/xray.key + echo "Xray Certificates Renewed" + + chmod +r /home/vpsadmin/xray_cert/xray.key + echo "Read Permission Granted for Private Key" + + sudo systemctl restart xray + echo "Xray Restarted" + ``` - /home/vpsadmin/.acme.sh/acme.sh --install-cert -d a-name.yourdomain.com --ecc --fullchain-file /home/vpsadmin/xray_cert/xray.crt --key-file /home/vpsadmin/xray_cert/xray.key - echo "Xray Certificates Renewed" + ::: warning 注意 - chmod +r /home/vpsadmin/xray_cert/xray.key - echo "Read Permission Granted for Private Key" + 经大家提醒,`acme.sh` 有一个 `reloadcmd` 命令,可以在证书更新时自动执行特定命令,那么就可以指定自动给 `Xray` 安装证书,但因为 `crontab` 是 Linux + 系统中一个非常有用、非常常用的功能,所以本文保留 `crontab` 的方式来更新 `Xray` 证书。(对 `reloadcmd` 感兴趣的同学可以查看 `acme.sh` + 的[官方文档](https://github.com/acmesh-official/acme.sh)) - sudo systemctl restart xray - echo "Xray Restarted" - ``` + 另外,录制动图时,脚本中没有加入重启 `Xray` 的命令,是因为 `Xray` 计划支持【证书热更新】功能,即 `Xray` 会自动识别证书更新并重载证书、无需手动重启。待功能加入后,我将适当修改 `config.json` + 开启此设置,并删除脚本中的重启命令。 + ::: - ::: warning 注意 - 经大家提醒,`acme.sh` 有一个 `reloadcmd` 命令,可以在证书更新时自动执行特定命令,那么就可以指定自动给 `Xray` 安装证书,但因为 `crontab` 是 Linux 系统中一个非常有用、非常常用的功能,所以本文保留 `crontab` 的方式来更新 `Xray` 证书。(对 `reloadcmd` 感兴趣的同学可以查看 `acme.sh` 的[官方文档](https://github.com/acmesh-official/acme.sh)) + 4. 给这个文件增加【可执行】权限 - 另外,录制动图时,脚本中没有加入重启 `Xray` 的命令,是因为 `Xray` 计划支持【证书热更新】功能,即 `Xray` 会自动识别证书更新并重载证书、无需手动重启。待功能加入后,我将适当修改 `config.json` 开启此设置,并删除脚本中的重启命令。 - ::: + ``` + $ chmod +x ~/xray_cert/xray-cert-renew.sh + ``` - 4. 给这个文件增加【可执行】权限 + 5. 运行 `crontab -e`,添加一个自动任务【每月自动运行一次`xray-cert-renew.sh`】 (注意不要加`sudo`,因为我们增加的是`vpsadmin` + 账户的自动任务。初次运行时会让你选择编辑器,当然是选择熟悉的`nano`啦!) - ``` - $ chmod +x ~/xray_cert/xray-cert-renew.sh - ``` + ``` + $ crontab -e + ``` - 5. 运行 `crontab -e`,添加一个自动任务【每月自动运行一次`xray-cert-renew.sh`】 (注意不要加`sudo`,因为我们增加的是`vpsadmin`账户的自动任务。初次运行时会让你选择编辑器,当然是选择熟悉的`nano`啦!) + 6. 把下面的内容增加在文件最后,保存退出即可。 - ``` - $ crontab -e - ``` + ``` + # 1:00am, 1st day each month, run `xray-cert-renew.sh` + 0 1 1 * * bash /home/vpsadmin/xray_cert/xray-cert-renew.sh + ``` - 6. 把下面的内容增加在文件最后,保存退出即可。 + 7. 完整流程演示如下: - ``` - # 1:00am, 1st day each month, run `xray-cert-renew.sh` - 0 1 1 * * bash /home/vpsadmin/xray_cert/xray-cert-renew.sh - ``` - - 7. 完整流程演示如下: - - 每月自动给Xray安装证书 + ![每月自动给Xray安装证书](./ch07-img03-crontab-cert-renew.gif) ## 7.4 配置 Xray -首先,各种配置都可以参考[官方 VLESS 配置示例](https://github.com/XTLS/Xray-examples)。本文会基于官方示例,配置一个最精简的方式:【单 `VLESS` 协议入站 + `80` 端口回落】,满足大多数场景的最大速度及必要安全。 +首先,各种配置都可以参考[官方 VLESS 配置示例](https://github.com/XTLS/Xray-examples)。本文会基于官方示例,配置一个最精简的方式:【单 `VLESS` 协议入站 + `80` +端口回落】,满足大多数场景的最大速度及必要安全。 1. 生成一个合法的 `UUID` 并保存备用(`UUID`可以简单粗暴的理解为像指纹一样几乎不会重复的 ID) @@ -153,31 +161,30 @@ 2. 建立日志文件及文件夹备用 - 1. 小小白白 Linux 基础命令: - | 编号 | 命令名称 | 命令说明 | - |:--:|:--:|:--:| - | `cmd-16` | `touch` | 建立空白文件 | + 1. 小小白白 Linux 基础命令: | 编号 | 命令名称 | 命令说明 | |:--:|:--:|:--:| | `cmd-16` | `touch` | 建立空白文件 | - 2. 在`vpsadmin`的文件夹内建立一个【日志专用文件夹】 + 2. 在`vpsadmin`的文件夹内建立一个【日志专用文件夹】 - ``` - $ mkdir ~/xray_log - ``` + ``` + $ mkdir ~/xray_log + ``` - 3. 生成所需的两个日志文件(访问日志、错误日志) + 3. 生成所需的两个日志文件(访问日志、错误日志) - ``` - $ touch ~/xray_log/access.log && touch ~/xray_log/error.log - ``` + ``` + $ touch ~/xray_log/access.log && touch ~/xray_log/error.log + ``` - ::: warning 注意 - 这个位置不是`Xray`标准的日志文件位置,放在这里是避免权限问题对新人的操作带来困扰。当你熟悉之后,建议回归默认位置: `/var/log/xray/access.log` 和 `/var/log/xray/error.log` 。 - ::: + ::: warning 注意 - 4. 因为 Xray 默认是 nobody 用户使用,所以我们需要让其他用户也有“写”的权限(`*.log` 就是所有文件后缀是`log`的文件,此时`CLI`界面的效率优势就逐渐出现了) - ``` - $ chmod a+w ~/xray_log/*.log - ``` + 这个位置不是`Xray`标准的日志文件位置,放在这里是避免权限问题对新人的操作带来困扰。当你熟悉之后,建议回归默认位置: `/var/log/xray/access.log` + 和 `/var/log/xray/error.log` 。 + ::: + + 4. 因为 Xray 默认是 nobody 用户使用,所以我们需要让其他用户也有“写”的权限(`*.log` 就是所有文件后缀是`log`的文件,此时`CLI`界面的效率优势就逐渐出现了) + ``` + $ chmod a+w ~/xray_log/*.log + ``` 3. 使用`nano`创建`Xray`的配置文件 @@ -185,7 +192,8 @@ $ sudo nano /usr/local/etc/xray/config.json ``` -4. 将下面的文件全部复制进去,并将之前生成的`UUID`填入第 61 行 `"id": "",` 之中。(填好之后的样子是 `"id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid"`),本文的这个配置文件中增加了我的各种啰嗦注解,以方便你理解每一个配置模块的功能是什么。 +4. 将下面的文件全部复制进去,并将之前生成的`UUID`填入第 61 行 `"id": "",` 之中。(填好之后的样子是 `"id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid"` + ),本文的这个配置文件中增加了我的各种啰嗦注解,以方便你理解每一个配置模块的功能是什么。 ``` // REFERENCE: @@ -299,7 +307,7 @@ 5. 完整流程演示如下: - 创建日志文件及`config.json`配置文件 + ![创建日志文件及`config.json`配置文件](./ch07-img04-xray-log-and-config.gif) ## 7.5 启动 Xray 服务!!(并查看服务状态) @@ -321,11 +329,12 @@ 3. 完整流程演示如下: - 启动并查看Xray运行状态 + ![启动并查看Xray运行状态](./ch07-img05-xray-start-and-status.gif) ## 7.6 回顾 `systemd` 进行基本的服务管理 -到现在为止,我们已经使用过了`systemctl`相关的`start`, `status`, `reload` 等命令,这些都是基于`systmed`管理模块对 Linux 系统中各种服务进行管理的通用命令。现在正好熟悉一下相关的其他几个命令。 +到现在为止,我们已经使用过了`systemctl`相关的`start`, `status`, `reload` 等命令,这些都是基于`systmed`管理模块对 Linux +系统中各种服务进行管理的通用命令。现在正好熟悉一下相关的其他几个命令。 1. 若你需要暂时关闭 `Xray` 的服务,那就用`stop`命令 @@ -360,7 +369,8 @@ 2. 实际的`BBR` - **BBR** = **B**ottleneck **B**andwidth and **R**ound-trip propagation time,是一种 TCP 的**拥塞控制算法**。简单粗暴的理解就是**数据流量的交通管理**:当公路不再塞车的时候,每辆车自然就能保持较快的车速了。 + **BBR** = **B**ottleneck **B**andwidth and **R**ound-trip propagation time,是一种 TCP 的**拥塞控制算法**。简单粗暴的理解就是**数据流量的交通管理** + :当公路不再塞车的时候,每辆车自然就能保持较快的车速了。 那么它有没有用呢?一般而言,`有BBR` 和 `没有BBR` 会有可以感知的差别(速度、稳定性、延迟方面都会有一些改善),所以 **【非常建议开启 `BBR`】**。 @@ -376,10 +386,9 @@ 内核的稳定是一台服务器稳定运行的基石。**【BBR 测试版带来的细微性能差异绝对不值得更换不稳定的内核。】** 请选择你所在的 Linux 发行版所支持的最新内核,这样可以最大限度的保持服务器的长期稳定和兼容。 - - ::: warning 注意 - 所谓魔改`bbr`的【领先】是有非常强的时效性的。比如很多 `bbrplus` 脚本,因为几年来都没有更新,到现在还会把你的内核换成 `4.19`,要知道现在稳定如 Debian 已经是 `5.9` 的时代了,那么这个脚本放在2018年1月也许领先了一点,到2018年10月4.19正发布时就已经失去了意义,放在现在甚至可以说是完完全全的【降级】和【劣化】 - ::: + ::: warning 注意 所谓魔改`bbr`的【领先】是有非常强的时效性的。比如很多 `bbrplus` 脚本,因为几年来都没有更新,到现在还会把你的内核换成 `4.19`,要知道现在稳定如 Debian 已经是 `5.9` + 的时代了,那么这个脚本放在2018年1月也许领先了一点,到2018年10月4.19正发布时就已经失去了意义,放在现在甚至可以说是完完全全的【降级】和【劣化】 + ::: 4. `fq`, `fq_codel`, `fq_pie`, `cake`和其他算法哪个好? @@ -389,57 +398,64 @@ 一句话:**不要用这些!把他们丢进历史的垃圾桶吧!** - 它能解决的也只有丢包率的问题。不太准确的比喻,就是本来你用一辆车送你的货,有时候车半路就坏了(丢包),用了这些以后,你直接派出 3 份一样的货,让三辆车同时送,只要有一辆没坏就能送到。马路上都是你的车,自然就能把别人挤下去。但可想而知,你挤别人的时候,别人也会来挤你,而整个机房的出口道路一共就那么宽,最终势必就变成集体大堵车了。 + 它能解决的也只有丢包率的问题。不太准确的比喻,就是本来你用一辆车送你的货,有时候车半路就坏了(丢包),用了这些以后,你直接派出 3 + 份一样的货,让三辆车同时送,只要有一辆没坏就能送到。马路上都是你的车,自然就能把别人挤下去。但可想而知,你挤别人的时候,别人也会来挤你,而整个机房的出口道路一共就那么宽,最终势必就变成集体大堵车了。 - ::: warning 说明 - 它们的原理不是算法优化、不是提速、大多数是简单粗暴的**多倍发包**。对于【丢包率非常高】的差线路可能有一点作用,但【对丢包率低的好线路没有任何优化作用,反而会成倍的消耗你的流量】,进而造成服务器和你的邻居不必要的压力。 + ::: warning 说明 它们的原理不是算法优化、不是提速、大多数是简单粗暴的**多倍发包** + 。对于【丢包率非常高】的差线路可能有一点作用,但【对丢包率低的好线路没有任何优化作用,反而会成倍的消耗你的流量】,进而造成服务器和你的邻居不必要的压力。 如果你的线路真的丢包率奇高,真正靠谱的解决方案是【换线路】。 ::: 6. 啰嗦了这么多,就是因为围绕 `BBR` 忽悠小白的错误概念和坑人脚本实在是太多了。我希望你们现在对 `BBR` 有了相对清晰的理解。接下来,我们就动手安装最新的 Debian 内核并开启`BBR` 吧!(真的很简单) - 1. 给 Debian 10 添加官方 `backports` 源,获取更新的软件库 + 1. 给 Debian 10 添加官方 `backports` 源,获取更新的软件库 - ``` - $ sudo nano /etc/apt/sources.list - ``` + ``` + $ sudo nano /etc/apt/sources.list + ``` - ::: warning 说明 - 本文以 Debian 10 为例,所以使用 `/etc/apt/sources.list` 仍无问题,但如果你并不是根据本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立 `/etc/apt/sources.list.d/` 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/apt/sources.list.d/vpsadmin.list`,以此保证兼容性,也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。 - ::: + ::: warning 说明 - 2) 然后把下面这一条加在最后,并保存退出。 + 本文以 Debian 10 为例,所以使用 `/etc/apt/sources.list` 仍无问题,但如果你并不是根据本文从头开始,或者使用了其他 Linux + 发行版,那么建议你建立 `/etc/apt/sources.list.d/` 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/apt/sources.list.d/vpsadmin.list` + ,以此保证兼容性,也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。 + ::: - ``` - deb http://deb.debian.org/debian buster-backports main - ``` + 2) 然后把下面这一条加在最后,并保存退出。 - 3) 刷新软件库并查询 Debian 官方的最新版内核并安装。请务必安装你的 VPS 对应的版本(本文以比较常见的【amd64】为例)。 + ``` + deb http://deb.debian.org/debian buster-backports main + ``` - ``` - $ sudo apt update && sudo apt -t buster-backports install linux-image-amd64 - ``` + 3) 刷新软件库并查询 Debian 官方的最新版内核并安装。请务必安装你的 VPS 对应的版本(本文以比较常见的【amd64】为例)。 - ::: warning 注意 - 如果你的 VPS 支持,可以尝试【云服务器专用内核】`linux-image-cloud-amd64`,优点就是精简、资源占用低,缺点嘛是有同学反馈不支持的系统强行安装会导致无法开机(Kernel 无法识别)。 + ``` + $ sudo apt update && sudo apt -t buster-backports install linux-image-amd64 + ``` - 为了避免无法识别的悲剧,请确保: + ::: warning 注意 - - 尝试前做一个系统快照,或者 - - 你有 `vnc` 可以救场(并且你知道怎么用) - ::: + 如果你的 VPS 支持,可以尝试【云服务器专用内核】`linux-image-cloud-amd64`,优点就是精简、资源占用低,缺点嘛是有同学反馈不支持的系统强行安装会导致无法开机(Kernel 无法识别)。 - 4) 修改 `kernel` 参数配置文件 `sysctl.conf` 并指定开启 `BBR` + 为了避免无法识别的悲剧,请确保: - ``` - $ sudo nano /etc/sysctl.conf - ``` + - 尝试前做一个系统快照,或者 + - 你有 `vnc` 可以救场(并且你知道怎么用) + ::: - ::: warning 说明 - 本文以 Debian 10 为例,所以使用 `/etc/sysctl.conf` 仍无问题,但如果你并不是跟着本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立 `/etc/sysctl.d/` 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/sysctl.d/vpsadmin.conf`,以此保证兼容性,因为部分发行版在 `systemd` 207 版本之后便不再从 `/etc/sysctl.conf` 读取参数。使用自定义配置文件也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。 - ::: + 4) 修改 `kernel` 参数配置文件 `sysctl.conf` 并指定开启 `BBR` + ``` + $ sudo nano /etc/sysctl.conf + ``` + + ::: warning 说明 + + 本文以 Debian 10 为例,所以使用 `/etc/sysctl.conf` 仍无问题,但如果你并不是跟着本文从头开始,或者使用了其他 Linux 发行版,那么建议你建立 `/etc/sysctl.d/` + 文件夹,并在这个文件夹内建立自己的配置文件,形如 `/etc/sysctl.d/vpsadmin.conf`,以此保证兼容性,因为部分发行版在 `systemd` + 207 版本之后便不再从 `/etc/sysctl.conf` 读取参数。使用自定义配置文件也可避免默认文件在不可预见的情况下被覆盖而导致配置丢失。 + ::: 5. 把下面的内容添加进去 ``` @@ -454,34 +470,35 @@ 7. 完整流程演示如下: - ::: tip 啰嗦君 - 因为我做展示的VPS支持云服务器专用内核,所以动图中我用了 `linux-image-cloud-amd64` 。如果你不确定你的VPS是否支持,那请务必按照第3步的命令,使用常规内核 `linux-image-amd64`。 - ::: + ::: tip 啰嗦君 - 更新Debian内核并开启`BBR` + 因为我做展示的VPS支持云服务器专用内核,所以动图中我用了 `linux-image-cloud-amd64` + 。如果你不确定你的VPS是否支持,那请务必按照第3步的命令,使用常规内核 `linux-image-amd64`。 + ::: + ![更新Debian内核并开启`BBR`](./ch07-img06-bbr-proper.gif) 8. 确认`BBR`开启 - 如果你想确认 `BBR` 是否正确开启,可以使用下面的命令: + 如果你想确认 `BBR` 是否正确开启,可以使用下面的命令: ``` $ lsmod | grep bbr ``` - 此时应该返回这样的结果: + 此时应该返回这样的结果: ``` tcp_bbr ``` - 如果你想确认 `fq` 算法是否正确开启,可以使用下面的命令: + 如果你想确认 `fq` 算法是否正确开启,可以使用下面的命令: ``` $ lsmod | grep fq ``` - 此时应该返回这样的结果: + 此时应该返回这样的结果: ``` sch_fq @@ -491,7 +508,8 @@ 1. 之前我们已经搭建了 `80` 端口的 `http` 网页,并以此申请了 TLS 证书。 - 但如果你尝试过用浏览器访问我们的这个界面,就会发现 `http` 访问并不会像大多数网站一样自动升级为 `https` 访问。换言之,我们现在的设置下,`http(80)` 和 `https(443)`之间完全是独立的。如果要解决这个问题,就需要做一些修改。 + 但如果你尝试过用浏览器访问我们的这个界面,就会发现 `http` 访问并不会像大多数网站一样自动升级为 `https` 访问。换言之,我们现在的设置下,`http(80)` 和 `https(443)` + 之间完全是独立的。如果要解决这个问题,就需要做一些修改。 2. 编辑 Nginx 的配置文件 @@ -536,11 +554,11 @@ 8. 完整流程演示如下: - http自动跳转https + ![http自动跳转https](./ch07-img07-http-to-https.gif) 9. 当你输入 `http://a-name.yourdomain.com`的时候,它应该已经会自动跳转 https 了 - http自动跳转https生效 + ![http自动跳转https生效](./ch07-img08-http-to-https-check.png) ## 7.9 服务器优化之三:更丰富的回落 @@ -556,19 +574,19 @@ 1. 初版中`Xray`配置文件`config.json`文件夹位置错误。若你已经根据之前的位置进行了操作,`Xray`会无法正确启动。故勘误说明于此,请自查,造成不便十分抱歉! - - 正确位置:`/usr/local/etc/xray/config.json` - - 错误位置:`/usr/local/etc/config.json` + - 正确位置:`/usr/local/etc/xray/config.json` + - 错误位置:`/usr/local/etc/config.json` 受影响章节: - - 7.4 配置`Xray` - 3. 使用`nano`创建`Xray`的配置文件 - - 7.8 服务器优化之二 - 6. 修改`Xray`的回落设置 + - 7.4 配置`Xray` - 3. 使用`nano`创建`Xray`的配置文件 + - 7.8 服务器优化之二 - 6. 修改`Xray`的回落设置 2) 初版中修改`Nginx`配置文件`nginx.conf`时内容错误(网页文件夹位置错误),若你已经根据之前的位置进行了操作,`Nginx`会无法找到正确的网站。请自查,造成不便十分抱歉! - - 正确文件夹位置:`root /home/vpsadmin/www/webpage;` - - 错误文件夹位置:`root /var/www/website/html` + - 正确文件夹位置:`root /home/vpsadmin/www/webpage;` + - 错误文件夹位置:`root /var/www/website/html` 受影响章节: - - 7.8 服务器优化之二 - 4. 在与 `80` 端口同级的位置增加一个本地端口监听来提供网页展示 + - 7.8 服务器优化之二 - 4. 在与 `80` 端口同级的位置增加一个本地端口监听来提供网页展示 diff --git a/docs/document/level-0/ch08-xray-clients.md b/docs/document/level-0/ch08-xray-clients.md index 8b3ec3304..d041dea43 100644 --- a/docs/document/level-0/ch08-xray-clients.md +++ b/docs/document/level-0/ch08-xray-clients.md @@ -4,7 +4,7 @@ 要正确的配置和使用`Xray`,就需要正确的理解其工作原理,对于新人,可以先看看下面简化的示意图(省略了许多复杂的设置): -Xray数据流向 +![Xray数据流向](./ch08-img01-flow.png) 这其中的关键点是: @@ -24,18 +24,19 @@ 3. 你可以在服务器端继续禁用各种你想禁用的流量,如广告、BT 下载等(`block`) :::warning 注意 + **注意:** 请务必记得,`Xray` 的路由配置非常灵活,上面的说明只是无限可能性中的一种。 借助 `geosite.dat` 和 `geoip.dat` 这两个文件,可以很灵活的从【域名】和【IP】这两个角度、不留死角的控制流量流出的方向。这比曾经单一笼统的 `GFWList` 强大很多很多,可以做到非常细致的微调:比如可以指定 Apple 域名直连或转发、指定亚马逊域名代理或转发,百度的域名屏蔽等等。。。) -现在,[《路由 (routing) 功能简析》](../../level-1/routing-lv1-part1) 已经上线,我建议对路由功能有兴趣的同学,先继续跟着本文完成客户端的基础配置,之后再去这里详细学习。 +现在,[《路由 (routing) 功能简析》](../level-1/routing-lv1-part1.md) 已经上线,我建议对路由功能有兴趣的同学,先继续跟着本文完成客户端的基础配置,之后再去这里详细学习。 ::: ## 8.2 客户端与服务器端正确连接 现在你已经理解了 `Xray` 的工作原理,那么接下来的配置,其实就是【告诉你的客户端如何连接 VPS 服务器】。这和你已经很熟悉的、告诉`PuTTY`如何远程连接服务器是一样的。只不过 Xray 连接时的要素不止是【IP 地址】+【端口】+【用户名】+【密码】这四要素了。 -实际上,`Xray`的连接要素是由不同的[协议](../../../config/inbound-protocols/)决定的。本文在第 7 章的配置文件 `config.json` 里,我们使用 `Xray` 下独特而强大的 `VLESS` 协议 + `XTLS` 流控。所以看看那个配置文件的内容就能知道,这个协议组合的连接要素有: +实际上,`Xray`的连接要素是由不同的[协议](../../config/inbounds/)决定的。本文在第 7 章的配置文件 `config.json` 里,我们使用 `Xray` 下独特而强大的 `VLESS` 协议 + `XTLS` 流控。所以看看那个配置文件的内容就能知道,这个协议组合的连接要素有: - 服务器【地址】: `a-name.yourdomain.com` - 服务器【端口】: `443` @@ -91,177 +92,177 @@ 2. 在合适的文件夹建立空白配置文件:`config.json` (自己常用平台下新建文件大家肯定都会,这就真不用啰嗦了) 3. 至于什么是“合适的文件夹”?这就取决于具体的平台了~ 4. 填写客户端配置 + - 我就以 `8.1` 原理说明里展示的基本三类分流(国内流量直连、国际流量转发 VPS、广告流量屏蔽),结合 `8.2` 的连接要素,写成一个配置文件 - 请将 `uuid` 替换成与你服务器一致的 `uuid` - 请将 `address` 替换成你的真实域名 - 请将 `serverName` 替换成你的真实域名 - 各个配置模块的说明我都已经(很啰嗦的)放在对应的配置点上了 + ``` + // REFERENCE: + // https://github.com/XTLS/Xray-examples + // https://xtls.github.io/config/ - ``` - // REFERENCE: - // https://github.com/XTLS/Xray-examples - // https://xtls.github.io/config/ - - // 常用的config文件,不论服务器端还是客户端,都有5个部分。外加小小白解读: - // ┌─ 1_log 日志设置 - 日志写什么,写哪里(出错时有据可查) - // ├─ 2_dns DNS-设置 - DNS怎么查(防DNS污染、防偷窥、避免国内外站匹配到国外服务器等) - // ├─ 3_routing 分流设置 - 流量怎么分类处理(是否过滤广告、是否国内外分流) - // ├─ 4_inbounds 入站设置 - 什么流量可以流入Xray - // └─ 5_outbounds 出站设置 - 流出Xray的流量往哪里去 + // 常用的config文件,不论服务器端还是客户端,都有5个部分。外加小小白解读: + // ┌─ 1_log 日志设置 - 日志写什么,写哪里(出错时有据可查) + // ├─ 2_dns DNS-设置 - DNS怎么查(防DNS污染、防偷窥、避免国内外站匹配到国外服务器等) + // ├─ 3_routing 分流设置 - 流量怎么分类处理(是否过滤广告、是否国内外分流) + // ├─ 4_inbounds 入站设置 - 什么流量可以流入Xray + // └─ 5_outbounds 出站设置 - 流出Xray的流量往哪里去 - { - // 1_日志设置 - // 注意,本例中我默认注释掉了日志文件,因为windows, macOS, Linux 需要写不同的路径,请自行配置 - "log": { - // "access": "/home/local/xray_log/access.log", // 访问记录 - // "error": "/home/local/xray_log/error.log", // 错误记录 - "loglevel": "warning" // 内容从少到多: "none", "error", "warning", "info", "debug" - }, + { + // 1_日志设置 + // 注意,本例中我默认注释掉了日志文件,因为windows, macOS, Linux 需要写不同的路径,请自行配置 + "log": { + // "access": "/home/local/xray_log/access.log", // 访问记录 + // "error": "/home/local/xray_log/error.log", // 错误记录 + "loglevel": "warning" // 内容从少到多: "none", "error", "warning", "info", "debug" + }, - // 2_DNS设置 - "dns": { - "servers": [ - // 2.1 国外域名使用国外DNS查询 - { - "address": "1.1.1.1", - "domains": [ - "geosite:geolocation-!cn" - ] - }, - // 2.2 国内域名使用国内DNS查询,并期待返回国内的IP,若不是国内IP则舍弃,用下一个查询 - { - "address": "223.5.5.5", - "domains": [ - "geosite:cn" - ], - "expectIPs": [ - "geoip:cn" - ] - }, - // 2.3 作为2.2的备份,对国内网站进行二次查询 - { - "address": "114.114.114.114", - "domains": [ - "geosite:cn" - ] - }, - // 2.4 最后的备份,上面全部失败时,用本机DNS查询 - "localhost" - ] - }, + // 2_DNS设置 + "dns": { + "servers": [ + // 2.1 国外域名使用国外DNS查询 + { + "address": "1.1.1.1", + "domains": [ + "geosite:geolocation-!cn" + ] + }, + // 2.2 国内域名使用国内DNS查询,并期待返回国内的IP,若不是国内IP则舍弃,用下一个查询 + { + "address": "223.5.5.5", + "domains": [ + "geosite:cn" + ], + "expectIPs": [ + "geoip:cn" + ] + }, + // 2.3 作为2.2的备份,对国内网站进行二次查询 + { + "address": "114.114.114.114", + "domains": [ + "geosite:cn" + ] + }, + // 2.4 最后的备份,上面全部失败时,用本机DNS查询 + "localhost" + ] + }, - // 3_分流设置 - // 所谓分流,就是将符合否个条件的流量,用指定`tag`的出站协议去处理(对应配置的5.x内容) - "routing": { - "domainStrategy": "AsIs", - "rules": [ - // 3.1 广告域名屏蔽 - { - "type": "field", - "domain": [ - "geosite:category-ads-all" - ], - "outboundTag": "block" - }, - // 3.2 国内域名直连 - { - "type": "field", - "domain": [ - "geosite:cn" - ], - "outboundTag": "direct" - }, - // 3.3 国内IP直连 - { - "type": "field", - "ip": [ - "geoip:cn", - "geoip:private" - ], - "outboundTag": "direct" - }, - // 3.4 国外域名代理 - { - "type": "field", - "domain": [ - "geosite:geolocation-!cn" - ], - "outboundTag": "proxy" - } - // 3.5 默认规则 - // 在Xray中,任何不符合上述路由规则的流量,都会默认使用【第一个outbound(5.1)】的设置,所以一定要把转发VPS的outbound放第一个 - ] - }, + // 3_分流设置 + // 所谓分流,就是将符合否个条件的流量,用指定`tag`的出站协议去处理(对应配置的5.x内容) + "routing": { + "domainStrategy": "AsIs", + "rules": [ + // 3.1 广告域名屏蔽 + { + "type": "field", + "domain": [ + "geosite:category-ads-all" + ], + "outboundTag": "block" + }, + // 3.2 国内域名直连 + { + "type": "field", + "domain": [ + "geosite:cn" + ], + "outboundTag": "direct" + }, + // 3.3 国内IP直连 + { + "type": "field", + "ip": [ + "geoip:cn", + "geoip:private" + ], + "outboundTag": "direct" + }, + // 3.4 国外域名代理 + { + "type": "field", + "domain": [ + "geosite:geolocation-!cn" + ], + "outboundTag": "proxy" + } + // 3.5 默认规则 + // 在Xray中,任何不符合上述路由规则的流量,都会默认使用【第一个outbound(5.1)】的设置,所以一定要把转发VPS的outbound放第一个 + ] + }, - // 4_入站设置 - "inbounds": [ - // 4.1 一般都默认使用socks5协议作本地转发 - { - "tag": "socks-in", - "protocol": "socks", - "listen": "127.0.0.1", // 这个是通过socks5协议做本地转发的地址 - "port": 10800, // 这个是通过socks5协议做本地转发的端口 - "settings": { - "udp": true - } - }, - // 4.2 有少数APP不兼容socks协议,需要用http协议做转发,则可以用下面的端口 - { - "tag": "http-in", - "protocol": "http", - "listen": "127.0.0.1", // 这个是通过http协议做本地转发的地址 - "port": 10801 // 这个是通过http协议做本地转发的端口 - } - ], + // 4_入站设置 + "inbounds": [ + // 4.1 一般都默认使用socks5协议作本地转发 + { + "tag": "socks-in", + "protocol": "socks", + "listen": "127.0.0.1", // 这个是通过socks5协议做本地转发的地址 + "port": 10800, // 这个是通过socks5协议做本地转发的端口 + "settings": { + "udp": true + } + }, + // 4.2 有少数APP不兼容socks协议,需要用http协议做转发,则可以用下面的端口 + { + "tag": "http-in", + "protocol": "http", + "listen": "127.0.0.1", // 这个是通过http协议做本地转发的地址 + "port": 10801 // 这个是通过http协议做本地转发的端口 + } + ], - // 5_出站设置 - "outbounds": [ - // 5.1 默认转发VPS - // 一定放在第一个,在routing 3.5 里面已经说明了,这等于是默认规则,所有不符合任何规则的流量都走这个 - { - "tag": "proxy", - "protocol": "vless", - "settings": { - "vnext": [ - { - "address": "a-name.yourdomain.com", // 替换成你的真实域名 - "port": 443, - "users": [ - { - "id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid", // 和服务器端的一致 - "flow": "xtls-rprx-direct", // Windows, macOS 同学保持这个不变 - // "flow": "xtls-rprx-splice", // Linux和安卓同学请改成Splice性能更强 - "encryption": "none", - "level": 0 - } - ] - } - ] - }, - "streamSettings": { - "network": "tcp", - "security": "xtls", - "xtlsSettings": { - "serverName": "a-name.yourdomain.com", // 替换成你的真实域名 - "allowInsecure": false // 禁止不安全证书 - } - } - }, - // 5.2 用`freedom`协议直连出站,即当routing中指定'direct'流出时,调用这个协议做处理 - { - "tag": "direct", - "protocol": "freedom" - }, - // 5.3 用`blackhole`协议屏蔽流量,即当routing中指定'block'时,调用这个协议做处理 - { - "tag": "block", - "protocol": "blackhole" - } - ] - } - ``` + // 5_出站设置 + "outbounds": [ + // 5.1 默认转发VPS + // 一定放在第一个,在routing 3.5 里面已经说明了,这等于是默认规则,所有不符合任何规则的流量都走这个 + { + "tag": "proxy", + "protocol": "vless", + "settings": { + "vnext": [ + { + "address": "a-name.yourdomain.com", // 替换成你的真实域名 + "port": 443, + "users": [ + { + "id": "uuiduuid-uuid-uuid-uuid-uuiduuiduuid", // 和服务器端的一致 + "flow": "xtls-rprx-direct", // Windows, macOS 同学保持这个不变 + // "flow": "xtls-rprx-splice", // Linux和安卓同学请改成Splice性能更强 + "encryption": "none", + "level": 0 + } + ] + } + ] + }, + "streamSettings": { + "network": "tcp", + "security": "xtls", + "xtlsSettings": { + "serverName": "a-name.yourdomain.com", // 替换成你的真实域名 + "allowInsecure": false // 禁止不安全证书 + } + } + }, + // 5.2 用`freedom`协议直连出站,即当routing中指定'direct'流出时,调用这个协议做处理 + { + "tag": "direct", + "protocol": "freedom" + }, + // 5.3 用`blackhole`协议屏蔽流量,即当routing中指定'block'时,调用这个协议做处理 + { + "tag": "block", + "protocol": "blackhole" + } + ] + } + ``` ## 8.4 附加题 2:在 PC 端手工运行 `xray-core` @@ -326,7 +327,7 @@ 1. [xtls.github.io](https://xtls.github.io/) - 官方文档站 2. [官方 Telegram 群组](https://t.me/projectXray) - 活跃而友善的官方讨论社区 -TO INFINITY AND BEYOND! +![TO INFINITY AND BEYOND!](./ch08-img02-buzz.png) :::tip 不算后记的后记 diff --git a/docs/document/level-1/fallbacks-lv1.md b/docs/document/level-1/fallbacks-lv1.md index 2b6bfe8bf..b599061d3 100644 --- a/docs/document/level-1/fallbacks-lv1.md +++ b/docs/document/level-1/fallbacks-lv1.md @@ -4,7 +4,7 @@ ## 1. 回顾《小小白白话文》中的回落 -如果你用了《小小白白话文》中的[Xray 配置](../level-0/ch07-xray-server#_7-4-配置xray),并完成了[HTTP 自动跳转 HTTPS 优化](../level-0/ch07-xray-server#_7-8-服务器优化之二-开启http自动跳转https),那么你已经有了基于 `VLESS` 协议的简易回落: +如果你用了《小小白白话文》中的[Xray 配置](../level-0/ch07-xray-server.md#_7-4-配置xray),并完成了[HTTP 自动跳转 HTTPS 优化](../level-0/ch07-xray-server.md#_7-8-服务器优化之二-开启http自动跳转https),那么你已经有了基于 `VLESS` 协议的简易回落: ``` "inbounds": [ diff --git a/docs/document/level-1/routing-lv1-part1.md b/docs/document/level-1/routing-lv1-part1.md index 5dc36faf4..167189eb4 100644 --- a/docs/document/level-1/routing-lv1-part1.md +++ b/docs/document/level-1/routing-lv1-part1.md @@ -6,7 +6,7 @@ 要理解路由,就要理解完整的路由功能需要有三兄弟来合力完成:1. **入站**;2. **路由**;3. **出站**。 -路由三兄弟 +![路由三兄弟](./routing-lv1-img01-trio.png) 三兄弟桃园结义,不求同年同月同日生,但求同年同月同日死。 diff --git a/docs/document/level-2/README.md b/docs/document/level-2/README.md index a55b0c414..aebc9e2a4 100644 --- a/docs/document/level-2/README.md +++ b/docs/document/level-2/README.md @@ -2,18 +2,18 @@ **这个章节包含进阶级的 Xray 使用心得分享, 如果您已经熟悉 Xray, 那么这里的经验可以让您更加发挥 Xray 的威力** -[透明代理入门](./transparent_proxy/transparent_proxy.md) by a [@kirin](https://github.com/kirin10000) +[透明代理入门](./transparent_proxy/transparent_proxy.md) by a [@kirin](https://github.com/kirin10000) 透明代理的入门篇章。 -[透明代理(TProxy)配置教程 ](./tproxy.md) by a [@BioniCosmos](https://github.com/BioniCosmos) +[透明代理(TProxy)配置教程 ](./tproxy.md) by a [@BioniCosmos](https://github.com/BioniCosmos) 基于 Xray 的透明代理(TProxy)配置完整教程。 -[[透明代理]通过 gid 规避 Xray 流量](./iptables_gid.md) by a [@kirin](https://github.com/kirin10000) +[[透明代理]通过 gid 规避 Xray 流量](./iptables_gid.md) by a [@kirin](https://github.com/kirin10000) 在 iptables/nftables 实现的透明代理中,一种新的规避 Xray 流量的方式。 -[通过 Xray 将特定的流量指向特定出口,实现全局路由“分流”](./redirect.md) by a [@Zzz3m](https://github.com/Zzz3m) +[通过 Xray 将特定的流量指向特定出口,实现全局路由“分流”](./redirect.md) by a [@Zzz3m](https://github.com/Zzz3m) 将 Xray 玩出花:基于 fwmark 或 sendThrough 方式实现“分流”。