前言
上一篇《利用闲置玩客云部署hugo静态博客系统》我们已经实现内网访问博客系统。那么如果实现互联网访问呢?这个方案由很多,比如:公网IPv4、公网IPv6、内网穿透、跨区域组网等等。除公网IPv4以外,我建议使用公网IPv6,这种方式配置和使用过程比较简单易,没啥技术门槛。具体配置参考《设置光猫路由器开启IPv6》、《玩客云armbian系统固定ipv6后半段地址》,今天继续分享我是如何通过域名访问访问家里的玩客云博客系统。
听我絮絮叨叨
通过IPv6地址+端口,我们已经可以实现随处访问,但会遇到两个麻烦事:
1)玩客云或电脑的IPv6经常变动,比如:重启路由器;运营商每周或每月会重新下发新地址(强制变更)等等。
2)IPv6地址128位,由数字+字母组成,使用时非常不方便。
那如何解决这些问题?答案就是:域名
域名的作用主要包括:
- 方便记忆与访问:域名使人们无需记住复杂的IP地址,通过直观、易于记忆的字符串来访问网站,提高了用户体验和网站的可达性。
- 品牌宣传:一个好的域名可以加强品牌形象,通过选择与品牌相关的域名,可以提高用户对品牌的认知和信任度。
- 搜索引擎优化(SEO):合适的域名有助于提高网站在搜索结果中的排名,因为域名中的关键词可以增加网站在搜索引擎中的曝光度。
- 提升用户体验:域名可以直接反映网站的性质和内容,帮助用户准确地找到所需信息。
- 方便记忆与重复访问:简短、易拼写的域名提高了用户对网站的记忆度和重复访问率。
- 增加网络可信度:拥有一个独特且合适的域名能够增加网站的可信度,用户更倾向于信任那些拥有专业、合乎逻辑的域名的网站。
配置域名访问
申请域名
这里推荐一个永久免费的二级域名nic.eu.org 申请教程可参考《教你白嫖一个终身免费的顶级域名和设置解析的方法》 域名审批周期一般在5-30天,我大概等了2周才收到邮件提醒。
绑定域名解析
- 注册并登陆cloudflare ,添加域名和dns解析记录
- 等上十分钟左右就可以验证域名+端口访问玩客云个人博客
- 最后通过cloudflare Api + 定时任务实现,自动更新dns解析记录
# 在玩客云中添加定时任务
crontab -e
# 每1小时执行一次
2 */1 * * * python3 ~/bin/ddns.py >> ~/log/ddns.log
'''
ddns.py 更新cloudflare dns域名解析记录
'''
import http.client
import json
import socket
import netifaces
import logging
import os
home_path = os.path.expanduser('~')
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=os.path.join(home_path, 'log', 'ddns.log'),
filemode='a'
)
AuthEmail = cloudflare账号邮箱地址
AuthKey = 我的个人资料->api令牌->Global API Key
ZoneId = 网站->概述->区域ID(页面右下角)
def getDnsList():
'''获取已添加的dns记录'''
conn = http.client.HTTPSConnection("api.cloudflare.com")
headers = {
'Content-Type': "application/json",
'X-Auth-Email': AuthEmail,
'X-Auth-Key': AuthKey,
}
conn.request("GET", "/client/v4/zones/" + ZoneId + "/dns_records", headers=headers)
res = conn.getresponse()
data = res.read()
dataJson = json.loads(data.decode("utf-8"))
if dataJson['success'] == True:
return dataJson['result']
else:
return []
def updateDns(recordId, name, ipv6):
'''更新dns记录'''
conn = http.client.HTTPSConnection("api.cloudflare.com")
payload = {
"comment": "Domain verification record",
"name": name,
"proxied": True,
"tags": [],
"ttl": 3600,
"content": str(ipv6),
"type": "AAAA"
}
headers = {
'Content-Type': "application/json",
'X-Auth-Email': AuthEmail,
'X-Auth-Key': AuthKey
}
conn.request("PUT", "/client/v4/zones/"+ZoneId+"/dns_records/" + recordId, json.dumps(payload), headers)
res = conn.getresponse()
data = res.read()
dataJson = json.loads(data.decode("utf-8"))
return dataJson['success']
def getLocalIPv6():
'''获取本机有效ipv6地址'''
interfaces = netifaces.interfaces()
ipv6_addr = None
for interface in interfaces:
if netifaces.AF_INET6 in netifaces.ifaddresses(interface):
ipv6_addr = netifaces.ifaddresses(interface)[netifaces.AF_INET6][0]['addr']
if str(ipv6_addr).startswith('2408'):
break
return ipv6_addr
if __name__=='__main__':
ipv6 = getLocalIPv6()
dnslist = getDnsList()
for dns in dnslist:
if dns['content'] != ipv6:
logging.info('ip变化,新ip[' + ipv6 +']')
if updateDns(dns['id'], dns['name'], ipv6):
logging.info('更新成功')
else:
logging.info('更新失败')
else:
logging.info('ip未变动')
总结
通过cloudflare的域名解析可以很轻松访问,玩客云个人博客系统。且cloudflare提供IPv4、IPv6兼容,就算客户端是IPv4地址也同样可以访问玩客云的IPv6服务。下篇在分享通过cloudflare转发功能实现域名免端口访问玩客云博客系统(放在一篇讲内容是在太多),我自己都不愿理看更别说各位看官了。