Tailscaleネットワーク(tailnet)からのみ接続できるファイル共有領域をSambaで自宅サーバ上に構築したときのメモです。
前提として、以下の環境で作業します。
- OS: Ubuntu 24.04 LTS
- samba: 4.19.5-Ubuntu
- tailscaled: 1.80.2
余談ですが、Sambaのコンテナ化も一時考えましたが、ホストとコンテナ間の連携が複雑そうで断念しました。
Samba
sambaのインストール
apt
でインストールします。
$ sudo apt install samba -y
ファイル共有するディレクトリの作成
samba
でファイル共有するディレクトリを作成します。
$ mkdir -p /mnt/smb
smb.confの編集
この記事で最も肝となるsambaの設定を編集します。一応、編集前にバックアップします。
$ sudo cp -a smb.conf smb.conf.default $ sudo nano /etc/samba/smb.conf
設定内容は色々試行錯誤して、最終的に以下に落ち着きました。
[global] workgroup = WORKGROUP server string = %h interfaces = lo enp1s0 bind interfaces only = yes smb ports = 445 min protocol = SMB3 hosts allow = 100.64.0.0/10 unix extensions = no load printers = no log file = /var/log/samba/log.%m max log size = 1000 logging = file panic action = /usr/share/samba/panic-action %d server role = standalone server obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes map to guest = bad user usershare allow guests = no unix charset = UTF-8 dos charset = CP932 disable netbios = yes disable spoolss = yes use sendfile = yes min receivefile size = 16384 aio read size = 16384 aio write size = 16384 dfree cache time = 60 block size = 4096 [smb] path = /mnt/smb security = user writable = yes read only = no guest ok = no force user = xxxxx force group = xxxxx create mask = 0644 force create mode = 0644 directory mask = 0755 force directory mode = 0755 store dos attributes = yes map archive = no dos filemode = yes valid users = xxxxx
smb.confの詳細
以下、デフォルトから変更した箇所を補足します。ちなみに、日本語の完全リファレンスは一応あるのですが、長年の変更によってものすごいボリュームで、結局何を設定すればいいのか分からないです。
interfaces = lo enp1s0 bind interfaces only = yes smb ports = 445
samba
で使うNICとポートを限定します。ポートはこのあと設定するTailscaleとも関連します。
min protocol = SMB3
個人用途なので、最新のSMBプロトコルしか使用しないようにします。
hosts allow = 100.64.0.0/10
接続元のIPアドレスをTailscaleネットワークの100.64.0.0/10
にして、アクセスを限定します。今回はやりませんが、特定の端末IPだけとか、もっと限定することも可能です。
unix charset = UTF-8 dos charset = CP932
UNIX(Linux)とWindowsでの文字コードを指定します。
use sendfile = yes min receivefile size = 16384 aio read size = 16384 aio write size = 16384 dfree cache time = 60 block size = 4096
性能向上のためのバッファサイズ等の設定のようですが、参考サイトからのコピペで、正直よくわかってません。
store dos attributes = yes map archive = no dos filemode = yes
Windowsファイルのファイル属性(実行/アーカイブ等)やアクセス権の動作をWindowsに近い動作にする設定のようですが、参考サイトからのコピペで、正直よくわかってません。
smb.confの検証
以下のコマンドでsmb.conf
の検証ができます。エラーがなければOKです。
$ sudo testparm
sambaユーザの追加
以下のコマンドでsambaユーザを追加します。今回はOSと同じにしました。
$ sudo pdbedit -a $USER
表示されるプロンプトに従ってパスワードを設定します。
sambaの再起動
以下のコマンドでsamba
を再起動し、smb.conf
を反映します。
$ sudo systemctl restart smbd
Tailscale
tailscaledのインストール
公式ドキュメントに従って、以下のコマンドでTailscaleクライアントをインストールします。
$ curl -fsSL https://tailscale.com/install.sh | sh
TCPポートフォワーダーの設定
tailscale serve
という機能を使用して、Tailscaleネットワークからの445ポートへのアクセスを、ローカルの445ポート(samba)に転送します。
$ sudo tailscale serve --bg --tcp 445 tcp://localhost:445
tailscale serve
は他にも色々なことに使えて、例えばTailscaleネットワーク限定でHTTPSのウェブサイトを公開することもできる便利な機能です。
動作確認
Tailscaleクライアントをインストールした端末であれば、エクスプローラー等から以下のアドレスで接続できるはずです。
\\{tailscaleホスト名}\{samba共有名}
おわりに
構築する前は「2025年に今更Sambaなんて…」と気分が上がらなかったですが
- 一般的なエクスプローラーで直感的にファイルを操作できる
- Tailscaleさえあれば自宅以外からでも接続できる(スマホからの接続もOK)
- TailscaleによるVPN接続なので、自宅サーバのポートを新たに開放する必要がない
と、Tailscaleと組み合わせることでメリットがたくさんあり、今では便利に使ってます。