配置DDNS使得移动设备KDEConnect自动相互识别

KDE Connect简介

KDE Connect是一个功能强大的局域网设备交互工具,由KDE社区开发,但支持各种Linux发行版、Android、Windows、MacOS等平台,可以实现设备之间的文件传输、剪贴板共享、通知同步、远程控制等功能。我个人认为非常便利的是局域网高速的文件传输、手机和电脑剪贴板共享和消息同步,以及有人来电时电脑上弹出来电通知,并暂停正在播放的视频,挂电话后又继续的功能。具体的功能可以参考官方文档:https://userbase.kde.org/KDEConnect/zh-han。

连接时IP地址变动的问题

KDE Connect的连接,是在移动端设备上输入需要连接的PC或者另一移动设备的IP或者可解析到IP的域名来实现的。如果是家用路由器的环境,一般很少有内网IP的变动,KDE Connect可以长期稳定地连接。但是,在学校、企业等场景,我们往往是通过DHCP获取IP的,从而会遇到变化,每次都需要在一台设备上查看IP地址,然后用移动设备连接,这样就很不方便。

使用ZeroTier内网穿透进行连接

一种可行的方法是使用内网穿透,通过虚拟局域网的IP地址进行连接。这里比较推荐的是ZeroTier,其简介和基本使用方法可以参考 https://zhuanlan.zhihu.com/p/83849371 。推荐的原因是它有PC+安卓的客户端。但是,这种方法的不足在于安卓的ZeroTier是作为VPN服务运行的,而安卓手机上同时只能运行一个VPN服务,如果同时使用其他VPN就需要反复切换。而且这也要求连接的双方都额外运行一个内网穿透服务。

使用DDNS(动态域名解析)进行连接

上面已经提到,KDE COnnect是接受域名解析进行连接的。如果使用DDNS,定期将域名解析更新为自己现在的IP地址(公网和内网均可,但要在同一内网环境下),就可以解决需要手动输入IP的问题。为此,我们需要两个条件:1. 可靠且最好免费的DDNS服务提供商,这里我选择的是 https://dynv6.com/ ,免费注册,可以提供若干个DDNS域名,支持IPV4/6地址;2. 与DDNS服务器通讯的客户端服务,能够定期更新IP地址。这里我选择的是 https://github.com/ddclient/ddclient。

Dynv6配置

Dynv6一侧的操作非常简单,使用邮箱注册,配置需要的DDNS域名就可以了。网站提供可以检查当前解析的IP地址的面板,以及相关配置教程,其中就有一段关于ddclient的配置:

protocol=dyndns2
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net

如果处在登录状态,上面的password和域名就会自动显示为你自己的,直接复制使用即可。不过,我们还需要进行一些修改以适应具体情况。

ddclient在Linux上的配置

虽然Debian apt等包管理器中有ddclient,但是版本较旧,实测很可能有严重bug,因此建议直接从上述GitHub仓库中获取最近的Release(注意不是clone仓库,因为开发中的代码实测也有强制使用http的bug)进行安装。这里建议阅读项目中的教程。安装完成后,我们可以在/etc/ddcleint下编写相应的配置文件,如新建一个ddclient.conf。我使用的ipv4和ipv6版本分别是:

# ddclient4.conf
ssl=yes
protocol=dyndns2
use=if, if=wlp1s0
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net

# ddclient6.conf
ssl=yes
protocol=dyndns2
use=no
usev6=ifv6, ifv6=wlp1s0
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net

相比dynv6上的示例,这里主要是根据社区中的建议,补充了ssl=yes,以及配置了具体获取IP地址的方法。我的网卡名称为wlp1s0,需要相应修改为自己的网卡名称。这里获取到的IP地址等效于执行ifconfig wlp1s0的效果:

wlp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet xxx  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 yyy  prefixlen 64  scopeid 0x20<link>
        inet6 zzz  prefixlen 128  scopeid 0x0<global>
        ...

上面xxxzzz的内容就是IPV4/6地址,可以用来检查。

需要注意的是,ddclient还支持通过访问url的方法查询自己的IP,这在一般情况下是可用的,但是如果使用了VPN,远程查到的IP就不是真实IP,不能用于局域网连接。使用这种方法的配置文件大致如下,其中web是你的IP地址查询服务的url:

ssl=yes
protocol=dyndns2
use=web, web=https://ifconfig.co
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net

ddclient的作者强烈建议初次配置的时候,使用如下的命令进行debug,其中file参数后跟的是具体的配置文件路径:

sudo ddclient -daemon=0 -debug -verbose -noquiet -file <conf-path>

如果确认无误,可以根据教程在Linux上配置服务来自动更新IP,当然也可以手动执行命令。这样,我们在KDE Connect中填入自己的DDNS域名就可以正常连接了。

安卓手机使用Termux配置ddclient

安卓Termux上的ddclient和Linux很像但是略有不同,可以参考 https://github.com/termux/termux-packages/issues/2987 进行安装,涉及安装Perl模块的依赖和修改文件中的路径以符合Termux要求。安装完成后,我们可以使用与上面类似的配置文件,但是需要注意的是,Termux上的ifconfig, ip等工具在没有root的情况下只能获取到ipv4地址,需要根据自己的手机是否root来进行取舍,不过一般都可以使用ipv4地址进行连接。Termux中也没有方便的服务管理,可以在需要的时候手动运行ddclient来更新IP。

本文由博客一文多发平台 OpenWrite 发布!

热门相关:年轻女子美味偷窥   亡命鸳鸯国语   甜蜜的女人   善良阿姨的秘密   我的表妹