Cloudflareではうまく動いていなかったため修正しました
手持ちデバイスを全て連携させたい!
- ラップトップ (NixOS)
- デスクトップ (NixOS)
- スマホ1 (Android)
- スマホ2 (iOS)
- タブレット (Android)
以上が私の使用しているデバイスですが、
「デバイス間でファイルを送るのに毎回 Discordや Google Drive を経由させるのはもう嫌だ!」
「Apple みたく全部同期してくれ!」
そんな日頃の夢をようやく叶えました。
KDE Connect
まずは KDE Connect です。主に Linux-スマホ間の連携のためのソフトで、
- Linux 版
- Android 版
- iOS 版
があります。iOS ではかなり機能が制限されてしまいますが、
- 再生中のメディアの操作やボリューム操作
- 通知の同期
- クリップボードの同期
- 画像やその他ファイルの送受信
- マウスポインタの送信
- その他様々な機能
などをローカルネットワーク経由で行えます。Linux-Android 間だけでなく、Linux-Linux 間や Android-Android 間でも使えます。
ただし、このままではデバイスを同じWi-Fiに繋げている時しか使えません。しかも、大学の学内 LAN では UDP Broadcast がブロックされている他、IP アドレスもすぐ変わるため、まともに使えません。この制限を克服するため、全デバイスを同じ VPN に接続する必要があります。
Tailscale
無料枠の広すぎる VPN サービスです。超簡単にプライベートネットワークを構築・接続できます。
全デバイスを Tailscale に接続し、振られたIP アドレスを接続先として KDE Connect で入力するだけです。これでどのデバイスがどこにいても同期することができます。
ポートをグローバルに開放しなくてもsshできたり、Taildrop というファイルのシェア機能もあり、Tailscale だけでも結構便利です。
DNS Filtering
さて、デバイス間連携は既にできたのですが、個人的に発生した問題があります。それは、
「VPN を Cloudflare Zero Trust からTailscale に変えた結果、DNS フィルタリングが効かなくなった」
ことです。Android 版 Chrome は拡張で広告ブロッカーを入れることができないため、これはかなり致命的です。
ちなみに Cloudflare Zero Trust はCloudflare でドメインを買っていると使えるサービスで、私は広告ブロックのための VPN として利用していました。(Zero Trust のVPNは、 Tailscale とは異なり、Tunnel を通さないとお互いのデバイスにアクセスできないため、KDE Connect と併用することはできません。)
色々と調べた結果、Tailscale の Public Name Server として Zero Trust を指定できれば良いのではないかという結論に至り、Zero Trust → Gateway → DNS Location から DNS サーバーのIPv6アドレスをTailscale の DNS → Public Name Server に指定し、Override Local DNS にチェックをつけたところ、正しく広告をブロックできるようになりました。めでたい
追記: どうやらCloudflaeの方はDoHでないとDefault Locatoinが機能しないようで、結局NextDNSのDNSサーバーをネームサーバーに設定しました.Cloudflare、かゆいところに手が届かないがち...
まとめ
- KDE ConnectとTailscaleで手持ちのデバイスを全部連携できた
- 地味にネックだった広告ブロッカーとTailscaleの併用がうまく行った
それではみなさん快適なLinuxライフをお楽しみください!