一、微软云注意事项

去年体验过微软 Azure 的服务,试用免费一个月后,由于各种隐性扣费可能,就没有继续使用下面的免费 12 个月的服务,删除了订阅,最近偶然点了微软云的链接,发现又可以免费试用了,那就再试用(baipiao)一个月,搭建一个过滤广告的 DNS 服务器,国内主机会封锁 53 端口,微软主机就没这个问题了。

查看免费服务文档可以发现,可以免费体验 WindowsLinux 的 B1S 的虚拟机各750小时,可以搭建一个或多个,每种类型的主机使用总时间大于750小时会扣费,磁盘可以选择 P6 级别的固态硬盘 SSD 存储两块。

虽然说是免费,但是微软的套路是一个接着一个,建议也就体验一下免费的一个月,后面最好还是不要使用了。创建虚拟机的时候附带的操作系统磁盘,并不是 `P6` 级别的免费磁盘,需要创建好虚拟机之后,先停止虚拟机,然后手动把磁盘修改为免费级别的磁盘。 `Windows` 虚拟机的系统可能不支持 `64GB` 的磁盘,需要更高容量的磁盘,所以就体验 `Linux` 虚拟机好了。创建虚拟机的时候,系统还是选择 `Debian`,其他不确定是不是需要付费的服务,就直接不要选择好了。

二、设置 root 登录

Azure 创建虚拟机的时候,默认是创建新用户(名称可自定义),如果不设置好权限,会导致很多功能都不能使用,所以先用设置的用户登录之后,直接设置成 root 用户登录。

2.1、修改密钥文件

打开 /root/.ssh/authorized_keys 这个文件,把 ssh-rsa 之前的字段都删除掉,只保留公钥字段。

  • 进入 root 模式,即服务器最高权限。
1
sudo -i
  • 打开 /root/.ssh/authorized_keys 文件。
1
vim /root/.ssh/authorized_keys
  • 打开文件之后进去是命令模式,按 i 进入编辑模式,修改完毕按 esc 进入命令模式,输入(:wq 保存并退出)。

halo-6

  • 把 ssh-rsa 之前的字段都删除掉,只保留公钥文件。

halo-7

2.2、修改配置文件

  • 查看一下 /etc/ssh/sshd_config 文件,修改为下面的参考配置。
1
vim /etc/ssh/sshd_config
参考配置 释义
PermitRootLogin yes 允许 root 用户登录
PubkeyAuthentication yes 允许通过公钥登录
AuthorizedKeysFile .ssh/authorized_keys 公钥路径
PasswordAuthentication no 关闭密码登录
  • 重启实例,然后就可以直接通过 root + 公钥登录服务器了。
1
reboot

halo-8

2.3、其他命令学习

命令 释义
pwd 查看当前路径
ls 查看当前路径下的文件(不包含隐藏. 开头文件)
ls -a 查看当前路径所有包含隐藏. 开头文件
sudo -i 进入 root 权限,本机已经获得登录即 root 权限,不用再提权
reboot 重启服务器

三、安装 nginx

3.1、更新系统

1
sudo apt update && sudo apt upgrade -y

3.2、安装 nginx

1、安装必备组件

1
sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring

2、导入官方 nginx 签名密钥,以便 apt 可以验证软件包真实性。

获取密钥

1
2
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

3、验证下载的文件是否包含正确的密钥

1
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

4、输出应包含完整指纹,如下所示:573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62

1
2
3
pub   rsa2048 2011-08-19 [SC] [expires: 2024-06-14]
573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
uid nginx signing key <signing-key@nginx.com>

如果指纹不同,请删除该文件。

5、将 nginx 的稳定源加入系统

1
2
3
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

6、设置 nginx 官方源的优先级高于 Debian 系统的官方仓库

1
2
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
| sudo tee /etc/apt/preferences.d/99nginx

7、更新源,并安装 nginx

1
sudo apt update
1
sudo apt install nginx

