微软 Azure 部署 AdGuardHome
一、微软云注意事项
去年体验过微软 Azure
的服务,试用免费一个月后,由于各种隐性扣费可能,就没有继续使用下面的免费 12
个月的服务,删除了订阅,最近偶然点了微软云的链接,发现又可以免费试用了,那就再试用(baipiao
)一个月,搭建一个过滤广告的 DNS
服务器,国内主机会封锁 53
端口,微软主机就没这个问题了。
查看免费服务文档可以发现,可以免费体验 Windows
和 Linux
的 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 保存并退出)。
- 把 ssh-rsa 之前的字段都删除掉,只保留公钥文件。
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 |
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 | curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ |
3、验证下载的文件是否包含正确的密钥
1 | gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg |
4、输出应包含完整指纹,如下所示:573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
1 | pub rsa2048 2011-08-19 [SC] [expires: 2024-06-14] |
如果指纹不同,请删除该文件。
5、将 nginx
的稳定源加入系统
1 | echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \ |
6、设置 nginx 官方源
的优先级高于 Debian
系统的官方仓库
1 | echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \ |
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 | sudo nginx -V <-- 查看nginx的编译参数 |
四、部署 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 | server { |
3、验证并重载 nginx
配置
1 | nginx -t |
1 | nginx -s reload |
4.4、配置 AdGuardHome
这时可以访问 https://dns.google.top
,访问请求会被代理到 AdGuardHome
提供服务的端口上。
如果一切正确会进入安装界面,点击开始配置进入下一步,网页监听端口 80
已经被 nginx
占用,可以改为其他端口,比如 3888
,DNS
保持默认的 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 | [Resolve] |
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 | server { |
- 验证并重载
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 | server { |
- 验证并重载
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 | tls://dns.google |
Bootstrap DNS
服务器
1 | 8.8.8.8 |
DNS
服务配置
速度限制设为 0
—启用 EDNS
客户端子网—启用 DNSSEC
—其他保存默认即可。
2、规则源
AdBlock DNS Filters,适用于 AdGuard
的去广告合并规则,每8个小时更新一次。