『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 5118|回复: 4

[新奇玩法] 在HASS中实现GoDaddy IPv6 DDNS(v4需自改)

[复制链接]

21

主题

188

帖子

1481

积分

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1288
HASS币
60
发表于 2020-10-31 10:42:16 | 显示全部楼层 |阅读模式
本帖最后由 chiunownow 于 2020-10-31 10:46 编辑

在HASS中实现GoDaddy IPv6 DDNS(v4需自改)

为什么?

  1. 最近把自制NAS换成UNRAID系统,家里同时换了宽带,可以获得IPv6地址,而且443可用
  2. 在UNRAID的Docker下搞不定GoDaddy IPv6 DDNS,Cloudflare API又禁止免费域名使用(例如.tk)
  3. 省资源
  4. 补充:正确配置IPv6是件麻烦事,最好装宽带时就让师傅光猫改桥接,确认路由器支持并且正确配置v6。v6可以理解为没有内外网的明显区隔,子网设备同样能获取能被公网访问的ipv6地址。

怎么做

  1. 拢共要用到以下组件:

    1. RESTful Template Sensor:用于获取本地IPv6地址和GoDaddy Record
    2. REST Command:用于向GoDaddy API提交新IP
    3. Automation:……
  2. 注册域名,改Nameserver到GoDaddy,不赘述
  3. 获得 GoDaddy API Key:参考 https://my.oschina.net/u/4308373/blog/3422912
  4. 不能在Lovelace完成的两个REST组件,手写YAML
sensor:
# 通过API获取本机IPv6地址,v4使用api.ipify.org
  - platform: rest
    name: Unraid IPv6 Address
    resource: https://api6.ipify.org
# 通过API获取GoDaddy AAAA记录(ipv4是A记录,v6是AAAA)
  - platform: rest
    name: GoDaddy AAAA Record
    resource: https://api.godaddy.com/v1/domains/你的顶级域名(例如abc.xyz)/records/AAAA/@ #留意此处的AAAA,如用于ipv4改为A即可,下略
    headers:
      Authorization: sso-key APIKEY:Secret(例如jkklasdfljkasdf12123uo123o:adfiouasdfoi0,注意中间用冒号隔开)
    value_template: '{{ value_json[0].data }}' # 从返回的JSON中解析出当前AAAA记录

rest_command:
  godaddy_ddns_at:
    url: https://api.godaddy.com/v1/domains/你的顶级域名(例如abc.xyz)/records/AAAA/@
    method: put
    content_type: "application/json"
    headers: 
      Authorization: "sso-key APIKEY:Secret(例如jkklasdfljkasdf12123uo123o:adfiouasdfoi0,注意中间用冒号隔开)"
    payload: '[{"data":"{{unraid_ipv6_address}}"}]' #此处巨坑,似乎不能直接用template获取地址,必须命名变量后调用前给变量赋值,下略
  godaddy_ddns_any:
    url: https://api.godaddy.com/v1/domains/你的顶级域名(例如abc.xyz)/records/AAAA/*
    method: put
    content_type: "application/json"
    headers: 
      Authorization: "sso-key APIKEY:Secret(例如jkklasdfljkasdf12123uo123o:adfiouasdfoi0,注意中间用冒号隔开)"
    payload: '[{"data":"{{unraid_ipv6_address}}"}]'
  1. Automation现在可以在Lovelace里更好地完成了,靠这个我才发现以前好多没用上的功能。推荐
alias: Godaddy DDNS

trigger:
  - platform: template
  #两个sensor不相同时提交新地址
    value_template: >-
      {{states.sensor.unraid_ipv6_address.state !=
      states.sensor.godaddy_aaaa_record.state}}

# condition条件,用于避免因 API GET 错误导致错误 PUT 新 IP

