Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

主路由ip变更后反复在新ip和旧ip之间获取 #1107

Closed
ATFieldBeast opened this issue May 10, 2024 · 11 comments
Closed

主路由ip变更后反复在新ip和旧ip之间获取 #1107

ATFieldBeast opened this issue May 10, 2024 · 11 comments
Labels
bug Something isn't working

Comments

@ATFieldBeast
Copy link

问题描述

我的主路由ip是#531这里说所用dig获取的
dig +short aaaa *******.asuscomm.com
发现在主路由ip发生变更后会在两小时内反复的获取到新ip和旧ip,交替解析到dnspod

Snipaste_2024-05-10_08-39-48
Snipaste_2024-05-10_08-41-24

是不是ip变化后dig会有两条记录呢(当时在睡觉没有马上手动dig一下),但是为什么顺序一直在规律变化

另外有没有什么办法能在虚拟机的docker中直接获得主路由的ipv6呢,用ip neigh只有ipv4的网关地址和内网ipv6地址(而且主路由自己得到的ipv6前缀和分配下去的前缀并不一样

DNS服务商

DnsPod

是否已搜索同类问题

已搜索,但未能解决

操作系统

Linux

架构

x86_64

版本

v6.5.0

安装方式

Docker

额外信息

No response

@ATFieldBeast ATFieldBeast added the bug Something isn't working label May 10, 2024
@jeessy2
Copy link
Owner

jeessy2 commented May 10, 2024

交替变化说明dig获取的IPv6也交替变化了,需要你自己验证。

如果要获取其它设备的IPv6:

@ATFieldBeast
Copy link
Author

ATFieldBeast commented May 10, 2024

交替变化说明dig获取的IPv6也交替变化了,需要你自己验证。

如果要获取其它设备的IPv6:

这些方法好像都从局域网内拿不到主路由的wan口ip的,
我下午试了下把主路由的ssh开了,从容器里ssh进主路由,然后再ip addr那些是可以得到了,
但是在容器里执行有结果,在gui的脚本里放ssh -p xxx xxxx@ip xxx什么的会返回ssh:not found……;把命令写进sh脚本里再在gui的脚本里写/opt/xxxx.sh会返回xxxx.sh not found ……现在就不知道这最后一步在gui里怎么从ssh获得ip了

@jeessy2
Copy link
Owner

jeessy2 commented May 10, 2024

docker中不能使用ssh,没那个ssh包
可以尝试直接安装ddns-go到路由器

@ATFieldBeast
Copy link
Author

docker中不能使用ssh,没那个ssh包 可以尝试直接安装ddns-go到路由器

啊?我用命令行登陆,进到容器里面都跑通了啊,有ssh来着,就是gui执行不了

@jeessy2
Copy link
Owner

jeessy2 commented May 10, 2024

好像是安全机制,不能用脚本执行ssh。换个支持的?

@ATFieldBeast
Copy link
Author

ATFieldBeast commented May 10, 2024

好像是安全机制,不能用脚本执行ssh。换个支持的?

我是傻逼,我这个虚拟机的docker里装了ddnsgo和npm两个容器,结果下午一直在npm里面操作的,我也不知道为什么居然一直没发现,刚才吃了饭一看怎么好像不太对,真的是,怪不得gui里一直没用

我还说你怎么说镜像里没ssh呢,原来是npm那边有ssh

现在在ddnsgo里自己装了ssh之后一切正常了,gui也能正确获得主路由的wan口ip了

Snipaste_2024-05-10_20-16-24

首先要生成秘钥和主路由免密登录

gui里用的命令是
ssh -T -p XXX YYY@ZZZ < ~/sshgetip/getip.sh
XXX是ssh端口,YYY是主路由登录名,ZZZ是路由器ip

getip.sh是容器里的脚本,随便放哪,里面是ssh到路由器后执行的命令,如下

#!/bin/bash
ip -6 addr show ppp0 | grep 'inet6 240[a-f:A-F 0-9]*/64' | grep -v 'deprecated' | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | tail -1

用的就是之前大家总结的正常在本机查找的命令,ppp0要换成你的获取ipv6的网口

(终于把dig要用到华硕的服务这个故障点干掉了,能ssh到主路由的都能这样干了

@xfl12345
Copy link

好像是安全机制,不能用脚本执行ssh。换个支持的?

我是傻逼,我这个虚拟机的docker里装了ddnsgo和npm两个容器,结果下午一直在npm里面操作的,我也不知道为什么居然一直没发现,刚才吃了饭一看怎么好像不太对,真的是,怪不得gui里一直没用

我还说你怎么说镜像里没ssh呢,原来是npm那边有ssh

现在在ddnsgo里自己装了ssh之后一切正常了,gui也能正确获得主路由的wan口ip了

Snipaste_2024-05-10_20-16-24

首先要生成秘钥和主路由免密登录

gui里用的命令是 ssh -T -p XXX YYY@ZZZ < ~/sshgetip/getip.sh XXX是ssh端口,YYY是主路由登录名,ZZZ是路由器ip

getip.sh是容器里的脚本,随便放哪,里面是ssh到路由器后执行的命令,如下

#!/bin/bash
ip -6 addr show ppp0 | grep 'inet6 240[a-f:A-F 0-9]*/64' | grep -v 'deprecated' | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | tail -1

用的就是之前大家总结的正常在本机查找的命令,ppp0要换成你的获取ipv6的网口

(终于把dig要用到华硕的服务这个故障点干掉了,能ssh到主路由的都能这样干了

简化版:

echo $(ssh root@192.168.1.1 'ip -6 route get 240c::6666') | grep -oE 'src.*$' | awk {'print $2'}

@ATFieldBeast
Copy link
Author

好像是安全机制,不能用脚本执行ssh。换个支持的?

我是傻逼,我这个虚拟机的docker里装了ddnsgo和npm两个容器,结果下午一直在npm里面操作的,我也不知道为什么居然一直没发现,刚才吃了饭一看怎么好像不太对,真的是,怪不得gui里一直没用
我还说你怎么说镜像里没ssh呢,原来是npm那边有ssh
现在在ddnsgo里自己装了ssh之后一切正常了,gui也能正确获得主路由的wan口ip了
Snipaste_2024-05-10_20-16-24
首先要生成秘钥和主路由免密登录
gui里用的命令是 ssh -T -p XXX YYY@ZZZ < ~/sshgetip/getip.sh XXX是ssh端口,YYY是主路由登录名,ZZZ是路由器ip
getip.sh是容器里的脚本,随便放哪,里面是ssh到路由器后执行的命令,如下

#!/bin/bash
ip -6 addr show ppp0 | grep 'inet6 240[a-f:A-F 0-9]*/64' | grep -v 'deprecated' | awk -F '[ \t]+|/' '$3 == "::1" { next;} $3 ~ /^fe80::/ { next;} /inet6/ {print $3}' | tail -1

用的就是之前大家总结的正常在本机查找的命令,ppp0要换成你的获取ipv6的网口
(终于把dig要用到华硕的服务这个故障点干掉了,能ssh到主路由的都能这样干了

简化版:

echo $(ssh root@192.168.1.1 'ip -6 route get 240c::6666') | grep -oE 'src.*$' | awk {'print $2'}

我就是没整清楚ssh执行命令的时候“”里面还有“”怎么写,转义什么的试了还是报错,才把获取ipv6的命令放脚本里了的,没转过弯可以先不grep,得到完整的返回结果,再在本地grep这样也行(不过放脚本里在gui里看着也挺整洁就是

@yuanwenliang
Copy link

我目前的情况与你一样,也是华硕路由器,想在群晖NAS上 Docker 中跑 ddns-go,我准备用你之前 dig 方案,但是镜像中没有 dig 命令,所以想问一下您是改了 Dockerfile 重新构建了镜像不,可以分享一下 Dockerfile 不,我有 Mac 电脑,可能还涉及到交叉编译,如果不在 Mac 上编译镜像也还可以选择在NAS上编译,但是NAS还没装 make 命令,所以想问一下您的方案

@ATFieldBeast
Copy link
Author

我目前的情况与你一样,也是华硕路由器,想在群晖NAS上 Docker 中跑 ddns-go,我准备用你之前 dig 方案,但是镜像中没有 dig 命令,所以想问一下您是改了 Dockerfile 重新构建了镜像不,可以分享一下 Dockerfile 不,我有 Mac 电脑,可能还涉及到交叉编译,如果不在 Mac 上编译镜像也还可以选择在NAS上编译,但是NAS还没装 make 命令,所以想问一下您的方案

啊,我是用的docker compose,pull镜像的时候就会自动调用dockerfile来build(不过dockerfile不是用的docker build命令么,也没用make啊)
docker-compose.yml:

# version: '3.9'
services:
  ddnsGo:
    image: ddns-go:mod
    build:
      context: ../dockerfile
      dockerfile: ddnsGoMod
    container_name: ddnsGo
    restart: always
    network_mode: host
    environment:
      - TZ=Asia/Shanghai
    volumes:
      - ./ddnsGo:/root

对应调用的dockerfile:

FROM jeessy/ddns-go:latest
RUN apk update && \
    apk add --no-cache openssh

我这里是装了后面改进的ssh,要用dig换成dig就是

@yuanwenliang
Copy link

我用你这个 Dockerfile 在NAS上构建了一个镜像,已经可以用了,我选择的是你之前 dig 方案,多谢~

@jeessy2 jeessy2 closed this as completed Aug 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants