利用PC/服务器进行IPV6的DDNS

该方法适用于各种家庭有机器,没有V4却有V6公网的伙伴。 部署一些业务,需要放行DDNS动态域名绑定IPV6的用户。

本教程因IPV6特性,哪个机器需要部署业务或开服,则需要在哪个机器部署。

前置工作

  1. 注册腾讯云DNSPod后,接入一个域名,这里域名举例:example.com

  2. 解析一个子域名,例如v6,完整子域名为:v6.example.com

  3. 随便解析一个ip image.png

    这里举例一个8B06:C04E:46BD:7060:16BB:80A3:A398:DCF9

  4. 打开DNSPod面板,选择我的账号,选择API密钥
    image.png

  5. 选择创建密钥,并且记录下密钥IDToKen(这个生成后就不能看,只能重新新建)
    image.png


Ubuntu / Linux

  1. 随便在一个目录,新建DDNSV6.sh,并且vim/nano 编辑
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

# Set the variables
TOKEN="ID,TOKEN"
DOMAIN="example.com"
SUB_DOMAIN="v6"
RECORD_LINE="默认"

# Get the current public IPv6 address
IPV6=$(curl -s https://v6.ident.me)

# Get the list of records
RESULT=$(curl -s -L -X POST "https://dnsapi.cn/Record.List" \
-d "login_token=$TOKEN&format=json&domain=$DOMAIN")

# Find the record ID
RECORD_ID=$(echo $RESULT | jq -r --arg SUB_DOMAIN "$SUB_DOMAIN" '.records[] | select(.name == $SUB_DOMAIN) | .id')

# Update the DNS record
RESULT=$(curl -s -X POST "https://dnsapi.cn/Record.Modify" \
-d "login_token=$TOKEN&format=json&domain=$DOMAIN&sub_domain=$SUB_DOMAIN&record_id=$RECORD_ID&record_line=$RECORD_LINE&value=$IPV6&record_type=AAAA")

# Check the result
if [[ $(echo $RESULT | jq -r '.status.code') == "1" ]]; then
echo "DDNS update successful"
echo $RESULT
else
echo "DDNS update failed"
echo $RESULT
fi
  • 这里的token=以ID,Token的形式填入。例如:123456,abcdefg1234567890
  • 运行ssh以后,确认DNSPod的V6解析处,记录值显示你目前的IPV6则大功告成!
  • 完成以上步骤后,即可使用RCON进行十分钟每次的定时post给DNSPod,则可以使用域名访问 你的ubuntu/linux啦!

Windows

  1. 前置准备:jq.exe(百度随便下,很轻量),windows 1803或以上,或自己安装curl(1803后面集成curl)
  2. 随便在一个目录新建DDNSV6.bat,并且以记事本/VSC打开
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
@echo off
set TOKEN=ID,TOKEN
set DOMAIN=example.com
set SUB_DOMAIN=v6
set RECORD_LINE=默认

REM Get the current public IPv6 address
for /f %%i in ('curl -s https://v6.ident.me') do set IPV6=%%i

REM Get the list of records
for /f "tokens=*" %%a in ('curl -s -L -X POST "https://dnsapi.cn/Record.List" -d "login_token=%TOKEN%&format=json&domain=%DOMAIN%"') do (
set "RESULT=%%a"
)

REM Find the record ID
for /f "tokens=2 delims=:,}" %%b in ('echo %RESULT% ^| jq.exe -r --arg SUB_DOMAIN "%SUB_DOMAIN%" ".records[] | select(.name == $SUB_DOMAIN) | .id"') do (
set "RECORD_ID=%%b"
)

REM Update the DNS record
for /f "tokens=*" %%c in ('curl -s -X POST "https://dnsapi.cn/Record.Modify" -d "login_token=%TOKEN%&format=json&domain=%DOMAIN%&sub_domain=%SUB_DOMAIN%&record_id=%RECORD_ID%&record_line=%RECORD_LINE%&value=%IPV6%&record_type=AAAA"') do (
set "RESULT=%%c"
)

REM Check the result
for /f "tokens=2 delims=:,}" %%d in ('echo %RESULT% ^| jq.exe -r ".status.code"') do (
set "STATUS_CODE=%%d"
)

if "%STATUS_CODE%"=="1" (
echo DDNS update successful
echo %RESULT%
) else (
echo DDNS update failed
echo %RESULT%
)

或者ps1结尾只需要jq运行,ps1权限得自行百度解开:

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
# Set the variables
$TOKEN = "ID,TOKEN"
$DOMAIN = "example.com"
$SUB_DOMAIN = "v6"
$RECORD_LINE = "默认"

# Get the current public IPv6 address
$IPV6 = (Invoke-WebRequest -Uri "https://v6.ident.me").Content.Trim()

# Get the list of records
$RESULT = Invoke-WebRequest -Uri "https://dnsapi.cn/Record.List" -Method POST -Body @{
"login_token" = $TOKEN
"format" = "json"
"domain" = $DOMAIN
} | ConvertFrom-Json

# Find the record ID
$RECORD_ID = ($RESULT.records | Where-Object { $_.name -eq $SUB_DOMAIN }).id

# Update the DNS record
$RESULT = Invoke-WebRequest -Uri "https://dnsapi.cn/Record.Modify" -Method POST -Body @{
"login_token" = $TOKEN
"format" = "json"
"domain" = $DOMAIN
"sub_domain" = $SUB_DOMAIN
"record_id" = $RECORD_ID
"record_line" = $RECORD_LINE
"value" = $IPV6
"record_type" = "AAAA"
} | ConvertFrom-Json

# Check the result
if ($RESULT.status.code -eq "1") {
Write-Host "DDNS update successful"
Write-Output $RESULT
} else {
Write-Host "DDNS update failed"
Write-Output $RESULT
}

  • 这里的token=以ID,Token的形式填入。例如:123456,abcdefg1234567890
  • 运行ssh以后,确认DNSPod的V6解析处,记录值显示你目前的IPV6则大功告成!
  • 完成以上步骤后,即可使用任务计划程序进行十分钟每次的定时post给DNSPod,则可以使用**域名访问 你的Windows啦!
    image.png
  • 使用任务计划程序进行每10分钟放行设备动态IPV6到路由器

  1. 打开“开始”菜单,搜索并打开“任务计划程序”。
  2. 在右侧操作窗格中,单击“创建基本任务”。
  3. 在“名称”字段中输入任务的名称,例如“运行脚本”,然后单击“下一步”。
  4. 选择“每天”,然后单击“下一步”。
  5. 在“开始”字段中选择任务的开始时间,然后将“重复任务间隔”设置为“10 分钟”,将“持续时间”设置为“无限期”,然后单击“下一步”。
  6. 选择“启动程序”,然后单击“下一步”。
  7. 在“程序或脚本”字段中,浏览并选择您的 .bat​ 文件。在“启动于(可选)”字段中,输入脚本所在目录的路径,然后单击“下一步”。
  8. 检查设置是否正确,然后单击“完成”。
  • 现在,您的 .bat​ 文件将每 10 分钟运行一次。您可以随时返回任务计划程序来修改或删除此任务。

该方法适用于需要用动态公网ipv6连接的Windows设备上:开游戏服务器如mc等、网站服务、私人网盘等等用处。

以上教程完成以后,在浏览器输入自己的域名,例如域名:端口​ 即可成功访问

首先先fuck一下不够V4公网地址与公网收费后的运营商,让大伙那么麻烦。

如果是小米路由器,或者别的拥有SSH权限但刷不了openwrt的用户,需要动态放行v6路由防火墙来完成预期可以跳转另外一个教程