借助ipv6远程连接电脑/自建服务器
目前ipv6已经逐渐普及,除了个别运营商(中国移动)禁用ipv6外,其他的运营商都支持了,好像移动也不是完全不能用,只是无法开端口提供服务,但是去访问别人的ipv6的服务还是可以的。首先很重要的一点,使用ipv6可以全国直连,就是所谓的公网ip,再ipv6时代的免费公网ip终于可以实现了。那么本章将一步步讲一下如何借助ipv6远程连接电脑/自建服务器。
测试ipv6是否可用
现在一般家庭宽带的光猫都支持ipv6,但有些光猫的路由模式没有开启ipv6,这时候可以通过管理员账号开启或改为桥接模式。如果是使用桥接模式的话,需要连接一个支持ipv6的路由器。然后我们可以测试一下ipv6的连通性。
命令行输入ipconfig如果出现如下,有如非fe80开头的ipv6地址就是获取到ipv6公网地址了。

关闭电脑的防火墙,或者配置端口放行起个服务,然后在手机上用流量访问如http://[240e:89a:265:555:a3:7:c79d:89]:8080,不出意外的话应该是能访问到的
设置ddns
虽然我们能获取到ipv6公网地址了,但是目前ipv6是每隔一段时间前缀是动态变化的,前缀一般是前64位,如果要固定的估计要交钱😀,所以我们要买个域名去动态解析这个ip,哥们用的方案就是在阿里云买个域名,然后在阿里云申请一个云解析的服务,然后通过python脚本调用阿里云api去动态绑定获取到的ipv6。代码如下,在运行代码之前安装阿里云的sdk
pip install aliyun-python-sdk-core
pip install aliyun-python-sdk-alidns
# coding:utf-8
from aliyunsdkcore import client
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest, UpdateDomainRecordRequest
import json
import re
import subprocess
import time
# 创建的 AccessKey
ID = "**************"
Secret = "***********"
# 默认
RegionId = "cn-hangzhou"
# 你的域名
DomainName = "xxx.top"
# 你想解析的二级域名,是一个列表,可以写多个
HostNameList = ['xx']
# 默认
Types = "AAAA"
clt = client.AcsClient(ID, Secret, RegionId)
def flashDnsJob():
# 动态获取当前对外的公网 IP
def GetLocalIP():
#如果是Linux的获取使用这个命令 ip route get 2400:3200::1
cmd = "powershell -Command Test-NetConnection -ComputerName 2400:3200::1 -InformationLevel Detailed"
cmdList = cmd.split(" ")
result = subprocess.run(cmdList, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
regexp = r"(?<=SourceAddresss{10}:s)[a-z0-9:]*"
ip = re.search(regexp, result.stdout.decode("gbk"))
return ip.group()
# 更新域名 IP
def EditDomainRecord(HostName, RecordId, Types, IP):
UpdateDomainRecord = UpdateDomainRecordRequest.UpdateDomainRecordRequest()
UpdateDomainRecord.set_accept_format('json')
UpdateDomainRecord.set_RecordId(RecordId)
UpdateDomainRecord.set_RR(HostName)
UpdateDomainRecord.set_Type(Types)
UpdateDomainRecord.set_TTL('600')
UpdateDomainRecord.set_Value(IP)
UpdateDomainRecordJson = json.loads(
clt.do_action_with_exception(UpdateDomainRecord))
print(IP, end=" ")
# 获取域名信息
def GetAllDomainRecords(DomainName, Types, IP):
DomainRecords = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
DomainRecords.set_accept_format('json')
DomainRecords.set_DomainName(DomainName)
DomainRecordsJson = json.loads(clt.do_action_with_exception(DomainRecords))
changed = False
for HostName in HostNameList:
for x in DomainRecordsJson['DomainRecords']['Record']:
oldIP = x['Value']
RR = x['RR']
Type = x['Type']
if RR == HostName and Type == Types:
print(oldIP, end=" => ")
if oldIP != IP:
RecordId = x['RecordId']
EditDomainRecord(HostName, RecordId, Types, IP)
changed = True
if not changed:
print("NO_MODIFICATION", end=" ")
IP = GetLocalIP()
print("["+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+"]",end=" ")
GetAllDomainRecords(DomainName, Types, IP)
print()
if __name__ == '__main__':
flashDnsJob()
接着如果是在Windows可以插件任务计划设置开机之后每几分钟执行一次,在ipv6变化时重新绑定到域名上,如果是Linux的话,可以设置cron任务
完成这些工作之后,你应该就可以通过域名在全国范围内访问你的主机了。
远程开机
有时候并不想一直开着电脑,如果不一直用的话,可能就比较费电,这时候我们可以自己搭建一个常驻的远程开机设备。哥们用的方案是树莓派,当然如果兄弟跟哥们一样抠门的话,可以将不用的旧手机改造成Linux服务器(可选择termux或LinuxDeploy,root推荐使用magisk),这两种设备耗电量都比较小,最多10几瓦,跟路由器差不多,一个月也用不了几度电。
假设现在你已经准备好了树莓派或者就绪的手机,那么可以使用如下命令将接收到的外网发来的幻数据开机包广播到内网,不出意外的话,幻数据包中包含的mac地址指定的电脑就会被唤醒开机。
socat UDP6-LISTEN:9988,reuseaddr,fork UDP4-DATAGRAM:255.255.255.255:9,broadcast
这个命令的含义是监听ipv6 9988端口上的udp数据,接收到之后广播到局域网所有主机上的端口9
如此设置好之后,可以在手机上安装局域网唤醒工具在有需要时唤醒远程电脑,哥们安装的是这个软件

添加一个wan开机项如下设置

其中mac填写你要唤醒的电脑的以太网卡mac地址,route ip填写上面说的你准备好的树莓派或手机的ip,port就是刚才说的监听幻数据包的9988端口,status check ip填写你的被唤醒的电脑的ip,app会通过ping检查你的电脑是否已经被唤醒,这个状态可能会有延迟,因为每次开机之后ipv6前缀可能会变,虽然能在开机的时候就可以通过阿里云api刷新ipv6,但是免费版的阿里云解析服务,最快也要10分钟刷新解析ipv6数据。
ok,通过以上的操作,哥们应该已经学会怎样使用ipv6远程连接电脑/自建服务器了。文章写得比较简略,如果兄弟有疑问的话可以随时跟哥们交流,thx~








