系列教程(1)——我见,见我

前言

原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。
本文使用Markdown写成,为获得更好的阅读体验和正确的格式显示,请访问我的博客原文:
http://www.cnblogs.com/sjqlwy/p/ddns

我家妞办了个电信宽带,问装机师傅有木有公网IP,果断回答冇,失望之际看到v2ex上的前辈指点,打电话给客服说家里要装监控,需要公网IP,回复好的稍等,然后就有了。。。由于是动态IP,所以要倒腾一下。本文仅作记录过于基础的知识就不讲了,不懂的先百度再pm我。

软硬件环境:EspressoBin ARMv8开发板;ARM Archlinux 64bit操作系统(kernel 4.12.10);

  • DDNS——Sight
  • Pi-Hole——Protect
  • Across the Great Wall we can reach every corner in the world——Explore
  • Python-Requests——Automate
  • Wxpy——Interact
  • to be continued...

1、动态公网IP

对于大多数拨号上网的用户,由于其上网时间和空间的离散性,为每个用户分配一个固定的IP地址(静态IP)是非常不可取的,这将造成IP地址资源的极大浪费。因此这些用户通常会在每次拨通ISP 的主机后,自动获得一个动态的IP地址,该地址当然不是任意的,而是该ISP 申请的网络ID和主机ID的合法区间中的某个地址。拨号用户任意两次连接时的IP地址很可能不同,但是在每次连接时间内IP地址不变。

via——互动百科

如何判断自己使用的是内网IP还是外网IP呢,我们可以登录路由器管理界面看看wan口获取的IP地址和使用baidu搜索(或者ip.sb服务)获得的ip是否一致来判断。

2、动态域名服务DDNS

这里有一个问题,每次拨号甚至过段时间IP地址自己会变,总不能每次都回到家去查IP吧,这里有个概念叫做DDNS,通俗理解就是假设我在全国各地出差,每到一地儿定时告诉俺对象我在哪哪哪,然后俺对象固定在家,别人就可以方便地找到她从而得知我在哪。

DDNS(Dynamic Domain Name Server)是动态域名服务的缩写。是指域名系统(DNS)中的一种自动更新名称服务器(Name server)内容的技术。DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析。

常见的DDNS服务莫过于花生壳,官方提供了诸多平台的客户端供下载,我们使用ARM平台,选择树莓派版就可以啦,具体使用参考官方指南,我仅用过路由器版本的,此外还短暂用过no-ip服务。

其他的就是腾讯云(DNSPod)和阿里云(万网)域名服务,使用官方的解析API。前者比较早,相关第三方客户端完善,后者万网之前出过cn域名的问题被人诟病。我有过一个腾讯的cn域名,现在是一个xin域名,非常喜欢哇,由于是万网注册的域名,所以选择阿里云解析的API实现DDNS,github上搜了一下,最初选用NewFuture的项目,添加了crontab计划任务,不定时抽风不更新域名,很忧伤(egg hurt)。

crontab -l #列出当前用户计划任务

crontab -e #编辑计划任务

export EDITOR=nano # 临时改变编辑器为nano,默认vi

更多请移步http://man.linuxde.net/crontab,以及http://www.atool.org/crontab.php

作为一个强迫症,果断去ArchWiki搜了DDNS相关页面,了解到ddclient这个客户端,支持众多国外DDNS服务,而且支持日志和systemd统一管理。

3、选择合适的ddns服务

wiki页面提供了几个ddns服务,我们要选出响应速度最快的,参考我之前的文章《树莓派笔记之使用netselect选择最快Raspbian软件源》,方法很简单:

echo 'now-dns.com www.changeip.com www.dnsdynamic.org www.duckdns.org freedns.afraid.org www.noip.com www.nsupdate.info www.dynu.com' > ddns.list
sudo pacman -S netselect
netselect -vv -s 3 $(cat ddns.list)

【测试结果】我这里使用www.nsupdate.info访问质量尚可。

nsupdate.info免费且开源,使用dyndns2协议,支持中文,简洁大方,不错~阅读一下官方文档,大致懂了。

3.1 服务端设置:

注册账号——概览——添加主机。第一个名称就会生成customname.nsupdate.info的动态域名。并且会自动生成配置文件,我们找到ddclient的,复制下来。

3.1.1 使用自定义域名

以上可用使用nsupdate.info提供的以及热心网友贡献出来的域名,那么有没有可能使用自己的域名呢,这里可用参考文档Add Domains章节,由于我这里使用的阿里云解析没找到【dynamic updates (RFC 2136)】相关,所以使用CNAME解析的方法,在阿里云解析里进行设置:custom.cctv.com CNAME demo.nsupdate.info,懂我意思吧。

3.2 客户端设置:

sudo pacman -S ddclient
sudo mv /etc/ddclient/ddclient.conf /etc/ddclient/ddclient.conf.old
sudo nano /etc/ddclient/ddclient.conf #添加我们上面的内容,Ctrl+O保存,Ctrl+X退出

记住你的密钥,由于每次访问该网页都会自动更新,所以请及时修改ddclient.conf配置文件。

此外ddclient服务推荐在网络完全准备好之后才执行,参考ArchWiki:

# systemctl cat ddclient.service
# sudo nano /usr/lib/systemd/system/ddclient.service 在[unit]字段添加
[Unit]
After=network-online.target
Wants=network-online.target
# 设置相关服务开机自启
sudo systemctl enable systemd-networkd-wait-online.service

然而我们执行sudo systemctl start ddclientsystemctl status ddclient -l命令发现启动失败,提示ddclient.service: PID file /var/run/ddclient.pid not readable (yet?) after start: No such file or directory,重新查看原来的配置示例文件,添加以下内容正常运行。

daemon=600                              # check every 600 seconds
syslog=yes                              # log update msgs to syslog
mail=root                               # mail all msgs to root
mail-failure=root                       # mail failed update msgs to root
pid=/var/run/ddclient.pid               # record PID in file.

使用sudo systemctl restart ddclientsudo systemctl enable ddclient使服务生效。

这时我们将路由器重新拨号,改变IP地址,稍等片刻即可成功:

以上就基本完事了,终于有一个比较稳定的服务了。最后吐槽一下垃圾aigo的U盘。

posted @ 2017-09-03 23:26 思兼 阅读(...) 评论(...) 编辑 收藏