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

 找回密码
 立即注册
查看: 294|回复: 5

[技术讨论] 自动清理旧的ipv6地址

[复制链接]

5

主题

39

帖子

157

积分

注册会员

Rank: 2

积分
157
金钱
118
HASS币
0
发表于 2024-12-24 00:05:55 | 显示全部楼层 |阅读模式
本帖最后由 sanmoking 于 2024-12-24 01:48 编辑

我用的ddnsgo解析ipv6,但是一旦遇到光猫重启或者路由器重启,ha就会获取多个ipv6的地址,然后域名解析就容易出错,我把群会上用的sh脚本拿来改了改,根据ip的有效期来删除旧的ipv6:

#!/bin/bash
    echo "检查网口enp0s3"
    lan1_ipv6_addr_count=`ip -6 a s enp0s3  | grep -E -c "2408|2409|240a|240e"`
    if [[ $lan1_ipv6_addr_count = 1 || $lan1_ipv6_addr_count = 0 ]]; then
        echo "IPV6地址数量为" $lan1_ipv6_addr_count ",不进行操作"
    else
    echo "IPV6地址数量为" $lan1_ipv6_addr_count ", 开始查找"
    for i in {2..$lan1_ipv6_addr_count..1}
    do
        lan1_ipv6_addr_lastip=`ip -6 a s enp0s3  | grep -A1 'inet6 [^f:]'|grep -v ^--|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+/.+?) scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;Ta'|sort -n|head -n1|cut -d' ' -f2`
        echo "最老的IPV6地址为" $lan1_ipv6_addr_lastip ", 开始删除"
           ip -6 addr del $lan1_ipv6_addr_lastip dev enp0s3
           done
    fi
我给它放到这里【/mnt/data/supervisor/homeassistant/1234/del_old_ipv6.sh】,也就是File editor打开就看到的位置,方便用:
20241223_115625.png

然后在/homeassistant/configuration.yaml配置文件里面加了这个:
shell_command:
    del_old_ipv6: sh /mnt/data/supervisor/homeassistant/1234/del_old_ipv6.sh




我在ssh里面运行是正常的:


20241224_120529.png




然后做了个自动化:

20241224_120212.png
20241224_120222.png

alias: del old ipv6
description: ""
triggers:
  - trigger: state
    entity_id:
      - sensor.system_monitor_ipv6_address_enp0s3
    from: null
    to: null
conditions: []
actions:
  - action: shell_command.del_old_ipv6
    data: {}
mode: single
但是运行之后,日志报错,各位大佬帮忙看看是咋回事
2024-12-24 00:03:34.867 ERROR (MainThread) [homeassistant.components.shell_command] Error running command: `sh /mnt/data/supervisor/homeassistant/1234/del_old_ipv6.sh`, return code: 2
NoneType: None



回复

使用道具 举报

5

主题

39

帖子

157

积分

注册会员

Rank: 2

积分
157
金钱
118
HASS币
0
 楼主| 发表于 2024-12-24 00:08:32 | 显示全部楼层
我另外在ddnsgo里面也用了脚本获取ipv6,有时候好用有时候又不好用,头大:
ip -6 a s enp0s3|grep -A1 'inet6 [^f:]' |grep -v ^--|sed -nr ':a;N;s#^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*#\2 \1#p;Ta'|sort -nr|head -n1|cut -d' ' -f2
回复

使用道具 举报

1

主题

215

帖子

1644

积分

金牌会员

Rank: 6Rank: 6

积分
1644
金钱
1429
HASS币
0
发表于 2024-12-24 01:32:18 | 显示全部楼层
定时重启路由就好,重启系统服务
回复

使用道具 举报

2

主题

34

帖子

728

积分

高级会员

Rank: 4

积分
728
金钱
694
HASS币
0
发表于 2024-12-24 08:49:11 | 显示全部楼层
办法不错
回复

使用道具 举报

5

主题

39

帖子

157

积分

注册会员

Rank: 2

积分
157
金钱
118
HASS币
0
 楼主| 发表于 2024-12-24 22:04:01 | 显示全部楼层
是不是这么回事:ssh里面运行是正常,是因为sh脚本运行在主机层面的shell下,在自动化里面不正常是因为运行在dockers层面,我小白,大概猜着是这吧,那位大佬给个解体思路
回复

使用道具 举报

5

主题

39

帖子

157

积分

注册会员

Rank: 2

积分
157
金钱
118
HASS币
0
 楼主| 发表于 6 天前 | 显示全部楼层
本帖最后由 sanmoking 于 2025-1-15 16:20 编辑
sanmoking 发表于 2024-12-24 22:04
是不是这么回事:ssh里面运行是正常,是因为sh脚本运行在主机层面的shell下,在自动化里面不正常是因为运行 ...

问了一下deepseek:
要这样写,先搞好免密登录,
shell_command:
  del_old_ipv6: ssh -i /config/.ssh/id_rsa user@hostname /mnt/data/supervisor/homeassistant/1234/del_old_ipv6.sh


太繁琐了,免密登录懒得弄了。。。回头有时间在搞
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-1-21 18:02 , Processed in 0.081525 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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