KDE Connectの概要
KDE ConnectはKDEコミュニティが開発したLAN内でのデバイス連携ツールで、LinuxディストリビューションだけでなくAndroid、Windows、MacOSなどのプラットフォームに対応しており、ファイル転送、クリップボード共有、通知同期、リモート操作などの機能を提供します。特に便利だと感じるのは、LAN内での高速ファイル転送、スマートフォンとコンピュータ間のクリップボード共有、メッセージ同期、着信時にパソコンに通知を表示して動画再生を一時停止し、通話終了後に再開する機能です。詳細な機能については公式ドキュメントを参照してください:https://userbase.kde.org/KDEConnect/zh-han。
IPアドレス変更時の接続問題
KDE Connectの接続は、モバイル端末上で接続先PCまたは他のモバイルデバイスのIPアドレスまたはIP解決可能なドメイン名を入力することで実現されます。家庭用ルーター環境では内線IPの変更は稀であり、KDE Connectは長期間安定して接続できます。しかし、大学や企業などの環境ではDHCP経由でIPを取得するため変更が発生し、毎回あるデバイスでIPアドレスを確認してからモバイル端末で接続する必要があり、非常に不便です。
ZeroTierを使用した内部ネットワーク貫通接続
一つの解決策として内部ネットワーク貫通があり、仮想LANのIPアドレスを使用して接続します。ここではZeroTierを推奨します。その概要と基本的な使い方は https://zhuanlan.zhihu.com/p/83849371 を参照してください。PCとAndroidのクライアントがあるため推奨しています。しかし、この方法の欠点としてAndroid版ZeroTierはVPNサービスとして動作し、Androidスマートフォンでは同時に一つのVPNサービスしか実行できないため、他のVPNを使用している場合切り替えが必要になります。また、接続する両方が追加の内部ネットワーク貫通サービスを実行する必要があります。
DDNS(ダイナミックDNS)を使用した接続
前述のように、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とドメインは自動的に自分のものに表示され、そのままコピーして使用できます。ただし、状況に合わせていくつか修正が必要です。
Linux上でのddclient設定
Debianのaptなどのパッケージマネージャーにはddclientがありますが、バージョンが古く深刻なバグがある可能性があるため、上記GitHubリポジトリから最新のリリース(開発中のコードには強制的にhttpを使用するバグがあるため、リポジトリをクローンするのではなく)を直接取得してインストールすることをお勧めします。プロジェクト内のチュートリアルを読むことをお勧めします。インストール後、/etc/ddclient配下で対応する設定ファイルを作成でき、例えば新しいddclient.confファイルを作成します。使用したIPv4とIPv6バージョンはそれぞれ以下の通りです:
# client4.conf
ssl=true
protocol=dyndns2
use=interface, interface=wlp1s0
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net
# client6.conf
ssl=true
protocol=dyndns2
use=none
usev6=interfacev6, interfacev6=wlp1s0
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net
dynv6上のサンプルと比較して、コミュニティの提案に基づきssl=trueを追加し、具体的な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>
...
上記のxxxとzzzの内容がIPv4/6アドレスで、確認に使用できます。
注意すべきは、ddclientはURLを通じた自IPアドレス照会もサポートしており、通常は利用可能ですがVPNを使用している場合、リモートで取得したIPは実際のIPではなくなり、LAN接続には使用できません。この方法を使用する設定ファイルはおおよそ以下の通りで、webはIPアドレス照会サービスのURLです:
ssl=true
protocol=dyndns2
use=url, url=https://ifconfig.co
server=dynv6.com
login=none
password='xxx'
mydomain.dynv6.net
ddclientの作成者は初期設定時に以下のようなコマンドでデバッグすることを強く推奨しており、fileパラメータの後には具体的な設定ファイルパスを指定します:
sudo ddclient -daemon=0 -debug -verbose -noquiet -file <conf-path>
問題がないことが確認できれば、チュートリアルに従ってLinux上にサービスを設定してIPの自動更新を行えます。もちろん手動でコマンドを実行することも可能です。これにより、KDE Connectで自分のDDNSドメイン名を入力すれば正常に接続できます。
Android端末のTermuxでのddclient設定
Android Termux上のddclientはLinuxと似ていますが若干異なり、https://github.com/termux/termux-packages/issues/2987 を参考にしてインストールできます。Perlモジュールの依存関係のインストールと、Termuxの要件に合わせたファイルパスの修正を含みます。インストール後、上記と同様の設定ファイルを使用できますが、Termux上のifconfig、ipなどのツールはroot権限なしではIPv4アドレスのみ取得できることに注意し、自分のスマートフォンがroot化されているかどうかに応じて判断する必要がありますが、通常はIPv4アドレスで接続できます。Termuxには便利なサービス管理機能はありませんが、必要時に手動でddclientを実行してIPを更新できます。