diff --git a/content/posts/Colin's Blog 1.0 构建心得.md b/content/posts/Colin's Blog 1.0 构建心得.md new file mode 100644 index 0000000..da2ca9b --- /dev/null +++ b/content/posts/Colin's Blog 1.0 构建心得.md @@ -0,0 +1,122 @@ +--- +title: Colin's Blog 1.0 构建心得 +date: 2019-04-08 +lastmod: 2020-04-29 +description: 经过两三天的折腾,从 Linux 结构及指令,到 LNMP 框架搭建,再到数据库的配置,最后端口转发 + 内网穿透,博客终于成功上线!在此将部署过程及踩过的坑记录下来,一方面是纪念,另一方面希望能够后来人提供一点帮助。 +categories: +- 踩坑记 +tags: +- Blog +- 网站 +--- + +*Original Date: April 8th,2019 + +经过两三天的折腾,从 Linux 结构及指令,到 LNMP 框架搭建,再到数据库的配置,最后端口转发 + 内网穿透,博客终于成功上线!在此将部署过程及踩过的坑记录下来,一方面是纪念,另一方面希望能够后来人提供一点帮助。 + +从想法到实现 +------ + +第一代博客采用树莓派 3B + 构建。当初作为寒假的练手项目,入手了树莓派 3B + 以及智能小车所需的配件。由于时间没有规划好,最后在寒假前匆匆完成了小车硬件的组装,智能控制部分(wifi 遥控、红外循迹等)没能够完成。开学只带了树莓派的板子。闲置良久,想利用起来,刚好又有搭建大学生竞赛信息服务网站及公众号的想法,就开始着手构建基于树莓派的服务器,先从 Wordpress 搭建博客开始。 + +LNMP+Wordpress 框架搭建 +------------------- + +> L=Linux +> N=Nginx +> M=MySQL +> P=PHP + +LNMP 架构是广泛使用的服务器架构。与此类似的还有 LAMP,A=Apache。Nginx 与 Apache 作为目前市场上高度流行的两种服务器程序,网络上已经有非常多的相关的文档和教程。 +关于 Nginx 与 Apache 的选择,这里只简单做个介绍: +**Nginx**:资源占用低,性能好,配置简洁,功能有限。 +**Apache**:相对 Nginx 占用资源要多一点,不过插件和文档更丰富,设置某些功能的时候会方便一点。 +具体两者的区别和测试可自行百度。刚开始考虑到树莓派的配置以及访问量,我选择使用 Nginx。具体部署过程此处不再赘述。 +设置好 Nginx,开始配置 MySQL 和 PHP。安装 php 的时候开始遇到了一些小波折:网络上大部分教程都是基于 php5.0,安装包的时候都是类似于 + +``` +sudo apt-get install php5-fpm + +``` + +这样的,但在实际安装过程中会报错,说找不到这个名字的包。这个还算好解决,又搜索了几个教程,发现最新的版本为 php7.0,根据新版本 php 的教程按部就班做就基本 OK 了。 + +WordPress 部署比较简单,但是对于新手而言,需要熟悉 Linux 基本指令:cd 目录切换,wget 文件下载,tar\zip 解压等。但是相对于有很多依赖项的或者配置繁琐的程序,Wordpress 安装其实已经算很简单了。 + +### 第一个大坑:MySQL + +安装 MySQL 一马平川,配置数据库,创建账户的时候也没有任何问题。然而第二次开始使用时,却发现刚刚设置的账户登不上去了?!! 翻来覆去又重装了几遍 MySQL,排除了账户密码错误、屏蔽了远程连接等可能性。最后一直停留在报错说登陆失败。无论是测试用户还是 root,有密码还是无密码,统统失败。Wordpress 里面连接数据库也一直失败 + +这时怀疑不是数据库的问题,开始怀疑是 Nginx 或者 php。简单看了一下 Nginx 竟然无法启动?根据报错查了下日志发现与 php 的什么 fpm 和 fastcgi 通信有问题,又百度来百度去,改了下配置文件,把 fastcgi 通信的问题解决了。重启 nginx 服务又发现 80 端口被占用,又是一通百度。。。网上的解决方案无非两种:一种是 nginx 服务已经启动,直接另外用命令启动 nginx 服务必然会导致上述的问题。另外一种就是其他程序占用 80 端口,找到进程 kill 掉即可。然而我的问题并不是上面两种,无限郁闷 ing。。。 + +但是测试网页的时候却发现网页可以正常显示??? 又细查了一遍发现不知道什么时候又装了 Apache。。。又比 Nginx 先启动,自然会占用做网络服务器会用到的 80 端口。突然想起来安装 MYSQL 的时候好像弹出了个窗口。。。一阵哭笑不得。 + +然而经过一晚上折腾,MySQL 这个问题依然没有解决。迫不得已,决定第二天尝试 SQlite。 + +### 第二个大坑:PDO Driver + +在决定弃用 MySQL 后,毅然卸载了 MySQL 并删除了残留,全新安装 SQLite。这里简单介绍一下两者的区别: + +> MySQL:功能强,效率高,支持多用户,安全性好,但是占用资源较多 + +> SQLite:精简版的 SQL,没有多用户概念,文件方式存储,方便迁移,占用资源少,运行快。 + +满怀期待装好了 Sqlite,配置好了数据库,以及 Wordpress 配置文件 wp-config.php,没想到进去 Wordpress 报错。 + +``` +PHP PDO Extension is missing + +``` + +百度了下,说是 php 对 sqlite 的支持没有打开。需要到 php.ini 把对应属于 sqlite 的扩展启用,把被注释的部分提出来。 + +一顿操作过后,进 Wordpress,又报 + +``` +PHP PDO Extension is not loaded + +``` + +又是一顿猛肝,身心俱疲(无限查百度,查必应,查 StackOverflow,查官方文档)。一开始是看到有人说 php 扩展的目录默认是被注释的,看了下的却如此,就把改掉了。没想还是出错 + +``` +;extension path= ../ + +``` + +当时的代码大致如此。改了之后还是没效果,又继续查。查到晚上两点困了累了,遂罢。 + +第二天起床继续肝。早上起来和熬夜的效果就是不一样,没两下就突然想起来,被我解除注释的,php 扩展路径的那一行,它代表的是配置文件所在目录的父文件夹。但是他那个父文件夹底下根本就!!没有!!扩展名为 so 的扩展库文件!!! + +所以!是扩展目录问题了。 + +但是他的扩展目录又到底在哪儿呢?百度的结果是说不同机子不一样。采用源代码编译安装的时候可以指定路径,但是我是用 apt 安装的。接下来是疯狂的找 php 扩展所在目录了。把百度的几个目录找了一遍,,又在其他地方又 php 字样的目录找了一遍,可算给我找到了。回去把 php.ini 一改,重启。哈!终于成了! + +### +第三个大坑:外网访问 + + +博客能够在内网正常访问了,折腾了两天总算有了成果。但是作为一个服务器只能在内网访问就没多大意思了。最终要做成的网站是要给人看的嘛。于是开始找树莓派外网访问的方案。大概有四种: + +> 1. 使用路由器做端口转发 + 花生壳做动态域名解析。但是我手头用的不是路由器,是手机热点。放弃。 + +> 2. 树莓派安装花生壳 + 花生壳内网穿透服务。内网穿透付费且评价不是很好,放弃。 + +> 3. 使用 frp 内网穿透。但是需要有另外一台有公网 IP 的 VPS。这还不如直接买一台阿里云的服务器呢。放弃。 + +> 4. 使用 Ngrok 做内网转发。Ngrok 免费且评价还不错,就决定是你了! + + +Ngrok 的安装部署不难,简单来说就是注册账号,树莓派上安装 Ngrok,然后在树莓派上启动,与账号绑定。他会给你分配一个二级域名,打开这个域名,虽然有点慢,因为服务器在美国,但是成功地跳转到了我的博客主页! + +但是接下来的测试中发现,通过那个二级域名会指向我博客的主页,这时候点击页面上的任何连接都会跳转到我的树莓派的内网 IP。很明显,网站的博客的页面上的链接都是绝对地址,这也是为什么 Wordpress 的设置里面有一项是让你填写自己的网站的域名。这个比较好办,用相对路径就可以了。Wordpress 插搜索 Relative URL,就可以找到将全站链接转换为相对链接的插件。 + +考虑到树莓派性能有限,网站在内网访问已经有点慢了,通过外网访问会更慢。于是就对站点进行了一些优化,速度大幅提升,外网访问的速度也可以接受了。具体教程可参见另一篇博文。 + +大功告成 +---- + + +至此,FXZ‘s Blog 部署完成,正式上线! + +所谓努力与收获成正比自有它的道理,非常庆幸,也非常感谢自己坚持了下来。在这短短的两三天时间里,克服了众多困难,拒绝了数次开黑邀请。所幸结果是令人欣慰的,特此写下这第一篇博文。_2019 年 4 月 8 日晚于重庆_ \ No newline at end of file diff --git a/content/posts/一次成功的网络优化 & 吐槽国内糟糕的网络环境.md b/content/posts/一次成功的网络优化 & 吐槽国内糟糕的网络环境.md new file mode 100644 index 0000000..5ad5fa2 --- /dev/null +++ b/content/posts/一次成功的网络优化 & 吐槽国内糟糕的网络环境.md @@ -0,0 +1,32 @@ +--- +title: 一次成功的网络优化 & 吐槽国内糟糕的网络环境 +date: 2019-10-10 +lastmod: 2020-04-29 +description: 在内网的树莓派上部署了 AdGuardHome,做 DNS 服务器的同时,也可以为内网所有设备过滤广告。本来嘛拦截了广告理应网络加载会更快,然而实际体验却很糟糕。网页加载要比之前慢得多。AdGuardHome 的面板显示的平均反应时间一度达到了 1000ms。1s 的延时还是会非常影响网络体验的。用 dig 命令看了下 DNS 查询的情况。不看不知道一看吓一跳,随便查询一个域名竟然废了四秒多!这怎么能忍受! +categories: +- 踩坑记 +tags: +- 服务器 +- 树莓派 +- DNS +--- + +在内网的树莓派上部署了 AdGuardHome,做 DNS 服务器的同时,也可以为内网所有设备过滤广告。本来嘛拦截了广告理应网络加载会更快,然而实际体验却很糟糕。网页加载要比之前慢得多。AdGuardHome 的面板显示的平均反应时间一度达到了 1000ms。1s 的延时还是会非常影响网络体验的。用 dig 命令看了下 DNS 查询的情况。不看不知道一看吓一跳,随便查询一个域名竟然废了四秒多!这怎么能忍受! + +![](http://192.168.1.200/wp-content/uploads/2019/12/image-1-1280x784.png) + +看网上其他人的评价,并没有我这种龟速的情况。况且我的上游 DNS 已经更换为了国内几个大厂的 DNS 比如阿里的腾讯的,测试查询一般反应时间也才 50ms。本地这个结果肯定是不能接受的。最开始还想过要根据常用域名手动制作 hosts 直接重定向。但是 dnspython 这个库不好直接指定 dns 查询,adguardhome 的 query 日志又经过特殊加密,这条路困难重重。决定将其作为备用方案。接下来进入漫长的排雷环节。 + +首先考虑上游 DNS 中设置了谷歌等国外的 DNS,某些情况下会比国内的 DNS 慢。但是即便只留了一个阿里的 DNS,反应速度还是在秒级。 + +接下来定位过滤器,开了五六个过滤器,按理说查询 DNS 前会先读取本地的过滤器以寻找匹配项,过滤规则一多自然会反应迟钝。禁用了一个默认的 30k 条规则的配置,速度有那么一点提升,但还是在 1s 以上,完全不能接收。这跟平时用阿里 DNS 差了几个数量级啊。 + +后来发现了这货: + +![](http://192.168.1.200/wp-content/uploads/2019/12/image-1280x191.png) + +原来,他会把每次查询的域名先交给他服务器做安全性检查,这在国内的互联网环境中完全是鸡肋,而且因为每次都要连接境外服务器,其延迟可想而知。果然禁用了这一项,速度嗖嗖的就起来了: + +![](http://192.168.1.200/wp-content/uploads/2019/12/image-2-1280x708.png) + +即便是冷门的实验室官网的域名,也在 100ms 内解决了,对于常见的热门网站由于多设备频繁访问,会直接查询本地缓存。虽然基本只有可怜的差不多 60s 的缓存时间,但是一旦命中,就可以在 < 10ms 的时间响应。如果是过滤器中的域名,更是可以达到 < 5ms。终于,这个 AdGuard Home DNS 可以正式投入使用了。 \ No newline at end of file diff --git a/content/posts/云服务器入门指南.md b/content/posts/云服务器入门指南.md new file mode 100644 index 0000000..30be570 --- /dev/null +++ b/content/posts/云服务器入门指南.md @@ -0,0 +1,141 @@ +--- +title: 云服务器入门指南 +date: 2020-03-15 +lastmod: 2020-04-29 +description: 各大厂商持续发力云计算,上云的门槛也越来越低。获取云服务器的门槛越来越低,但是真正使用好云服务器的难度一直都很高。本文旨在为新上云的小白提供方向性的指引并引导入坑 +categories: +- 教程 +- 指南 +tags: +- 服务器 +--- + + + +# 云服务器入门指南 + + +## 前言 +各大厂商持续发力云计算,上云的门槛也越来越低。获取云服务器的门槛越来越低,但是真正使用好云服务器的难度一直都很高。本文旨在为新上云的小白提供方向性的指引并引导入坑  : ) + + +## 云服务器相关的几个概念 + +### 服务器的操作系统 +主要分为两大阵营:Windows Server和Linux Server。前者一般自带可视化界面,基本兼容平时使用的exe程序,某种程度上也可以作为“云电脑”使用。后者一般不自带图形化界面,操作都通过特定命令完成,上手难度较高,但配置各种开发环境、安装各类高级工具比win平台更容易。没有Linux基础的用户建议先在本地建立虚拟机练习。 + +Linux Server主要的两个阵营为Debian系、RedHat系。主要的发行版 + +- Debian系:Debian, Ubuntu +- RedHat系:RedHat, CentOS, Fedora + +对于初学者来说,最明显的区别在于前者使用 `apt install xxx`  来安装软件,而后者是通过 `yum install xxx`  来安装。 + +### 公网IP +IP可以理解为一台设备在互联网世界中的门牌号和地址,相当于知道某个具体的地址就能发快递包裹。IP分为公网IP和内网IP。顾名思义,内网IP一般用于公司或学校内部。一般来说,只知道一台设备的内网IP的情况下并不能准确定位这台设备,就类似于只知道你的朋友的名字,并不能直接给他寄快递,你必须要知道他学校/单位/家的地址才行。 + +服务器拥有公网IP的好处在于,你可以直接通过这个IP定位到你的服务器,相当于你的服务器在互联网世界中拥有了响当当的名号,只要说出这个名号,互联网世界的公民都能知道他,给他发消息。 + +_*此处公网内网IP的叙述仅适用于IPv4地址。更多关于IPv4地址和IPv6地址的相关信息参见文末扩展阅读。_ + +### 端口  + +端口的英文为port,有港口的意思。一般来说,一台设备不同的端口运行着不同的服务,我们可以很好的控制特定端口的开放与关闭,从而控制不同的服务是否对外开放,正如开放一个通商口岸。常见的服务端口有 `HTTP  80`   `HTTPS  443`   `DNS  53`   `SSH 22`   + +一个服务也可能不是仅仅通过一个端口提供服务,他可能会将一个大的功能拆分为几个子功能,通过不同的端口与外界通讯。如FTP,SMB等。你可以通过关闭指定端口来详细控制特定服务。当然如果你想想外面提供像FTP这样通过多个端口与外界通讯的端口,就要注意要确保他使用的所有端口都要设置为开放才能保证外界的正常访问。 + + +_*FTP是一种文件传输协议,你可以在某些电影资源的下载链接里看见以 `ftp://`  开头的链接。这说明这个电影资源是存放在某个FTP服务器上。_
_*关于FTP、SMB的端口使用及配置参见文末扩展阅读_ + +### 防火墙 + +防火墙(Firewall)某种程度上是控制本机与外界通讯的工具。下面以几个具体的实例来介绍下防火墙: + +- 你的服务器建了个网站,需要向外提供HTTP服务,那么你需要在防火墙中设置开放80端口,允许其他所有IP访问。 +- 公司有一台服务器搭载了一个仅面向公司员工的网站,希望仅允许公司内的员工访问。而公司内员工的内网IP个格式为192.168.*.*,那么就可以在防火墙中设置,仅允许来自IP为192.168.*.*的设备访问这台服务器的80端口,其他一律禁止 +- 近期互联网上流行一种病毒X通过计算机的1234端口感染其他机器。那么为了保护本机不受病毒影响,你可以在防火墙中设置关闭1234端口,禁止任何来源访问1234端口,从而将病毒X阻挡在防火墙外。 + +**注意:对于云服务器来说,可能会存在多重防火墙。一般Linux系统自身会有一套防火墙(firewalld/ufw等),云服务商会有一套网络防火墙(一般为网络安全组/网络访问控制等)  ** + +### 几种远程连接方式对比 + +| **连接方式** | SSH | VNC | RDP | +| :---: | :---: | :---: | :---: | +| **支援平台** | Linux,Mac OS,BSD...,Win 需额外安装软件 | Linux,Win,Mac OS,iOS,Android 等,基本所有都需额外软件 * | Win 自带,其他需额外安装软件 | +| **易用性** | ★ | ★★★ | ★★★* | +| **可视化界面** | 否 | 是 | 是 | +| **网络要求** | 极低 | 高 | 较高 | +| **配置难度** | ★ | ★★★ | ★★ | + +- _*__1 __部分Linux发行版自带VNC连接,不过大部分需手动启用_ +- _*__2__ RDP连接对于同为Win的机器更为容易,对于平台不一样的情况,配置比较麻烦_ + +## 快速入门须知 + +当你拥有了一台属于自己的云服务器,你发现面对复杂的控制台手足无措,不知道怎么连接,不知道能拿来干什么。那么你可以参考一下的步骤。**下文仅适用于Linux Server & 有一点点Linux操作经验的选手**。 + + +### 开启SSH远程连接 +
+ +#### 服务器端设置 +1.首先,登陆你的账户,打开云服务器的控制台,开机(不解释)  
2.定位到你的云服务器,一般新的账户只有一台云服务器实例,点击其菜单,找到远程连接选项  
3.接下来会打开一个网页端的黑框,根据其提示,设置实例密码等等。这里记录你的系统用户名和密码。
4.一般网页端会有提示,根据具体情况开启SSH服务,设置允许root权限远程登录。具体的操作因平台和操作系统不同而不同,此处不再赘述。
5.现在到服务器菜单里找到网络设置/防火墙设置/网络安全组设置,点击进入,**开启服务器22端口的访问权限**。 + +接下来在你的电脑上配置SSH远程访问。  + + +#### 本地电脑设置 +1.1 Win10用户和Linux用户、Mac OS用户一般系统会预装ssh客户端。打开CMD命令控制符/PowerShell,输入ssh回车看是否有反应。**如果没有提示xxx找不到,可以直接到步骤2.1**。
1.2 如果没有反应,你需要到 设置-应用-可选功能 中,安装SSH客户端。
1.3 Windows其他版本用户需要安装第三方SSH客户端。这里推荐使用Putty。
2.1 接下来使用 `ssh 你的用户名@你的服务器IP`   来连接到你的服务器。注意**@符号前后没有空格**,**输完回车确认**。正常情况下可以成功连接到。
2.2 如果出现Permission denied,可能的原因有_用户名密码错误_/_未开启root账户远程登录_。
2.3 如果出现Connection time out,则大概率是你_IP地址填写错误_,也有可能是你的_服务器没开机_/_你的服务器系统没有默认开启ssh服务_/_防火墙未放行22端口_。 + +排查相关问题请带上相关关键字去搜索引擎搜索。 + + +### 安装软件 + +#### 安装软件的命令及常见问题 + +参见上文介绍操作系统的部分。不过具体安装的时候,经常会遇到的问题为安装需要root权限。一般来说,日常使用时为了安全期间,我们不会直接用root账户进行操作。通常的做法为创建一个普通的账户,当执行需要高权限的指令时在命令前加上sudo,或是使用 `su root`  来临时切换为root用户*,并输入密码来进行二次确认,以确保安全性。此处涉及到的操作有:   + +- 添加一个普通用户 ( `useradd NEWUSERNAME`  /  `adduser NEWUSERNAME`  ) +- 设置新用户的密码  ( `passwd USERNAME`  ) +- 将新用户添加到sudoers的列表中  ( 修改 `/etc/sudoers`  )  + +具体操作可以以  `操作系统名称+操作关键字`  为关键字在搜索引擎中自行搜索详细教程。 + +_*临时切换为root用户,执行完命令后,记得用exit命令退出root账户_ + +#### 镜像源的设置 + +执行完上述命令,当你尝试安装一个软件时,如果你云服务器提供商没有为你的系统进行“优化”的话,你会发现安装软件的速度非常慢。这是因为这些Linux系统基本都是由国外的厂商/组织进行开发,安装软件时需要到位于国外的服务器获取数据,你的网络请求可能会跨越大半个地球,网络速度也随着传输距离的增加不断减小*。国内有很多组织建立了公益性质的镜像站点,我们可以将安装程序的软件源设置为位于国内的镜像站点以大大提高软件安装下载的速度。
国内的镜像站点有**阿里云镜像站**、**清华大学tuna镜像站**、**中国科学技术大学开源镜像站**等。这些站点提供多种主流Linux发行版的软件安装源的镜像。不同操作系统更换软件源的操作有所不同,可以到以上镜像站点中查找特定系统更换软件源的详细步骤。 + +_*请注意此处叙述并不准确,与一个站点通信的速度取决于很多因素。_ + +#### 常用工具的安装 +更换好了软件源后,我们就可以愉快的安装软件了。你可以尝试安装一下 `screenfetch`  的软件包进行测试,安装完成后输入 `screenfetch`  命令,他会在你的屏幕上输出字符画形式的系统图标和系统配置信息。 + +部分Linux发行版可能并没有预置很多的软件包,你可以根据自己的需要进行安装,如文本编辑工具 `nano`  `vim`  等*。C编译工具 `gcc`  ,C++编译工具 `g++`  ,Java开发组件 `openjdk`  等。 + +_*推荐初学者使用易于上手的 `nano`  文本编辑器。大部分Linux发行版都有预置。_ + +## 初级玩法 + +- **搭建Wordpress网站**:为服务器安装好基础设施,部署wordpress服务。参见 [服务器LAMP部署](https://help.aliyun.com/document_detail/50774.html?spm=a2c4g.11186623.6.1134.26fc7ed9zbIv5a),[Wordpress搭建](https://segmentfault.com/a/1190000013035065) +- **作为远程开发环境:**  [VSCode进行远程开发](https://www.jianshu.com/p/0f2fb935a9a1) + + + +## 其他高级玩法 + + +参见:[知乎问答:自己拥有一台服务器可以做哪些很酷的事情?](https://www.zhihu.com/question/40854395) + + +## 扩展阅读 + + +- [IPv6是什么?](https://zhuanlan.zhihu.com/p/36542469) +- [CentOS7 firewall 开放服务 / 端口](https://www.jianshu.com/p/016ee3b7ff97) +- [在 Ubuntu 中用 UFW 配置防火墙](https://linux.cn/article-8087-1.html) +- [让你的 WordPress 网站更快的 16 条建议](https://www.wpdaxue.com/make-your-wordpress-site-faster.html) +- [FTP 主动模式和被动模式的区别](https://www.cnblogs.com/xiaohh/p/4789813.html) +- [Samba 服务使用的端口和协议](https://www.5yun.org/15466.html) diff --git a/content/posts/从一次异常断网谈防火墙配置.md b/content/posts/从一次异常断网谈防火墙配置.md new file mode 100644 index 0000000..a16d9cb --- /dev/null +++ b/content/posts/从一次异常断网谈防火墙配置.md @@ -0,0 +1,58 @@ +--- +title: 从一次异常断网谈防火墙配置 +date: 2020-02-08 +lastmod: 2020-04-29 +description: 经过两三天的折腾,从 Linux 结构及指令,到 LNMP 框架搭建,再到数据库的配置,最后端口转发 + 内网穿透,博客终于成功上线!在此将部署过程及踩过的坑记录下来,一方面是纪念,另一方面希望能够后来人提供一点帮助。 +categories: +- 踩坑记 +tags: +- 防火墙 +- 服务器 +- 局域网 +--- + + +序 +- + +十分钟前,突然发现手边的电脑上的 QQ 突然变灰,多次重新登陆均失败。而当前打开几个百度的网页均未出现异常。但点击几个搜索结果均显示打不开网页。一分钟后,iPad 播放的音乐也突然停止。尝试 Ping 局域网的网关和树莓派均失败。而路由器仍然显示网络连接正常,手机端仍可以正常上网,断网前半个小时内我是没有对路由器和承载着众多服务的树莓派进行任何改动的。初步查看,发现电脑网卡的 ip 变为`169.254`开头的 IP,而内网 IP 之前一直用的是`192.168.1.\*`。现在电脑和路由器`192.168.1.1`以及绑定了这个网段静态 IP 的树莓派都不在同一个网段内,自然是无法访问的。那么为什么会分配到这样的 IP 地址呢? +简单查询得知,这样的 IP 属于保留的 IP 地址段,用于在无法 DHCP 获取 IP 时自己给自己分配一个 IP。这样分配得来的 IP 自然是不能正常使用的。而此前局域网的 DHCP 被我的树莓派承包了,那么首要任务是查看树莓派的 DHCP 服务是否正常运行。 + +排错三步走 +----- + +虽然树莓派之前绑定的 IP 地址无法 ping 通,但庆幸的是,通过主机名依然可以访问到局域网内树莓派,不过此时链接的是 IPv6。IPv6 作为 IPv4 的升级版,在很多方面都有所不同,局域网 IP 地址的分配和 IPv4 的 DHCP 走的并不是同一个路子。之前为了将树莓派的 DNS 用于家庭局域网,而家里的移动光猫上并不能修改 IPv4 DHCP 的 DNS 信息,无奈只能禁用路由器的 IPv4 DHCP 转而使用 AdGuardHome 内置的 DHCP 服务器。而 IPv6 的 DHCP 分为两个部分: + +1. 内网的,分配的 IPv6 地址一般以`fe80`开头,这种地址仅用于内网访问。 +2. 公网的,IPv6 的地址容量之大足以为地球上的每一粒沙子分配一个独一无二的 IPv6 地址,而这对于现今地址池即将枯竭的 IPv4 是根本无法想象的。 + +由于要分配的公网 IPv6 地址是要由路由器从公网获取一个前缀然后再为局域网的每个支持 IPv6 的设备分配地址,这一项任务不能由内网的树莓派代劳,所以当时就没有改动,没想到现在竟然成了救命稻草。 +通过 IPv6 的方式,成功连接上了树莓派。查看了 AdGuardHome 的 DNS 服务以及 DHCP 服务,并没有发现任何异常。 +例行 SSH 连上查看日志。`sudo systemctl status AdGuardHome.service`,果然,发现了端倪。 +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200121221431.png) +原来!DHCP 服务!是要单独监听 67 端口的! +而一个小时之前,为了防止暴露在公网上的树莓派遭到攻击,我特地启用了防火墙,并设置规则为,除了放行的 DNS 53 等端口,其他默认屏蔽。想来应该是误伤了 DHCP 的 67 端口。而之前 DHCP 设置每个 IP 地址的租约为一个小时,即,每间隔一个小时才会重新进行一次 DHCP 请求。于是`sudo ufw allow 67/tcp`端口放行 DHCP 服务信息。win10 断网重连以令其重新获取 IP 地址。 +没想到还是不成功。AdGuardHome 的 DHCP 租约面板,依然显示没有任何设备连接。依据以往的经验,乖乖去查了 DHCP 所使用的端口信息,发现 DHCP 需要`67/udp`和`68/udp`两个端口,且还是使用 udp 连接。 +接下来问题就好办了,重复上面的操作。查看本机的 IP 地址已经恢复正常。 + +谈防火墙 +---- + +在树莓派未暴露在公网上之前,我对防火墙的理解仅限于早些年 360 卫士花里胡哨的网络安全服务。在这次事件之前,我也只是以为防火墙只是防范来自公网的不友善的访问的工具。今天才发现,防火墙除了字面上的意思,防范风险之外,他也是网络数据进出主机的安检。什么样的请求是允许的,什么样的是屏蔽的,这些都需要认真考虑,仔细配置。对于我那配置了众多服务的树莓派来说,我应当在没添加一个新的服务时,查询其使用的端口信息,并更新防火墙配置,我之前却大大忽视了这一点,直到出了事故才意识到。也希望给后来者提供一个减少犯错的机会,毕竟要是实际生产环境出了事故,可就不是十几分钟断网的事了。 + +防火墙设置 +----- + +防火墙抵挡了来自外部的威胁,也会对现有的服务造成影响。除了网页访问的 80 和 443 端口,其他有固定端口的特定服务要手动在防火墙中添加规则。对于像 BT 下载这种没有固定端口的,需要根据实际设定来更新防火墙规则。 +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200122140951.png) +图中为 Aria2 的默认监听端口,为了保证正常的 BT 下载,需要保证这个范围的端口也添加进防火墙允许通过的规则。 +最简单有效的办法是,将所有出站的请求默认允许,对于外部传入的请求,除了必要的几个服务,其他一概默认禁止。 + +``` +sudo ufw default allow outgoing +sudo ufw default deny incoming + + +``` + +这样设置可以保证我们能够正常访问互联网上的绝大多数服务,且阻挡大部分外部的攻击。不过这种情况下,如果你的系统被植入了后门,那么这台机器依然可以向外发送请求。如之前爆发的 “永恒之蓝”,如果你的机器被感染了,那么他依然可以经由特定的端口,向外传送数据,从而感染局域网中的其他设备。防火墙的规则就要根据实际的情况来进行设置了。 \ No newline at end of file diff --git a/content/posts/坑爹的阿里云 & Swap 的重要性.md b/content/posts/坑爹的阿里云 & Swap 的重要性.md new file mode 100644 index 0000000..4a33cc6 --- /dev/null +++ b/content/posts/坑爹的阿里云 & Swap 的重要性.md @@ -0,0 +1,60 @@ +--- +title: 坑爹的阿里云 & Swap 的重要性 +date: 2019-09-12 +lastmod: 2020-04-29 +description: 在一次编译 VSCode 的项目中,跨越千山万水,解决重重依赖后,终于来到了编译环节。然而才开始没多久,就出现了一个匪夷所思的报错。 +categories: +- 踩坑记 +tags: +- 服务器 +--- + + + +在一次编译 VSCode 的项目中,跨越千山万水,解决重重依赖后,终于来到了编译环节。然而才开始没多久,就出现了一个匪夷所思的报错。 + +谷歌一番,又到 /var/log/message 里查看了一番系统日志,竟然说是内存爆满,进程被 kill 了。想来我阿里云的那台服务器内存的统计曲线基本就没超过一半,今儿个怎么会出现内存爆掉的情况。又是一顿折腾发现这台阿里云的机子 Swap 大小竟然为 0??Swap 为物理内存达到一定临界值之后,系统将磁盘的一部分空间作内存使用,一般在 Windows 系统上都是由系统自动管控,新安装的 Linux 桌面发行版也会在安装时提醒用户设置,这坑爹的阿里云在安装的时候没给我分配 Swap 分区? + +吐槽归吐槽,问题还是要自己解决。网上各种 swap 分区的设置教程大部分都比较模糊,代码的参数及命令都没有解释清楚,给人一种看不懂的感觉~对于操作磁盘这种敏感操作,还是要尽量避免在半懂不懂的情况下进行这种高危操作,毕竟数据无价嘛。最后找到了一篇靠谱的教程,并在服务器端和树莓派端进行实践。 + +参考:_[https://linux.cn/article-9238-1.html](https://linux.cn/article-9238-1.html)_ + +使用 fallocate 创建交换空间,我们首先在 / 目录下创建一个名为 swap_space 的文件。然后分配 4GB 到 swap_space 文件: + +``` +fallocate -l 4G /swap_space +``` + +我们运行下面命令来验证文件大小: + +``` +ls -lh /swap_space +``` + +然后更改文件权限,让 /swap_space 更安全: + +``` +chmod 600 /swap_space +``` + +这样只有 root 可以读写该文件了。我们再来格式化交换分区(LCTT 译注:虽然这个 swap_space 是个文件,但是我们把它当成是分区来挂载): + +``` +mkswap /swap_space +``` + +然后启用交换空间: + +``` +swapon -s +``` + +每次重启后都要重新挂载磁盘分区。因此为了使之持久化,就像上面一样,我们编辑 /etc/fstab 并输入下面行: + +``` +/swap_space swap swap defaults 0 0 +``` + +保存并退出文件。现在我们的交换分区会一直被挂载了。我们重启后可以在终端运行 ` free -m `来检查交换分区是否生效。 + +修改后 Swap 分区大小变为 4G,编译终于可以跑起来了~ \ No newline at end of file diff --git a/content/posts/打造沉浸式互联网体验「广告篇 - 上」.md b/content/posts/打造沉浸式互联网体验「广告篇 - 上」.md new file mode 100644 index 0000000..a2b245d --- /dev/null +++ b/content/posts/打造沉浸式互联网体验「广告篇 - 上」.md @@ -0,0 +1,73 @@ +--- +title: 打造沉浸式互联网体验 「广告篇 - 上」 +date: 2020-02-18 +lastmod: 2020-04-29 +description: 继机械化、电气化、自动化的三次工业革命后,人类正迎来以互联网为载体的智能化时代。互联网与我们的生活结合得越来越紧密。除了装修房子,购置服装,优化家庭互联网体验也是提升生活质量的一个良好途径。本篇中我们将聚焦网页浏览来优化我们的互联网体验。 +categories: +- 教程 +tags: +- 去广告 +- 黑科技 +--- + +序 +- + +继机械化、电气化、自动化的三次工业革命后,人类正迎来以互联网为载体的智能化时代。互联网与我们的生活结合得越来越紧密。除了装修房子,购置服装,优化家庭互联网体验也是提升生活质量的一个良好途径。本篇中我们将聚焦网页浏览来优化我们的互联网体验。 + +前言 +-- + +“上网冲浪” 这样的词已经淡出公众的视野,身边的 10 后甚至 00 后都鲜有人熟悉这个词了。也许我们现在与互联网的交互并不局限于网页交互了,但我想,你也肯定不希望被自己偶然上某度查资料的时候被漫天的广告破坏了一天的心情。 + +本系列将从以下几点从易到难,逐步优化日常的网页体验。无需任何代码基础,使用文中推荐的工具,小白亦可轻松上手! + +* 广告篇 + * 浏览器插件去除特定元素广告 + * 油猴脚本屏蔽搜索结果广告 + * 善用阅读工具 + * 通过 Hosts 屏蔽广告联盟 * + * 借助 AdGuardHome 打造局域网统一去广告方案 ** +* 网络篇 + +![](https://i.loli.net/2020/01/20/tDZ9kw68rAajWVy.png) + +![](https://i.loli.net/2020/01/20/vAqHRYSNfl9PdTZ.png) + +![](https://i.loli.net/2020/01/20/JgRAjFCdDpwreBU.png) + +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200120213009.png) + +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200121223647.png) + +这样的广告呢,虽然他的侵略性或许比以往更小了,不过还是有点碍眼。而且在某种程度上,依然可能会误导家里的老人或是小孩。为了统一家庭的互联网体验,减少不必要的麻烦,这个广告也是我们的 target。由于这个广告是嵌入搜索结果中的,如果你用之前的小伎俩,打算单独屏蔽这个广告对应的元素的话,你就要失望了。因为他会连带着屏蔽所有的搜索结果。这显然是不可取的。下面我们要介绍另外两个工具。 + +### Tampermonkey 油猴 + +![](https://i.loli.net/2020/01/21/Jo4BkYaf3K58DmW.png) +这是一个非常强大的浏览器插件,可以在特定的页面插入特定的 js 脚本,从而实现非常强大的功能。比如,音乐网站 VIP 资源下载,百度云盘下载加速,视频网站 VIP 资源在线观看,以及我们今天的的男二号: + +### AC - 搜索引擎优化脚本 + +![](https://i.loli.net/2020/01/21/ZYhCx2Xzd9yABcI.png) + +安装好油猴插件后,你可以在 [Greasyfork.org](https://greasyfork.org/zh-CN/) 上下载各种黑科技般的脚本。安装成功后,油猴会在你进入符合条件的网页时自动启用对应的脚本。比如,你安装了 AC 的这个脚本,而这个网页是适配了某度的,那么当你进入某度的网页时,油猴就会自动启用这个脚本。快来领取属于你的纯净版度度吧。 +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200121231059.png) + +前面介绍的几个,都只是借助第三方工具来屏蔽网页上特定的碍眼的元素。如果我们要阅读来自不同网站的新闻,为了获得机制纯净的阅读体验,难道要用 AdBlock 一个一个选中页面中除文章主体文字以外其他所有元素? 对于这种页面结构非常固定的一类网站,我们是否可以通过某种方式,来只提取页面主体的文字,以优化我们的阅读体验呢? + +### 使用浏览器自带的阅读工具 + +苹果很早就想到了这一点,Safari 浏览器可以识别当前的的页面是否是一个结构简单,文字为主题的页面。在符合条件的网页上,Safari 会提示你使用阅读工具来优化页面,以获得更好的阅读体验。当然,你也可以手动启用他。 +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200121233256.png) +微软也不甘示弱,在随 Win10 推出的 Microsoft Edge 上,也内置了阅读工具。你可以在地址栏的右边找到他。 +![](https://blog-1301127393.cos.ap-shanghai.myqcloud.com/BlogImgs/20200121233739.png) +_[注:区别与 2020 年新的基于 Chromium 内核的新 Edge 浏览器,此处指的是老版 Edge HTML 内核的 Microsoft Edge 浏览器]_ + +### 使用第三方阅读工具 - [简阅 SimpRead](http://ksria.com/simpread/) + +![](https://i.loli.net/2020/01/21/ZcsEIv8wBfjOmVa.png) +也许你买不起苹果,受不了 Win10,你依然可以通过安装第三方工具的方式享受纯净的阅读体验。简阅,正如他的名字,旨在为你提供简约的阅读视图。作者为了实现 “简单阅读” 这个小目标, 主动适配了数百个常见的文字为主体的网站,并设计为可以自动检测网页结构,对于漫天飞舞的各类热门冷门的小说网站、新闻网站,都可以自动识别并优化为适合阅读的页面。 + +恭喜你!利用上面介绍的几个工具,你已经可以在国内互联网环境中求的一份净土了。如果你感兴趣或是强迫症患者,欢迎前往 **打造沉浸式互联网体验 【广告篇 - 下】** +温馨提示:下篇介绍的内容的内容将略有一点偏硬核,需要一点点的动手能力哦~ \ No newline at end of file diff --git a/content/posts/树莓派 Apache2 设置特定域名转发到特定端口.md b/content/posts/树莓派 Apache2 设置特定域名转发到特定端口.md new file mode 100644 index 0000000..3260795 --- /dev/null +++ b/content/posts/树莓派 Apache2 设置特定域名转发到特定端口.md @@ -0,0 +1,45 @@ +--- +title: 坑爹的阿里云 & Swap 的重要性 +date: 2020-03-10 +lastmod: 2020-04-29 +description: 随着树莓派上部署的项目越来越多,每次使用 IP + 端口 访问也越来越不方便。考虑使用 Apache 来特定子域名跳转到不同端口对应的不同应用。 +categories: +- 踩坑记 +tags: +- 服务器 +- 树莓派 +--- + + +随着树莓派上部署的项目越来越多,每次使用 **IP + 端口**访问也越来越不方便。考虑使用 Apache 来特定子域名跳转到不同端口对应的不同应用。 + +* 树莓派 3B+  Raspbian 系统 +* Apache2 +* 自己的域名 + +在 Apache2 的配置文件(路径 /etc/Apache2/Apache2.conf ) 文件末尾加上以下配置: + +``` + +  ServerName YOUR_DOMAIN.COM #此处为本条规则绑定的域名,下同 +  ServerAlias YOUR_DOMAIN.COM +  ProxyPreserveHost On +  ProxyRequests Off +  ProxyPass / http://localhost:8080/ #修改此处的端口号为实际所需,下同 +  ProxyPassReverse / http://localhost:8080/ + + + +``` + +之后开启 Apache2 的相关模块 + +``` +a2enmod rewrite +a2enmod proxy +a2enmod proxy_http + + +``` + +最后重启 Apache2 即可 sudo systemctl restart Apache2 \ No newline at end of file diff --git a/content/posts/黑苹果笔记.md b/content/posts/黑苹果笔记.md new file mode 100644 index 0000000..401585e --- /dev/null +++ b/content/posts/黑苹果笔记.md @@ -0,0 +1,107 @@ +--- +title: 黑苹果笔记 +date: 2019-03-12 +lastmod: 2020-04-29 +description: 从两年前第一次听说黑苹果,到暑假第一次装黑苹果,再到几个月前成功装上黑苹果,一路走来,收获颇丰。在这里将 Dell G3 大致安装过程记录下来。 +categories: +- 教程 +- 笔记 +tags: +- 黑苹果 +--- + + +* Last Update: April 9th,2019 + +从两年前第一次听说黑苹果,到暑假第一次装黑苹果,再到几个月前成功装上黑苹果,一路走来,收获颇丰。在这里将 Dell G3 大致安装过程记录下来。 + +配置:Dell G3 3579 Intel i5-8300H UHD630 GTX1050Ti + +V1.0 千辛万苦从国外网站上淘来个 EFI +---------------------- + +一开始想走捷径,爬国内外各种论坛找现成的 EFI。最后在 InsanelyMac 上找到一位老哥的 EFI,不料链接挂了。又注册论坛账号然后给他留言说能不能补发一次。这位小哥倒是挺热情的,不仅给了 EFI,还把安装中踩过的坑也一并列出来,以帮助后来者。没想到因为墙 + 移动的渣渣网络,补发的链接打不开。。。又到处 找梯子然而不好使。最后 还是借朋友的电信网成功下载下来了。(电信在宽带业务上深耕十几年了,移动才两三年怎么比得上) + +满怀欣喜的用上了这个 EFI。本来我是用黑果小兵的带 Clover 的镜像安装好了的,替换一下 EFI 就可以了。没想到装上去没用,没驱动的还是没驱动。可能是版本的原因吧,我当时装的是 10.14.2,而论坛里面大多是 10.13.6(截止本文写作时,GTX 系列显卡 驱动支持只到 10.13,10.14 的还没出)。没办法了,自己来吧。之前怕爬了那么多帖子,对黑苹果驱动优化也有了些了解。 + +V1.2 @2019.3.14 声卡 + 键盘 + 触控板 +----------------------------- + +根据黑果小兵的帖子,对声卡进行了注入。 + +这里要注意,一定要按照黑果小兵的帖子的步骤一步一步来,有些先决条件没有处理好,后续怎么折腾都是白搭。 + +> ALC236 LayoutID:13+Hackintool 处理 = 声音播放 + 麦克风 +> 笔记本键盘 OK +> 触控板 -> 鼠标 + +V1.3 @2019.3.14 RNDIS 连接网络 +-------------------------- + +Dell G3 的有线网卡是非常好驱动的,但是自带的 Intel 无线网卡全球无解,只有 更换。考虑到目前没有用有线网,手头也没有小螺丝刀来拆机,于是选择通过共享手机网路。这里使用 HoRNDIS 驱动实现手机电脑 USB 网络共享。反正平时不是经常用,这样用够用了。 + +> RNDIS OK + +V2.0 @2019.3.14 驱动核显 UHD630 +--------------------------- + +照着黑果小兵的教程,使用 Hackintool 进行修补,最终成功实现了 UHD630 的驱动,显存显示 2048M,特效开启,丝滑顺畅。 + +> UHD630 OK + +V2.1 @2019.3.15 显示器 EDID 修补 + CPU 变频 +------------------------------------ + +同样照着黑果小兵的教程,进行了 EDID 修补,使得 3 苹果系统可以正常识别我的显示器。感觉差别不是很明显啊,唯一的区别好像是之前一直都是显示的 21 寸外接显示器,现在显示的是 15.5′ 内建显示器。 + +CPU 变频对平时的体验还是很重要的,多任务时自动升频,闲置自动降频,一方面保证日常体验,另一方面风扇不会 一直狂转。不过好像 10.14 默认支持 8 代 U,检测结果是可以正常变频,那就不用再处理了。就算不能,CPU-S 里面一件生成 SSDT 也是很方便的。 + +> EDID 修补 +> CPU 变频正常,无需处理 + +V2.2 @2019.3.15 USB 端口修补 +------------------------ + +同样的根据黑果小兵的教程,使用 Hackintoool 进行 USB 修补。刚开始 也不知道这是干啥用的,我的所有 USB 端口都工作正常。后来知道屏蔽无效的端口可以避免一些很奇怪的坑,比如睡眠唤醒问题。那就做一下吧 + +> **注意:使用 hackintool 修补 usb 时导出 kext 和 dsdt 补丁前会要求修改 config.plist, 修改会导致异常,应略过此步骤** + +**问题**: + +> 靠下的 USB3.0 无法使用 USB 2.0 +> Hub 需接上部的 USB3.0 + +**说明**: + +> 更正此问题只需更新 USBPort.kext + +**改动**: + +> +XHCI-unsupported.kext +> +USBPort.kext +> -USBInjectAll.kext + +V2.3 @2019.3.15 修补声卡 +-------------------- + +用了一段时间发现之前弄好的声卡驱动只能外放,插上耳机就没声音了。经过一番探索,大致了解到 Layout-id 是布局文件,记录了不同的端口之间的映射关系。我这种情况是属于端口映射不当,耳机孔的输入与输出没能够正确映射。改了下声卡注入的 Platform-ID ,解决了问题。当晚就用黑苹果看了个电影。Mac 的音效比较 清亮,也没有什么破音的现象,声卡驱动的很好。接下来可以放心的耍 Logic Pro X 了哈哈(当初想装黑苹果就是冲着 Logic Pro X 和 XCode 来的) + +> 声卡 platform-id 修改为 15,外放 OK 麦克风 OK 耳机 OK +> 耳机麦克风 Failed + +暂告一段落 +----- + +黑苹果的显示 + 声音 + 网络等基本问题已经解决,虽然还 不是很完美,但是用 Logic 和 Xcode 已经没问题了 ,后续有时间 有需要 再继续折腾。 + +Logic Pro X +USB 连接 iPad 上 Logic Remote 爽到飞起!看来不需要买 MIDI 键盘了,准备把资金换个大点的、更快的固态,把黑苹果装上去~ + +待解决问题: + +* 电量显示 +* 触控板 触控手势 +* 读卡器 +* 时间显示 +* 睡眠 +* 文件名乱码 +* 重启后才能使用声卡 \ No newline at end of file