Featured image of post 利用域名访问玩客云博客系统

利用域名访问玩客云博客系统

前言

上一篇《利用闲置玩客云部署hugo静态博客系统》我们已经实现内网访问博客系统。那么如果实现互联网访问呢?这个方案由很多,比如:公网IPv4、公网IPv6、内网穿透、跨区域组网等等。除公网IPv4以外,我建议使用公网IPv6,这种方式配置和使用过程比较简单易,没啥技术门槛。具体配置参考《设置光猫路由器开启IPv6》《玩客云armbian系统固定ipv6后半段地址》,今天继续分享我是如何通过域名访问访问家里的玩客云博客系统。

听我絮絮叨叨

通过IPv6地址+端口,我们已经可以实现随处访问,但会遇到两个麻烦事:
1)玩客云或电脑的IPv6经常变动,比如:重启路由器;运营商每周或每月会重新下发新地址(强制变更)等等。
2)IPv6地址128位,由数字+字母组成,使用时非常不方便。 那如何解决这些问题?答案就是:域名

域名的作用主要包括:

  1. 方便记忆与访问:域名使人们无需记住复杂的IP地址,通过直观、易于记忆的字符串来访问网站,提高了用户体验和网站的可达性。
  2. 品牌宣传:一个好的域名可以加强品牌形象,通过选择与品牌相关的域名,可以提高用户对品牌的认知和信任度。
  3. 搜索引擎优化(SEO):合适的域名有助于提高网站在搜索结果中的排名,因为域名中的关键词可以增加网站在搜索引擎中的曝光度。
  4. 提升用户体验:域名可以直接反映网站的性质和内容,帮助用户准确地找到所需信息。
  5. 方便记忆与重复访问:简短、易拼写的域名提高了用户对网站的记忆度和重复访问率。
  6. 增加网络可信度:拥有一个独特且合适的域名能够增加网站的可信度,用户更倾向于信任那些拥有专业、合乎逻辑的域名的网站。

配置域名访问

申请域名

这里推荐一个永久免费的二级域名nic.eu.org 申请教程可参考《教你白嫖一个终身免费的顶级域名和设置解析的方法》 域名审批周期一般在5-30天,我大概等了2周才收到邮件提醒。

绑定域名解析

  1. 注册并登陆cloudflare ,添加域名和dns解析记录
    图1
    图2
  2. 等上十分钟左右就可以验证域名+端口访问玩客云个人博客
    图3
    图4
  3. 最后通过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转发功能实现域名免端口访问玩客云博客系统(放在一篇讲内容是在太多),我自己都不愿理看更别说各位看官了。

Licensed under CC BY-NC-SA 4.0
 赣ICP备18015110号-1   
使用 Hugo 构建 主题 StackJimmy 设计