前言
书接上回,ipv6能实现远程访问了,但地址太长且地址不固定,本来打算用华硕路由器自带的DDNS,试了一下发现好像不支持ipv6的,查了下官网,发现固件版本:3.0.0.4.386.46061后才支持ipv6 DDNS,然后我打算升级固件,发现我的RT-ACRH17无法升级(可能华硕觉得穷比不配吧)。现在只能用外部的域名解析了,正好之前接触过阿里云域名解析,打算使用阿里的域名解析+Python脚本实现DDNS。
1.设置阿里云解析DNS
1.1购买域名
通过阿里云控制台,进入域名买卖界面,按照需求筛选你想要的域名,注意:购买域名需要上传身份信息,实名认证。
1.2设置云解析DNS
通过控制台,进入”云解析DNS“—”解析设置“—”添加记录“,你就可以手动添加域名解析了,这里不用手动添加,我们后续通过脚本或者软路由添加。
1.3 获取Accesskey ID与Secret
鼠标悬浮头像,点击:”AccessKey管理“
这里你可以选择:”子账号accesskey”通过设置细分权限来增加安全性,这里我图省事选择所有执行权限的AccessKey
点击左上角:创建AccessKey,通过安全验证后,你就获取到一个AccessKey ID和Secret。注意:保存好这个!
2.Python脚本
大体思路就是通过IP.SB的url返回值获取到当前设备的外网地址,而ipv6地址就是设备自身ip,再通过阿里云的DNS的api接口去自动更新域名解析记录。
# -*- coding: utf-8 -*-
from urllib.request import urlopen
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_alidns20150109 import models as alidns_20150109_models
from alibabacloud_alidns20150109.client import Client as Alidns20150109Client
# 使用IP.SB的接口获取ipv6地址
ip = urlopen('https://api-ipv6.ip.sb/ip').read()
ipv6 = str(ip, encoding='utf-8')
print("获取到IPv6地址:%s" % ipv6)
# 需要解析的域名
sub_domain_name = '你的域名'
def create_client(access_key_id: str, access_key_secret: str, ) -> Alidns20150109Client:
"""
使用AK&SK初始化账号Client
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
# 您的AccessKey ID,
access_key_id=access_key_id,
# 您的AccessKey Secret,
access_key_secret=access_key_secret
)
# 访问的域名节点,固定配置无需调整
config.endpoint = f'alidns.cn-hangzhou.aliyuncs.com'
return Alidns20150109Client(config)
# 传入参数:access_key_id,access_key_secret
client = create_client('你的access_key_id', '你的access_key_secret')
def query_subdomain_records():
"""查询当前的域名解析结果"""
describe_sub_domain_records_request = alidns_20150109_models.DescribeSubDomainRecordsRequest(
sub_domain=sub_domain_name)
domain_search_result = client.describe_sub_domain_records(describe_sub_domain_records_request)
domain_list = domain_search_result.body.domain_records.record[0]
return domain_list
def update_subdomain_records():
"""更新域名解析:通过ip.sb拿到的地址与阿里云解析的地址进行对比,若发生变化则update域名解析记录"""
if ipv6.strip() == query_subdomain_records().value.strip():
print("ipv6地址未发生变化")
else:
update_domain_record_request = alidns_20150109_models.UpdateDomainRecordRequest(
record_id=query_subdomain_records().record_id,
rr=query_subdomain_records().rr,
type=query_subdomain_records().type,
value=ipv6
)
client.update_domain_record(update_domain_record_request)
if __name__ == '__main__':
query_subdomain_records()
update_subdomain_records()
3.iKuai 软路由
搜索资料的时候发现ikuai软路由支持阿里的DDNS,且支持ESXI安装,这不巧了,果断使用软路由。但发现服务器的网卡少了,斥巨资(150大洋)买了块双千兆网口的Intel82576,购买时询问卖家是否支持Esxi,或者通过https://www.vmware.com/resources/compatibility/search.php 查看是否支持。
3.1安装ikuai
这里注意下提前将网口直通给到ikuai虚拟机,下图网卡默认是禁用状态,选择直通后,重新引导Esxi即可变为活动.
其他的安装步骤于创建虚机并无太大差异,选择“添加其他设备”—“Pcie设备”,即添加网卡。
3.2设置ikuai初始化参数
按照“设置网卡绑定”—“设置lan/wan地址”的顺序,设置好端口绑定关系,其中lan1口地址为网关地址,wan口地址无需设置,通过后续PPPoE拨号获得。通过设置的lan1地址+端口号访问iKuai管理界面。
3.3 配置iKuai
设置路由模式:选择“系统设置”—“基础设置”,上网模式改为:路由模式,链路模式:主干模式。
设置PPPoE拨号:选择“网络设置”—“内外网设置”—“wan1”,填入拨号方式、账号、密码即可
设置DHCP服务:选择“网络设置”—“DHCP设置”—“DHCP服务端”—“添加”,客户端地址为lan1地址同网段即可,网关选择lan1地址。
设置ipv6:选择“网络设置”—“IPv6”—“IPv6设置”—“外网配置”—“编辑”,勾选ipv6开启,即可
3.4 配置DDNS
设置动态域名:选择“高级应用”—“动态域名”—“添加”;
服务商:aliyun.com
域名:你购买的域名下的二级域名
主域名:你购买的域名
Access Key ID和Access Key Secret:前面保存的阿里云api授权账号、密码。
解析设置:选择MAC地址或者DUID(DHCPv6全局唯一标识符),可以通过DHCP终端列表获取到
记录类型:AAAA(ipv6)
配置完成后,你将看到“更新结果:成功”,此时你就可以通过域名进行访问了!
至此,有线设备可以通过ikuai的直通lan口进行互联网访问,而无线则可以通过软路由+无线AP形式访问互联网。
4.配置无线路由器
通过ikuai软路由进行拨号后,无线路由器不再需要路由功能,我们通过修改工作模式为ap,即可实现手机,笔记本电脑等无线终端通过无线访问。下面以华硕路由器为例:
4.1 修改工作模式为AP
4.2 选择自动获取内网ip地址
勾选自动获取后,可能导致你无法获取到正确的路由器管理地址,可以通过在终端安装ASUS Device Discovery程序扫描无线获取管理地址,详情见:https://www.asus.com.cn/support/FAQ/1037094