condition:
  - condition: and
    conditions:
      - condition: template
        value_template: '{{states.sensor.godaddy_aaaa_record.state != "None"}}'
      - condition: template
        value_template: '{{states.sensor.unraid_ipv6_address.state != "None"}}'
      - condition: template
        value_template: '{{states.sensor.unraid_ipv6_address.state != "unavailable"}}'
      - condition: template
        value_template: '{{states.sensor.godaddy_aaaa_record.state != "unavailable"}}'

action:
  - service: notify.something #通知组件,不需要请删除整个notify模块,下略
    data:
      title: Unraid IPv6 地址有变动
      message: |
        本地 IPv6 地址:{{states.sensor.unraid_ipv6_address.state}}
        GoDaddy AAAA Record:{{states.sensor.godaddy_aaaa_record.state}}
        正在提交 DDNS 请求
  - service: rest_command.godaddy_ddns_at
    data:
      unraid_ipv6_address: '{{states.sensor.unraid_ipv6_address.state}}' #此处对上面命名的变量进行赋值
  - service: rest_command.godaddy_ddns_any
    data:
      unraid_ipv6_address: '{{states.sensor.unraid_ipv6_address.state}}'
  - wait_template: >-
      {{states.sensor.unraid_ipv6_address.state ==
      states.sensor.godaddy_aaaa_record.state}}
  - service: notify.something #通知组件,不需要请删除整个notify模块
    data:
      message: 'Godaddy DNS AAAA Record 已更新为 {{states.sensor.godaddy_aaaa_record.state}}'
mode: single

顺便吐槽

Caddy2真是太难用了 吐了 怀念Caddy1





回复

使用道具 举报

21

主题

188

帖子

1481

积分

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1288
HASS币
60
 楼主| 发表于 2020-10-31 10:43:19 | 显示全部楼层
新的markdown代码块配色太难阅读了吧!
回复

使用道具 举报

8

主题

158

帖子

1189

积分

金牌会员

Rank: 6Rank: 6

积分
1189
金钱
1031
HASS币
0
发表于 2021-7-28 16:38:03 | 显示全部楼层
由于经常出差,我装了home assistant的树莓派4只能通过wifi连接手机分享的热点。一直想通过ipv6让外网能访问home assisrant,不过不知道怎么操作。看您的帖子是直接配置yaml文件就可以吗?阿里云或者腾讯云是否也可以实现呢。只在腾讯云上买了便宜的域名。
回复

使用道具 举报

21

主题

188

帖子

1481

积分

金牌会员

Rank: 6Rank: 6

积分
1481
金钱
1288
HASS币
60
 楼主| 发表于 2021-8-4 10:57:47 | 显示全部楼层
bluebaby 发表于 2021-7-28 16:38
由于经常出差,我装了home assistant的树莓派4只能通过wifi连接手机分享的热点。一直想通过ipv6让外网能访 ...

我的路由器为NAS分配的IPV6地址是公网地址,手机热点是否会为子网设备分配V6地址,分配的地址是内网还是公网,这些需要你自己测试清楚。
我的这个自动化脚本,实现的是将NAS本机的IPV6地址提交到Godaddy DNS服务。腾讯云购买的域名如果需要使用Godaddy DNS服务,需要在腾讯云上更改该域名Nameserver,也需要注册Godaddy的账号,做相应的配置。
回复

使用道具 举报

8

主题

158

帖子

1189

积分

金牌会员

Rank: 6Rank: 6

积分
1189
金钱
1031
HASS币
0
发表于 2021-8-4 12:00:57 | 显示全部楼层
chiunownow 发表于 2021-8-4 10:57
我的路由器为NAS分配的IPV6地址是公网地址,手机热点是否会为子网设备分配V6地址,分配的地址是内网还是 ...

谢谢朋友,我已经测试了可以分配到ipv6,也能解析并且外网访问。不过没法自动更新地址,ip变了之后解析就失效了。装了ddns插件也获取不到和更新ipv6地址,您这个要是支持腾讯云或者阿里云就好了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 11:12 , Processed in 1.164147 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表