8、查看状态,启动 nginx

安装好的 nginx 默认是 dead 状态,需要启动,并设置开机启动。

  • 查看nginx服务的状态
1
systemctl status nginx
  • 启动nginx服务
1
sudo systemctl start nginx
  • 设置nginx开机启动
1
sudo systemctl enable nginx
  • 确认nginx服务的启动状态
1
systemctl status nginx
  • 相关命令
1
2
3
4
5
6
7
8
sudo nginx -V                       <-- 查看nginx的编译参数
cat /etc/nginx/nginx.conf <-- 查看nginx的配置文件
cat /etc/nginx/conf.d/default.conf <-- 还是nginx的配置文件
systemctl status nginx <-- 查看nginx服务的状态
sudo systemctl start nginx <-- 启动nginx服务
sudo systemctl enable nginx <-- 设置nginx开机启动
systemctl status nginx <-- 确认nginx服务的启动状态
ip a <-- 查看本机IP地址

四、部署 AdGuardHome

官方地址

4.1、一键安装

AdGuardHome 提供了全自动的安装脚本,只需要运行安装脚本,就可以安装最新版,还可以通过脚本一键卸载。

1
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

**打开 http://ip:3000 即可进入安装界面,可以先不用进入,配置好 nginx 直接使用域名登录。

该脚本还接受一些选项:

  • -c <channel> 使用指定的频道

  • -r 重新安装 AdGuard 主页

  • -u 卸载 AdGuard 主页

  • -v 用于详细输出

请注意,选项 -r-u 是互斥的。

可以通过下面的脚本实现一键卸载。

1
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -u

4.2、设置软链接

1
sudo /opt/AdGuardHome/AdGuardHome -s start|stop|restart|status|install|uninstall

安装执行完成,会输出以上信息。脚本会自动把 AdGuardHome 安装到 /opt/AdGuardHome 目录下, 可以设置软链接到 /etc 目录下,把执行程序设置软链接到 /usr/bin

1
ln -s /opt/AdGuardHome/ /etc/
1
ln -s /opt/AdGuardHome/AdGuardHome /usr/bin

4.3、配置反向代理

1、脚本会创建一个 systemctl 服务,运行下面的命令查看运行状态。

1
systemctl status AdGuardHome

2、配置你的域名解析到当前服务器,通过 nginx 实现反向代理本地 3000 端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {

listen 80;
listen [::]:80;

server_name dns.google.top;

return 301 https://$server_name$request_uri;

}

server {

listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name dns.google.top;

#证书位置
ssl_certificate /etc/nginx/cert/dns.google.top.crt;
ssl_certificate_key /etc/nginx/cert/dns.google.top.key;

location / {
proxy_pass http://127.0.0.1:3000;
}

}

3、验证并重载 nginx 配置

1
nginx -t
1
nginx -s reload

4.4、配置 AdGuardHome

这时可以访问 https://dns.google.top ,访问请求会被代理到 AdGuardHome 提供服务的端口上。

如果一切正确会进入安装界面,点击开始配置进入下一步,网页监听端口 80 已经被 nginx 占用,可以改为其他端口,比如 3888DNS 保持默认的 53。不过由于服务器上运行了其他的 DNS 服务,53 端口会提示已经被占用,可以按照官方 WIKI 的方法解决。

1、创建目录:/etc/systemd/resolved.conf.d

1
sudo mkdir -p /etc/systemd/resolved.conf.d

2、停用和更新 DNS 服务器地址

创建 /etc/systemd/resolved.conf.d/adguardhome.conf,写入下面的配置。

1
vim /etc/systemd/resolved.conf.d/adguardhome.conf
1
2
3
[Resolve]
DNS=127.0.0.1
DNSStubListener=no

3、激活文件:resolv.conf

1
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
1
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

4、重新启动:DNSStubListener

1
sudo systemctl reload-or-restart systemd-resolved

