XserverVPS+Ubuntu+Docker Samba-DC

VPSで稼働しているサービス整理(XserverVPS)

Samba DC

今回は検証目的で、通常はVPSで直接Dockerを公開するような運用はNGで、VMを経由する。

●●●=利用環境のグローバルIPアドレス

・ufw

ufw allow from ●●● to any port 9922,3306,53,88,135,139,389,445,464,636,3268,3269,49152:49252 proto tcp
ufw allow from ●●● to any port 53,88,123,137:138,389,464 proto udp

・フォルダ作成

cd /home
mkdir samba
cd samba
mkdir data
mkdir config

chmod 700 data
chmod 700 config

Docker

vim docker-compose.yml

・もし再実行で既にコンテナがあるようだったら

docker ps -a
docker compose down
※カレントディレクトリにdocker-compose.ymlがある状態で実行

・通常終了しない場合
docker ps -a
docker rm -f コンテナID

・バインドボリューム削除
rm -rf ./data/* && rm -rf ./config/*

※再起動の場合
docker restart samba-dc

※一時停止の場合
docker pause samba-dc
docker unpause samba-dc

・起動

docker compose up -d
※カレントディレクトリにdocker-compose.ymlがある状態で実行
※dはバックグランド実行

・停止
※もし自動で再起動を繰り返している場合止める
docker stop samba-dc

・初回のみエラー

53ポートが使用中とのことでエラー。

lsof -i :53

vim /etc/systemd/resolved.conf
DNSStubListener
>no
に変更する。
systemctl restart systemd-resolved

SambaRPCポート変更

※直接変更する方法
docker exec -it samba-dc vi /etc/samba/smb.conf

rpc server dynamic port range = 49152-49172

rpc server dynamic port range = 49152-49252
に変更。

docker exec -it samba-dc supervisorctl restart samba

※ポートが多すぎるコンテナ生成で失敗する。(タイムアウトしてしまう)
ポートが少なすぎるとADの同期で問題が発生する。

エラー確認

journalctl -u docker
docker logs -f samba-dc
docker exec -it samba-dc tail -f /var/log/samba/log.smbd
docker exec -it samba-dc tail -f /var/log/ntp

NTP変更

docker logs samba-dc | grep ntp
でntp系のエラー確認

・ntpサーバー確認
docker exec -it samba-dc ntpq -p
現在のntpサーバー(*)を確認しping
docker exec -it samba-dc sntp xxx.xxx.xxx.xxx

/etc/ntp.conf or /etc/ntpd.conf
使用されている方の調べ方(ps aux | grep ntpd)
を編集する。

docker exec -it samba-dc vi /etc/ntpd.conf

server ntp.nict.jp iburst prefer
を追加し、
ntpsigndsocket /usr/local/samba/var/lib/ntp_signd/

ntpsigndsocket /var/lib/samba/ntp_signd/
に変更する

docker exec -it samba-dc supervisorctl restart ntpd

・ntp.drift作成

docker exec -it samba-dc mkdir -p /var/lib/ntp
docker exec -it samba-dc touch /var/lib/ntp/ntp.drift
docker exec -it samba-dc chown ntp:ntp /var/lib/ntp
docker exec -it samba-dc chown ntp:ntp /var/lib/ntp/ntp.drift
docker exec -it samba-dc chmod 755 /var/lib/ntp
docker exec -it samba-dc chmod 664 /var/lib/ntp/ntp.drift

docker exec -it samba-dc supervisorctl restart ntpd

・一応確認

アクセス権限
cd /var/lib/ && ls -la
chown ntp:ntp /var/lib/ntp
chmod 755 /var/lib/ntp
になっていればOK。

ntpユーザがいるかどうか
id ntp

・usersharesフォルダ作成
docker exec -it samba-dc mkdir -p /var/lib/samba/usershares

SambaTool(DNS逆引き)

VPSアドレス[AAA.BBB.CCC.DDD]
から
samba-dc.xxx.local
を取得する方法

docker exec -it samba-dc samba-tool dns zonecreate localhost CCC.BBB.AAA.in-addr.arpa –username=administrator –password=xxx

docker exec -it samba-dc samba-tool dns add localhost CCC.BBB.AAA.in-addr.arpa DDD PTR samba-dc.xxx.local –username=administrator –password=xxx

docker exec -it samba-dc supervisorctl restart samba

Windowクライアント設定

Win11でNASにアクセスできなくなる対策と同じ設定。
(安全でないゲスト ログオン等)

ncpa.cpl
利用しているNICのDNSをVPSのIPアドレスにする。

sysdm.cpl
コンピュータ名タブ>変更
ドメインを選択しドメイン名を入力する。

ユーザーはadministrator
パスワードはdocker-compose
で指定したパスワードを入力する。

再起動したらログイン画面で
ドメイン名\administrator
のように入力しログインできる。初回ログイン時はかなり時間がかかる。

※アカウントもADに参加しないと以下コマンドは使えないが、このタイミングでローカルorMSアカウントを入力して、端末だけAD参加という状態も可能。

・Windows RSAT 有効化(ユーザー参加必須)

システム>オプション機能>機能表示>使用可能な機能を表示する
RSAT: ActiveDirectoryDomainServices およびライトウェイトディレクトリサービスツール
をチェックし追加すると、
Active Directory サイトとサービス
Active Directory ドメインと信頼関係
Active Directory ユーザーとコンピュータ
Active Directory 管理センター(Samba-DCでは利用不可)
が有効化される。

RSAT: グループポリシー管理ツール
をチェックし追加すると、
gpmc.msc
が有効化される。

・DNSが問題ないか確認する。

nslookup ドメイン
これでVPSのIPアドレスが返ってくればOK。

nslookup VPSのIPアドレス
これでドメイン名が返ってくればOK。

・接続状況(信頼関係)確認※管理者

nltest /sc_verify:ドメイン名
nltest /dsgetdc:ドメイン名

・時刻関係※管理者

w32tm /config /syncfromflags:domhier /update
※DCから取得に変更

w32tm /query /status
ソースを確認

w32tm /resync
同期実行

・gpupdate・

※コンピュータのみ更新場合
gpupdate /target:computer /force

エラーが発生した場合
eventvwr>アプリケーションとサービスログ>Microsoft>Windows>GroupPolicy
で確認する。

・\\xxx.local\sysvolアクセス時、このファイルは他のコンピュータから取得したものです。とついてしまう場合。

Win+R>inetcpl.cpl>セキュリティ>信頼済みサイト

\\xxx.local
を登録する。

・ドメインコントローラーへのポートテスト
Test-NetConnection “xxx.local” -Port 389

・接続テスト(ユーザダイアログ表示させる)

Test-ComputerSecureChannel -Repair -Verbose -Credential (Get-Credential)
※ドメイン\ユーザー名で入力する

・端末パスワードの更新
Reset-ComputerMachinePassword -Credential (Get-Credential)
※Smaba-DC内では、ユーザーと、端末、それぞれパスワードが存在するが端末のパスワードは自動で管理されユーザーが意識する必要はない。

※接続がうまくいかない場合sysdm.cplから一度抜けて再度登録すると直ることが多い。

・Win11ユーザープロファイルの削除

テストしているとプロファイルが多くできてしまう。
sysdm.cpl>詳細設定>ユーザープロファイル>設定
ここで不要なプロファイルを削除できる。

メモ:コンテナエントリポイントを調べて
スクリプトを追加する方法

※この方法だとinit.sh後の処理ができないので不採用。

・エントリポイントのスクリプトを調べる
docker exec -it samba-dc bash
cat /proc/1/cmdline

・作成

vim setup.sh

#!/bin/sh
sed -i ‘s|xxx|xxx|’ /etc/samba/smb.conf
sed -i ‘s|xxx|xxx|’ /etc/ntpd.conf

docker-composeで呼び出す。

volumes:
– ./setup.sh:/setup.sh
command: sh -c “/setup.sh && exec /init.sh”

メモ:シンボリックリンク

バインドしているexternalに保存
上記と同じように、エントリスクリプト内でcpできないエラーになる。

#!/bin/sh
ln -sf /etc/samba/external/smb.conf /etc/samba/smb.conf
ln -sf /etc/samba/external/ntpd.conf /etc/ntpd.conf

※lnコマンド
ln -sf [実体] [リンク]

ls -laの見え方
ntpd.conf(リンク) -> /etc/samba/external/my_ntpd.conf(実体)

メモ:Docker Network

docker network ls

・基本
xxx bridge bridge local
xxx host host local
xxx none null local

・削除方法
docker network rm samba_default

・種類
bridge
host:portsの設定は意味ない
macvlan:VPSだと難しい

メモ:SambaTool(DNSレコード)

・DBチェック
docker exec -it samba-dc samba-tool dbcheck –cross-ncs –fix –username=administrator –password=xxx

・ADに登録されている端末取得
docker exec -it samba-dc samba-tool computer list
docker exec -it samba-dc samba-tool computer show xxx

・ADに登録されているユーザー/PCリスト取得
docker exec -it samba-dc samba-tool user list
docker exec -it samba-dc samba-tool computer list

・PC追加

docker exec -it samba-dc samba-tool computer create PCNAME –user=administrator –password=xxx

・ゾーン一覧取得
docker exec -it samba-dc samba-tool dns zonelist localhost –username=administrator –password=xxx

xxx.localと_msdcs.xxxlocalが返ってくる。

・xxx.localのレコード一覧取得
docker exec -it samba-dc samba-tool dns query localhost xxx.local @ ALL –username=administrator –password=xxx

・_msdcs.xxx.localのレコード一覧取得
docker exec -it samba-dc samba-tool dns query localhost _msdcs.xxx.local @ ALL –username=administrator –password=xxx

・下位レコード取得
docker exec -it samba-dc samba-tool dns query localhost _msdcs.xxx.local gc ALL –username=administrator –password=xxx

・Aレコード削除
docker exec samba-dc samba-tool dns delete localhost xxx.local samba-dc A 172.19.0.2 -UAdministrator%xxx

・Aレコード登録
docker exec samba-dc samba-tool dns add localhost xxx.local samba-dc A サーバーIPアドレス -UAdministrator%xxx

メモ:アクセス制御リスト(ACL)

docker exec -it samba-dc samba-tool ntacl sysvolreset –username=administrator –password=xxx

docker exec -it samba-dc samba-tool ntacl sysvolcheck –username=administrator –password=xxx

docker exec -it samba-dc supervisorctl restart samba

・ACL権限関連リセット

samba-tool ntacl sysvolreset
samba-tool ntacl sysvolcheck