Namesilo 的 DDNS - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
dynaguy
V2EX    Linux

Namesilo 的 DDNS

  •  
  •   dynaguy 2016-04-26 04:33:38 +08:00 12079 次点击
    这是一个创建于 3529 天前的主题,其中的信息可能已经有所发展或是发生改变。

    家里的公网 IP 地址有时会变化,这使得我的某些依赖域名的服务(网站, VPN , rsync 备份等)随之陷入瘫痪。原来我是在我的路由器上用免费的 DDNS 功能,但这种免费服务一般不能使用自己的域名,又或者必须将域名迁移到 DDNS 的服务商那里。总之很是不爽。

    在 V2EX 看到很多人推荐,我把域名也转到了 Namesilo 。 (拜拜了,狗带!) Namesilo 不仅价格合理,而且我发现竟然还有 API 接口支持!惊喜之后上网搜索有关 Namesilo 的 DDNS 方案,不料大失所望!只发现有在 WINDOWS 的 POWERSHELL 下的一个方案。

    好吧,那就自己动手解决吧。

    #!/bin/bash ##Domain name: DOMAIN="mydomain.tld" ##Host name. ##If you want manage host "myhost.mydomain.tld", then HOST="myhost" ##APIKEY obtained from Namesilo: APIKEY="c40031261ee449037a4b4" ##Saved history pubic IP from last check IP_FILE="/var/log/MyPubIP" ##Get the current public IP CUR_IP=$(curl -s http://icanhazip.com) ##Exit if curl failed if [ $? -ne 0 ]; then exit 1 fi ##Check file for previous IP address if [ -f $IP_FILE ]; then KNOWN_IP=$(cat $IP_FILE) else KNOWN_IP= fi ##See if the IP has changed if [ "$CUR_IP" != "$KNOWN_IP" ]; then echo $CUR_IP > $IP_FILE logger -t IP.Check -- Public IP changed to $CUR_IP ##Update DNS record in Namesilo: curl -s "https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=$APIKEY&domain=$DOMAIN" > $DOMAIN.xml RECORD_ID=`xmllint --xpath "//namesilo/reply/resource_record/record_id[../host/text() = '$HOST.$DOMAIN' ]" $DOMAIN.xml | grep -oP '(?<=<record_id>).*?(?=</record_id>)'` curl -s "https://www.namesilo.com/api/dnsUpdateRecord?version=1&type=xml&key=$APIKEY&domain=$DOMAIN&rrid=$RECORD_ID&rrhost=$HOST&rrvalue=$CUR_IP&rrttl=7207" else logger -t IP.Check -- NO IP change fi exit 0 

    详情: http://blog.pztop.com/2016/04/25/Namesilo-with-DDNS/

    第 1 条附言    2016-11-30 02:07:37 +08:00
    23 条回复    2018-01-17 11:32:31 +08:00
    kuxiazi
        1
    kuxiazi  
       2016-04-26 06:30:45 +08:00 via Android
    域名在 dnspod 解析的 就用的 dnspod
    dynaguy
        2
    dynaguy  
    OP
       2016-04-26 06:33:51 +08:00
    @kuxiazi 墙里边的 DNS ,还是算了吧~~
    kuxiazi
        3
    kuxiazi  
       2016-04-26 06:37:43 +08:00
    @dynaguy 墙外的慢
    Tink
        4
    Tink  
    PRO
       2016-04-26 07:44:20 +08:00 via iPhone
    这样解析不慢吗?
    c3538378
        5
    c3538378  
    nbsp;  2016-04-26 07:59:22 +08:00
    大哥, DDNS provider 不提供自己的域名是吧?你 cname 一下不就完事了!
    kuxiazi
        6
    kuxiazi  
       2016-04-26 08:06:07 +08:00 via Android
    @c3538378 之前我就是这样用花生壳的 后来换的路由器固件自带 dnspod 的脚本 就直接用了 反正域名也在那
    miaomiao888
        7
    miaomiao888  
       2016-04-26 08:21:43 +08:00
    changeip.com 的可以,然后用自己的域名 CNAME 一下 OK ,秒解析
    mjever
        8
    mjever  
       2016-04-26 08:50:13 +08:00
    namecheap 的 DDNS 免费还支持自己的域名,用了很久了!
    dynaguy
        9
    dynaguy  
    OP
       2016-04-26 11:11:11 +08:00
    楼上各位用 CNAME 的,那不是多了一层解析吗?
    EPr2hh6LADQWqRVH
        10
    EPr2hh6LADQWqRVH  
       2016-04-26 11:15:14 +08:00
    我不明白为什么这么麻烦。。。
    我是 openwrt 上跑 He.net 的 DDNS 服务,自己域名切了一个子域给 he 那边的 DNS ,
    然后自己其他域名再 CNAME 上去。
    非常顺滑
    dynaguy
        11
    dynaguy  
    OP
       2016-04-26 11:17:01 +08:00
    @miaomiao888 既然 changeip 的 DDNS 服务是免费的,竟然还要信用卡信息,呵呵了!
    cxh116
        12
    cxh116  
       2016-04-26 11:34:56 +08:00
    dnspod 有接口,目前自己是用 dnspod 的接口每小时更新一下. 直接用 wget 命令

    需要提前调用接口获取到 domain_id record_id

    wget -O /tmp/ddns.log --post-data 'login_token=id,token&format=json&domain_id=111&record_id=111&record_line=默认&sub_domain=openwrt' https://dnsapi.cn/Record.Ddns
    lwd2136
        13
    lwd2136  
       2016-11-29 23:20:20 +08:00
    一直错误 108...
    dynaguy
        14
    dynaguy  
    OP
       2016-11-30 02:06:04 +08:00
    @lwd2136
    108 在那个地方出现的?
    用"bash -x yourscript.sh" 看一下。
    lwd2136
        15
    lwd2136  
       2016-11-30 09:05:31 +08:00
    @dynaguy 隐去了些特定信息
    + DOMAIN=abc.com
    + HOST=edgeos
    + APIKEY=123
    + IP_FILE=/var/log/MyPubIP
    + RESPOnSE=/tmp/namesilo_response.xml
    ++ curl -s http://icanhazip.com
    + CUR_IP=223.5.5.5
    + '[' 0 -ne 0 ']'
    + '[' -f /var/log/MyPubIP ']'
    + KNOWN_IP=
    + '[' 223.5.5.5 '!=' '' ']'
    + echo 223.5.5.5
    + logger -t IP.Check -- Public IP changed to 223.5.5.5
    + curl -s 'https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=a123&domain=abc.com'
    ++ xmllint --xpath '//namesilo/reply/resource_record/record_id[../host/text() = '\''edgeos.abc.com'\'' ]' abc.com.xml
    ++ grep -o '(?<=<record_id>).*?(?=</record_id>)'
    + RECORD_ID=
    + curl -s 'https://www.namesilo.com/api/dnsUpdateRecord?version=""
    ++ xmllint --xpath '//namesilo/reply/code/text()' /tmp/namesilo_response.xml
    + RESPONSE_CODE=108
    + case $RESPONSE_CODE in
    + logger -t IP.Check -- DDNS update 'failed!'
    + exit 0
    dynaguy
        16
    dynaguy  
    OP
       2016-11-30 12:23:46 +08:00
    @lwd2136
    貌似你在第一个 curl 没有拿到 RECORD_ID.

    你有
    + curl -s 'https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=a123&domain=abc.com'
    这里为啥 key=a123, 而前面 APIKEY=123
    lwd2136
        17
    lwd2136  
       2016-11-30 15:35:39 +08:00
    @dynaguy 后面那个是一致的,我只是抹掉 apikey 没抹干净
    我也看到似乎是 record_ID 没有拿到 但是没有搞定怎么解决
    dynaguy
        18
    dynaguy  
    OP
       2016-12-01 00:55:04 +08:00
    @lwd2136
    那你手动运行一下那个 curl 命令,看看有没有拿到 xml 文件反馈:
    curl -s 'https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=a123&domain=abc.com'

    将 key 和 domain 替换成你自己的。

    如果你没有得到 xml 文件,那你的APIKEY有问题。
    dynaguy
        19
    dynaguy  
    OP
       2016-12-01 01:02:21 +08:00
    像这样(只贴了开头一小部分):
    curl "https://www.namesilo.com/api/dnsListRecords?version=1&type=xml&key=441ff78e1271520db34e2&domain=pztop.com"
    <?xml version="1.0"?>
    <namesilo><request><operation>dnsListRecords</operation><ip>205.205.98.198</ip></request><reply><code>300</code><detail>success</detail><resource_record><record_id>145fadda5adefaf71fb082ddbab7c568</record_id>....
    lwd2136
        20
    lwd2136  
       2016-12-01 08:42:00 +08:00
    @dynaguy 拿到了 没有问题
    <code>300</code><detail>success</detail>
    lwd2136
        21
    lwd2136  
       2016-12-01 09:59:46 +08:00
    @dynaguy 谢谢 最后搞定了,原系统 grep 命令有问题,我改过参数,修改回来就好了
    Remember
        22
    Remember  
       2018-01-17 02:51:49 +08:00
    域名不在 namesilo 可以用他家解析服务吗
    dynaguy
        23
    dynaguy  
    OP
       2018-01-17 11:32:31 +08:00
    @Remember 不行
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3001 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 12:13 PVG 20:13 LAX 04:13 JFK 07:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86