You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenWRT环境下无需暴露uhttpd至公网,使用acme.sh续期Let's Encrypt证书的方案咨询

OpenWRT环境下无需暴露uhttpd至公网,使用acme.sh续期Let's Encrypt证书的方案咨询

嗨,针对你的需求,我整理了几个不用修改acme.sh脚本、又能安全续证的实用方案,完美适配你的场景:

方案一:用acme.sh官方自带的端口指定参数(最推荐)

你其实完全不用改脚本!acme.sh的standalone模式支持通过--standalone-port参数指定监听端口,步骤超简单:

  1. 在OpenWRT防火墙里临时加一条转发规则:把WAN口的80端口转发到路由器本地的8080端口(路由器本身属于LAN网段,这个转发不会让公网流量直接触达uhttpd)
  2. 执行续证命令时带上端口指定参数,示例:
acme.sh --renew -d your-subdomain.freedns.org --standalone --standalone-port 8080
  1. 续证完成后记得立刻关闭WAN口的80转发规则。想省事儿的话,还能用acme.sh的钩子脚本自动化整个流程:
    • --pre-hook:续证前自动添加防火墙转发规则
    • --post-hook:续证完成后自动删除转发规则,比如在hook脚本里调用OpenWRT的ucifw3命令修改配置并重启防火墙

方案二:临时切换uhttpd端口,让acme.sh临时占用80端口

如果不想搞端口转发,也可以临时调整uhttpd的监听端口:

  1. 续证前,用uci命令快速把uhttpd的监听端口从80改成其他(比如8080):
uci set uhttpd.main.listen_http='0.0.0.0:8080'
uci commit uhttpd
/etc/init.d/uhttpd restart
  1. 临时打开WAN口的80端口,运行acme.sh默认的standalone续证命令(不用改端口,默认监听80)
  2. 续证完成后,把uhttpd的端口改回80,同时关闭WAN口的80端口
    这个流程同样能用hook脚本自动化,避免手动操作忘关端口的风险

方案三:利用uhttpd临时路由规则(备选,不优先推荐)

可以在uhttpd里临时加一条路由规则,把/.well-known/acme-challenge/路径的请求转发到acme.sh的standalone服务,但这样需要让WAN的80流量先到uhttpd,虽然只放行验证路径,但安全性不如前两个方案,所以只作为备选。

额外小贴士

如果你后续不想再折腾HTTP验证,其实可以考虑换个支持免费DNS API的服务商,比如Cloudflare免费版,把你的freedns子域名转到Cloudflare解析,这样就能用acme.sh的DNS验证方式,完全不用开WAN端口,不过这需要迁移域名解析,看你愿不愿意折腾啦。

备注:内容来源于stack exchange,提问作者strubbly

火山引擎 最新活动