你是否遇到过这些烦恼:
- 想远程访问家里的电脑,但没有公网 IP?
- 被动态 IP 折磨,每次地址都在变?
- 不想花钱买昂贵的内网穿透服务?
今天,我将教你一个完全免费的解决方案,利用 IPv6 + DDNS 实现外网访问家庭网络!
为什么选择 IPv6?
随着 IPv4 地址枯竭,很多运营商已经不提供公网 IPv4 了。但是!IPv6 地址几乎是无限的,运营商都会给你一个公网 IPv6 地址。这就是我们的机会!
准备工作
- 一台 Windows 电脑(本文以 Windows 为例)
- 支持 IPv6 的网络环境(现在基本都支持,建议光猫设置桥接,路由器拨号)
- 一个免费的 DynV6 账号
实战步骤
1. 注册 DynV6
首先访问 DynV6官网 注册账号,创建一个域名,比如 mypc.dynv6.net
。记下你的 token,后面要用。
2. 编写自动更新脚本
首先确认你用的是哪张网卡,可以通过ipconfig
命令快速查看,比如我的就是以太网 2
。
然后创建一个 PowerShell 脚本(dynv6_update.ps1)。
请注意!文件保存时必须选择编码为UTF-8 BOM!否则会乱码!
# dynv6_update.ps1
# 配置信息
$token = "你的DynV6 Token"
$hostname = "你的域名.dynv6.net"
$networkAdapterName = "以太网" # 你的网卡名称
$logFile = "C:\Scripts\dynv6_update.log"
# 日志函数
function Write-Log {
param($Message)
$logMessage = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss'): $Message"
Add-Content -Path $logFile -Value $logMessage
Write-Host $logMessage
}
# 获取IPv6地址
function Get-IPv6Address {
try {
$ipv6 = Get-NetAdapter -Name $networkAdapterName |
Get-NetIPAddress -AddressFamily IPv6 |
Where-Object {
$_.PrefixOrigin -eq "RouterAdvertisement" -and
$_.SuffixOrigin -eq "Link" -and
-not $_.IPAddress.StartsWith("fe80")
} |
Select-Object -ExpandProperty IPAddress -First 1
if ($ipv6) {
Write-Log "获取到IPv6地址: $ipv6"
return $ipv6
} else {
Write-Log "未找到有效的IPv6地址"
return $null
}
} catch {
Write-Log "获取IPv6地址时出错: $_"
return $null
}
}
# 更新DynV6记录
function Update-DynV6Record {
param($IPv6)
try {
$url = "https://dynv6.com/api/update?hostname=$hostname&ipv6=$IPv6&token=$token"
$response = Invoke-RestMethod -Uri $url -Method Get
Write-Log "DynV6更新成功: $response"
return $true
} catch {
Write-Log "DynV6更新失败: $_"
return $false
}
}
# 主循环
while ($true) {
$currentIPv6 = Get-IPv6Address
if ($currentIPv6) {
$updateResult = Update-DynV6Record -IPv6 $currentIPv6
if ($updateResult) {
Write-Log "DNS记录更新成功"
} else {
Write-Log "DNS记录更新失败"
}
}
# 等待5分钟后再次检查
Write-Log "等待300秒后进行下一次检查..."
Start-Sleep -Seconds 300
}
使用说明:
- 配置脚本:
# 修改以下变量
$token = "你的DynV6 Token"
$hostname = "你的域名.dynv6.net"
$networkAdapterName = "以太网" # 使用 Get-NetAdapter 查看网卡名称
- 创建目录和文件:
# 创建脚本目录
New-Item -ItemType Directory -Path "C:\Scripts" -Force
# 将脚本保存到该目录
- 测试运行:
# 手动运行测试
powershell -ExecutionPolicy Bypass -File C:\Scripts\dynv6_update.ps1 -Encoding UTF8
- 查看日志:
# 实时查看日志
Get-Content -Path C:\Scripts\dynv6_update.log -Wait
3. 设置自动启动
- 创建计划任务
将此脚本设置为 Windows 服务:
# install_service.ps1
# 安装 NSSM(如果还没安装)
# 使用 chocolatey 安装:choco install nssm -y
# 设置服务
$serviceName = "DynV6Update"
$scriptPath = "C:\Scripts\dynv6_update.ps1"
$powershellPath = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
# 创建服务
nssm install $serviceName $powershellPath
nssm set $serviceName AppParameters "-ExecutionPolicy Bypass -NoProfile -File `"$scriptPath`""
nssm set $serviceName DisplayName "DynV6 DNS Update Service"
nssm set $serviceName Description "自动更新DynV6的DNS记录"
nssm set $serviceName Start SERVICE_AUTO_START
# 启动服务
Start-Service $serviceName
- 设置开机自动运行
首先需要安装nssm
这个程序来快速创建服务,我们可以用win11自带的winget
来安装
winget install nssm
安装过程如下:
记得安装成功后,更新一下当前的环境变量
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
然后,Win+X(或者右键windows图标),打开终端(管理员),
然后执行:
powershell -ExecutionPolicy Bypass -File C:\Scripts\install_service.ps1 -Encoding UTF8
执行后正常会输出
Set parameter "AppParameters" for service "DynV6Update".
Set parameter "DisplayName" for service "DynV6Update".
Set parameter "Description" for service "DynV6Update".
Set parameter "Start" for service "DynV6Update".
- 检查日志
Get-Content -Path C:\Scripts\dynv6_update.log -Wait
输入后等待片刻,会看到如下输出:
- 结束
恭喜你,已经全部搞定,可以随时享受你的远程连接体验了!
见证奇迹的时刻
脚本运行后,你会看到类似这样的输出:
2025-02-12 15:05:04: 开始运行DynV6更新服务...
2025-02-12 15:05:06: 找到IPv6地址: 2001:xxxx:xxxx:xxxx:xxxx
2025-02-12 15:05:06: DNS记录更新成功!
现在,无论你在世界任何地方,只要输入你的域名,就能访问家里的电脑了!
物料下载
我把博文用到的脚本都已经上传到了csdn下载站,大家可以直接下载
下载本文脚本
进阶技巧
- 安全性提升:配置防火墙,只开放必要端口
- 可靠性保障:添加错误重试机制
- 监控告警:设置异常通知
常见问题
Q:为什么我的 IPv6 地址获取失败?
A:检查网卡名称是否正确,确保 IPv6 已启用。
Q:更新失败怎么办?
A:检查 token 是否正确,网络是否通畅。
总结
通过这个方案,你可以:
- ✅ 完全免费使用
- ✅ 自动更新 IP
- ✅ 无需特殊硬件
- ✅ 配置简单快捷
再也不用担心远程访问的问题了!快来试试吧!
写在最后
如果这篇文章对你有帮助,别忘了点赞转发!有任何问题都可以在评论区讨论。
#网络技术 #IPv6 #DDNS #远程访问 #技术教程