mDNSが便利だった話(TimeMachineバックアップ)

さて、本日はネットワークネタである。
TP-Link AX50のリンクアグリゲーション機能はブリッジで稼働しているので使用できていない。AX50の導入過程で、Linuxサーバーのsambaが「おかしな挙動」をするようになってしまっていたことに気付いた。
普通にWindows PCやMacBookからsmbで接続すると、繋がるときと繋がらないときがあり、なんかおかしいなぁ、と思ってはいたのではあるが、その原因が分かったので紹介しておくのである。
原因はというと、CentOSにインストールしたsambaが2種類の設定で重複起動していただけという単純なもの。
ドメインコントローラー機能を盛り込んだ、後からインストールしたsambaが/usr/local/sambaの方に入っている。それとは別にyumでサクッとインストールした普通のsambaが/usrの方にも入っている。
ドメインコントローラー機能付きの/usr/local/sambaはもう使ってはいないのだが、なぜかデーモンが起動状態になり、おかしな挙動となっていた模様。
/usr/local/sambaの方は、winbindが有効になっていて、DNSが動いている。このDNSに今や使っていないネットワークのIPアドレスが登録されており、サーバー名でIPを名前解決すると間違えたアドレスが戻ってきて、接続できないエラーになる。
/usrの方のsambaに接続されると、NetBIOSかなんかで名前解決され、ちゃんと接続可になる。
これが「繋がるときと繋がらないときがある」の原因と判断。
/usr/local/sambaの方をsystemctlで停止したら、winbindも停止して、確実に接続できるようになった。やれやれ。

TimeMachineバックアップするためにmDNS導入

で、sambaが安定したので、MacBookのストレージデータをLinuxサーバーにTimeMachine機能でバックアップしようと考えたわけである。
MacのTimeMachineでsambaサーバーにバックアップするには、Linuxの方でmDNSを稼働させないとダメらしい。CentOSには標準で入っているのかな?avahiデーモンを起動したらmDNSが有効になった。avahiは別途インストールしたんだっけか?まぁ、細かいことはいいや。mDNSが使えるようになった。
mDNSは、DNSとは異なり、マルチキャストを使ったもの。マルチキャストなので、ネットワークセグメントの外では使えない。従って、ドメイン名は「.local」で固定になる。
試しにMacBookのターミナルからpingを打ってみるとちゃんと機能していることがわかった。
一応、断っておくが、「PC名」のところは、実際の名前にしないとダメですよ。

ping PC名.local

ちゃんと名前がIPアドレスに変換されている。
sshでもログインできるかやってみた。

ssh PC名.local

できたが、IPv6アドレスに変換された模様。まぁどっちでもいいか。
WindowsPCからもやってみる。
WindowsのpingはIPv6がデフォルトなのか、IPv6アドレスに変換された。

C:\Users\asai>ping MacBook名.local
Pinging MacBook名.local [fe80::463:XXXXX:XXXXXXX] with 32 bytes of data:
Reply from fe80::463:XXXX:XXXX:XXXXXXX: time=102ms
Reply from fe80::463:XXXX:XXXX:XXXXXXX: time=16ms

IPv4でpingするには-4オプションを付ければOK

ping -4 MacBook名.local

IPv4のアドレスにも変換できている。いいじゃん。
さて、MacBookはWi-Fi接続である。Wi-Fiの場合DHCPで自動IPアドレス付与の方がなにかと便利、というか単にめんどうだから固定にしてないだけ。AX50の導入でルーター再起動したのでDHCPサーバーがリセットされ、今まで割り当てられていたIPから別のIPに変わってしまった。
MacBookでnodejsでの開発を行っているので、Windows PCからEdgeなどのブラウザでMacBookのnodejsサーバにWebアクセスすることが多い。MacBookのIPアドレスはDHCPで自動取得。IPアドレスを調べてからURLを叩く方法でWebアクセスしている。

			

http://MacBookのIP:3000

そんなに変わらないからこれでOKか。とも思っていたのではあるが、今回変わってしまった。ちょっと面倒ではあったが、DHCPサーバのクライアント設定で、MACアドレスとIPアドレスの組を登録したので、元のIPには戻すことができた。
しかし、mDNSが使えるのであれば、URLで名前指定できるじゃん。DHCPサーバが飛んでアドレスが変わっても名前でアクセスできればOKじゃない。

			

http://MacBookの名前:3000

