使用IPv6 DDNS访问家庭内网服务

前言

随着IPV4地址的枯竭,向运营商申请使用IPV4已经成为一种奢望,但是随着IPV6的普及,相当于每台设备都分配了一个IPV6地址,通过IPV6访问也就顺理成章。

环境和准备

运营商光猫使用超级密码登录

光猫需要改成桥接模式,使用路由器PPPoE拨号才能正确获取IPV6地址,以移动吉比特 H5-8光猫为例(移动吉比特系列光猫均可参考)。

首先使用光猫背面信息,登录普通用户管理界面。再修改浏览器地址,访问:http://192.168.1.1/usr=CMCCAdmin&psw=aDm8H%25MdA&cmd=1&telnet.gch,浏览器会显示 Success。

此时使用 telnet 登录光猫,用户名为 CMCCAdmin,密码为 aDm8H%MdA。

登录光猫以后,虽然我们还是没有办法获得超级密码,但是我们可以修改超级密码:

修改超级密码为 admin
sidbg 1 DB set DevAuthInfo 0 Pass admin
保存设置
sidbg 1 DB save

此时再回到光猫登录页面,使用用户名 CMCCAdmin 与密码 admin 即可登录管理员账户。

修改模式改为桥接模式

连接名称4那个配置,直接修改为桥模式,端口选1口,其他口可以按需选,注意不要覆盖了IPTV的

其他设置不需要修改,这里需要获取宽带账号密码,用户名一般是手机号+139.gd,密码可以通过移动客户端修改(点右上角10086客服,输入修改宽带密码,会弹出对应入口),获取后填上保存即可

在路由器中修改为PPPoe拨号模式,输入账号密码即可。

新建和绑定DDNS

注册IPv6的DDNS服务商

推荐使用dynv6,使用邮箱注册后,新建区域,可以选择网页自带域名,如果自己有域名,也可以绑定

注意,使用子域名并不能通过路由器或者脚本更新记录,网站api暂时不支持,如果要使用子域名,那么只能先手动更新

这里我计划绑定两个域名,一个是访问路由器,一个是使用rdp访问windows。

使用openwrt建立ddns

在openwrt界面安装luci-app-ddns软件,安装完毕后,在服务那里可以看到ddns服务,新建一个服务

填上域名,密码登信息,密码在dynv6网页上找到

选择IP地址来源,其他可以按需配置

windows下使用脚本更新ddns

1
2
3
4
5
6
7
8
@ECHO off
SET zone=xxx(域名)
SET token=xxxxx(密码)
SET urlv4=https://ipv4.dynv6.com/api/update?ipv4=auto
SET urlv6=https://ipv6.dynv6.com/api/update?ipv6=auto

ECHO Updating IPv6
curl "%urlv6%&zone=%zone%&token=%token%"

然后计划任务执行即可

Linux下使用脚本更新ddns

官网提供linux更新脚本:https://dynv6.com/docs/apis

新建dynv6.sh,复制到里面,官方提供的方法需要输入token和host参数,故修改下原脚本即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/sh -e
hostname='yourhost.dns.army'
token='SKkEjQHmFAP2NzuxXP_dr1uXMG5HhG'
device=$2
file=$HOME/.dynv6.addr6
[ -e $file ] && old=`cat $file`

#if [ -z "$hostname" -o -z "$token" ]; then
# echo "Usage: token=<your-authentication-token> [netmask=64] $0 your-name.dynv6.net [device]"
# exit 1
#fi

if [ -z "$netmask" ]; then
netmask=128
fi

if [ -n "$device" ]; then
device="dev $device"
fi
address=$(ip -6 addr list scope global $device | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p' | head -n 1)

if [ -e /usr/bin/curl ]; then
bin="curl -fsS"
elif [ -e /usr/bin/wget ]; then
bin="wget -O-"
else
echo "neither curl nor wget found"
exit 1
fi

if [ -z "$address" ]; then
echo "no IPv6 address found"
exit 1
fi

# address with netmask
current=$address/$netmask

if [ "$old" = "$current" ]; then
echo "IPv6 address unchanged"
exit
fi

# send addresses to dynv6
$bin "http://dynv6.com/api/update?hostname=$hostname&ipv6=$current&token=$token"
#$bin "http://ipv4.dynv6.com/api/update?hostname=$hostname&ipv4=auto&token=$token"

# save current address
echo $current > $file

直接赋值给token和host参数,注释掉检查条件和ipv4

添加crontab任务运行即可

分享到