Certbot DNS解析不读取/etc/hosts 如何强制指向本地私有IP
方案1:修正DNS解析配置 + 公网端口映射(适用HTTP-01校验场景)
你之前配置dnsmasq不生效是因为缺少本地解析规则,且没有把本机DNS指向dnsmasq,修复步骤如下:
- 编辑
/etc/dnsmasq.conf,添加解析规则(如果需要泛解析所有子域名就把subdomain换成*.):
address=/subdomain.mydomain.com/192.168.1.111
- 修改树莓派的DNS优先级,编辑
/etc/resolv.conf首行加:
nameserver 127.0.0.1
如果你的系统用dhcpcd管理网络,就编辑/etc/dhcpcd.conf,找到static domain_name_servers配置项,改成static domain_name_servers=127.0.0.1 8.8.8.8,避免resolv.conf重启后被覆盖。
3. 重启服务生效:
systemctl restart dnsmasq systemctl restart dhcpcd
用nslookup subdomain.mydomain.com测试,返回192.168.1.111即配置成功。
注意:该配置仅让树莓派本地解析域名到内网IP,Let's Encrypt的公网校验服务器还是会访问你的公网IP,你需要把公网IP的80/443端口映射到树莓派的对应端口,才能完成HTTP-01校验。
方案2:DNS-01校验申请泛域名证书(最适合批量子域名场景)
完全不需要公网暴露本地服务,也不需要给每个子域名单独配置,一次申请*.mydomain.com泛域名证书,所有子域名都可以使用,后续新增子域名无需重新申请:
- 安装certbot对应你域名注册商的dns插件:
apt install certbot python3-certbot-dns-你的注册商标识
- 配置你的域名DNS服务商的API密钥文件
/root/certbot_dns.ini,权限设为600:
dns_xxx_api_token = 你的API令牌
- 执行申请命令:
certbot certonly --dns-xxx --dns-xxx-credentials /root/certbot_dns.ini -d "*.mydomain.com" -d "mydomain.com"
全程自动完成DNS校验,不需要公网访问你的树莓派,后续可以直接写到bash脚本实现自动化部署。
方案3:公网服务器转发校验请求(不想修改DNS配置时可选)
如果你的公网IP对应的服务器是你可控的,直接在公网服务器上配置反向代理,把所有/.well-known/acme-challenge/路径的请求转发到你的树莓派(可以用frp内网穿透、VPN打通公网服务器和树莓派的网络),Let's Encrypt的校验请求会自动转发到你本地的Apache服务,不需要修改本地任何解析配置。
内容的提问来源于stack exchange,提问作者Chiwda
相关产品推荐
相关产品推荐