此时就可以把 DNS 监听端口设置到默认的 53 端口了。然后点下一步设置用户名和密码,设置完成一直点下一步即可。

4.5、配置登录界面

此时,网页会跳转到 https://dns.google.top:3888/login.html 的登录界面,需要重新配置 nginx

如果不想访问 dns.google.top 时直接跳出 AdGuardHome 的登录页,可以将其隐藏在 /admin 下,注意这里必须配置 login.html 页面的跳转,否则访问 https://dns.google.top/admin 将会跳转到 https://dns.google.top/login.html 导致404错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
server {

listen 80;
listen [::]:80;

server_name dns.google.top;

return 301 https://$server_name$request_uri;

}

server {

listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name dns.google.top;

#证书位置
ssl_certificate /etc/nginx/cert/dns.google.top.crt;
ssl_certificate_key /etc/nginx/cert/dns.google.top.key;

location /admin/ { #主页隐藏在admin
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3888/; #后面的/不能去掉
}

location /login.html {
return 301 https://$server_name/admin/login.html;
}

}
  • 验证并重载 nginx 配置
1
nginx -t
1
nginx -s reload

此时访问 https://dns.google.top/admin 才会跳转 AdGuardHome 的登陆界面。输入设置好的用户名和密码进入仪表盘。

4.6、配置加密 DNS

选择设置 — 加密设置 — 启动加密打勾 — 服务器名称填入域名 dns.google.top — 自动重定向不勾选 — HTTPS 端口从 443 修改为 3433 — 其他设置保持默认 — 把证书路径粘贴上保存配置即可。

  • nginx 修改为下面的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
server {

listen 80;
listen [::]:80;

server_name dns.google.top;

return 301 https://$host$request_uri;

}

server {

listen 443 ssl http2;
listen [::]:443 ssl http2;

server_name dns.google.top; #你自己解析好的域名

#HTTP 重定向到 HTTPS
# if ($ssl_protocol = "") { return 301 https://$host$request_uri; }

#证书位置
ssl_certificate /etc/nginx/cert/dns.google.top.crt;
ssl_certificate_key /etc/nginx/cert/dns.google.top.key;

#证书配置
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #安全链接可选的加密协议
ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #加密算法
ssl_prefer_server_ciphers on; #表示优先使用服务端加密套件。默认开启
ssl_session_timeout 10m; #缓存有效期

location /admin/ { #主页隐藏在admin
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:3888/; #后面的/不能去掉
}

location /login.html {
return 301 https://$server_name/admin/login.html;
}

location /dns-query {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://127.0.0.1:3433/dns-query;
}

#日志
access_log /var/log/nginx/nginx.dns.access.log;
error_log /var/log/nginx/nginx.dns.error.log;

#禁止访问的文件或目录
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
deny all;
}

}
  • 验证并重载 nginx 配置
1
nginx -t
1
nginx -s reload

这种配置下,Nginx 一旦接到 https://dns.google.top/dns-query 的访问,就会把内容转交给本地3433 端口上的 AdGuardHome 处理。另外,/dns-query 部分的 proxy_set_header 参数必须加上,以达到在 HTTP 头中添加客户端来源端口的目的,否则 AdGuardHome 的统计中将无法出现真实的客户端 IP

4.7、其他设置

1、DNS 设置

  • 上游 DNS 服务器-并行请求
1
2
3
4
tls://dns.google
https://dns.google/dns-query
tls://1dot1dot1dot1.cloudflare-dns.com
https://dns.cloudflare.com/dns-query
  • Bootstrap DNS 服务器
1
2
3
4
5
6
7
8
8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
1.1.1.1
1.0.0.1
2606:4700:4700::1111
2606:4700:4700::1001
  • DNS 服务配置

速度限制设为 0—启用 EDNS 客户端子网—启用 DNSSEC—其他保存默认即可。

2、规则源

AdBlock DNS Filters,适用于 AdGuard 的去广告合并规则,每8个小时更新一次。