これでもmDNSが有効ならちゃんとWebアクセスできる。いいじゃん。
早くいってよぉ。

TimeMachineバックアップする

smb.confでタイムマシン用の共有フォルダを作成して、sambaを再起動する。
元ネタは以下のサイト
CentOS7のsambaサーバーにTime Machineでバックアップをとる
/etc/samba/smb.conf

vfs objects = catia fruit streams_xattr
fruit:metadata = netatalk
fruit:encoding = native
[TimeMachine]
comment = Backup for Mac
path = /home/timemachine
writable = yes
browsable = yes
guest ok = yes
fruit:time machine = yes
fruit:time machine max size = 200G

TimeMachineのバックアップ先にLinuxのsambaを指定する。
システム環境設定...で画面を開いて、Time Machineのアイコンをクリック。
スクリーンショット 2021-07-29 10.33.25.png
「バックアップディスクを選択...」のボタンをクリックする。
バックアップ先を選択する画面で、Linuxサーバーのsamba共有フォルダを選択。
スクリーンショット 2021-07-29 10.33.38.png
ここに表示されない場合は、mDNSがうまく動いていない可能性大。
今回は成功しているのでサーバーの共有フォルダが見えているので、これを選択。
選択すると、次回のバックアップ:のところがカウントダウンされ始めた。
カウントが0になり、バックアップが始まるかと思いきや、接続に失敗。
おかしい。
ファインダーから普通にサーバー接続してみるもダメ。
えー、ちゃんと接続できていたけどなぁ...おかしいなぁ。
サーバーのログ/var/log/messagesを見るとエラーが出ている。

Jul 29 11:01:41 kernel: traps: smbd[31670] trap divide error ip:7f71e39678c5 sp:7ffe0714ae20 error:0 in fruit.so[7f71e395e000+1b000]
Jul 29 11:01:44 kernel: traps: smbd[31674] trap divide error ip:7f71e39678c5 sp:7ffe0714ae20 error:0 in fruit.so[7f71e395e000+1b000]

どうも0割りみたい。fruit.soで発生している模様。fruitはTimeMachine用のsambaオプションモジュールだなきっと。
困ったときは、ネットで検索である。英語サイトのものしか発見できなかったが、max sizeがどうとか書いてある。試しにmax sizeの設定行をコメントアウト。

vfs objects = catia fruit streams_xattr
fruit:metadata = netatalk
fruit:encoding = native
[TimeMachine]
comment = Backup for Mac
path = /home/timemachine
writable = yes
browsable = yes
guest ok = yes
fruit:time machine = yes
#   fruit:time machine max size = 200G

ビンゴ!
しかし、問題のエラーは出なくなった感じなのだが、別のエラーが発生。

Jul 29 11:03:43 smbd[31737]: [2021/07/29 11:03:43.687568,  0] ../../lib/util/access.c:365(allow_access)
Jul 29 11:03:43 smbd[31737]:  Denied connection from 240b:12:XXXX:XXXX............. (240b:12:XXXX:XXXXX..............)

今度はアクセス制限に引っかかっている感じ。IPアドレスがIPv6で表示されているので、IPv6でアクセスしているものと思われ。
えー、前はIPv4だったと思うけど。
当然ながら、smb.confでIPv4のネットワークには許可を出している。

interfaces = lo bind0 192.168.0.0/24
hosts allow = 127. 192.168.0.

ここに、IPv6のネットワークも追加しなければならないのであろう。
IPv6の場合は、全長128ビットでネットワーク部が64ビットなので、最初の4個までを指定すればOKかな。

interfaces = lo bind0 192.168.0.0/24 240b:12:XXXX:XXXX::/64
hosts allow = 127. 192.168.0. 240b:12:XXXX:XXXX::/64

interfacesの方は必要かどうかわからないが、一応設定してみた。XXXXの部分は伏せてあるので、実際の環境に合わせて変更して欲しい。そのまま入力してもダメなので注意。
これでsamba再起動、MacBookでは一度ログオフしてやってみると、ファインダーでの接続には成功した模様。
TimeMachineでやってみると...
スクリーンショット 2021-07-29 11.40.54.png
見事バックアップが始まった。
とはいえ、それなりに時間はかかるようで、3時間になっている。
こういう時にWi-Fi 6でリンクアグリかマルチギガだといいんだけどねぇ...

投稿者プロフィール

asai
asai
システムエンジニア
喋れる言語:日本語、C言語、SQL、JavaScript