DockerでAD-Samba構築【その1】

 5年ほど前にSambaでActiveDirectoryを組むという使い古されたことをやっていたけど、5年ぶりにSamba作ってみるかということで色々と調べたけれども、世の中はもはやDockerということでここのほぼまるまる100%コピペでやりました。まぁ相変わらずダメダメなので仕方ないです。

ちなみにそのままコピペだとWindowsでドメインログオンしたときに外部のネット接続できないとか色々とあって一筋縄でいかなかったり多少、嵌りました(自分がへぼいからです)。これまた先人のお知恵を拝借してローカルにイメージコピーしてきてShellスクリプトいじくって無事にドメイン参加状態でWindowsからネットつながるところまでは参照できました。

構築イメージは↓こんな感じです。NICにIPアドレスを1つ追加してDockerのSamba-ADと通信する場合は追加IPを経由して通信するという構成となります。











◆構築手順

1.ホスト側設定変更

#IPアドレス変更
$ sudo vi /etc/netplan/00-installer-config.yaml
---------------------------
# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      addresses:
      - 192.168.0.10/16	#変更
      - 192.168.0.11/16	#追加
      gateway4: 192.168.0.1
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4
        - 192.168.0.1
  version: 2
---------------------------
$ sudo netplan apply

#ホスト名変更
$ sudo hostnamectl set-hostname hostsrv.yourdomain
$ sudo vi /etc/cloud/cloud.cfg
---------------------------
# This will cause the set+update hostname module to not operate (if true)
preserve_hostname: true		#変更
---------------------------

$ sudo vi /etc/hosts
---------------------------
127.0.0.1 localhost
127.0.0.1 hostsrv.yourdomain hostsrv	#追記
127.0.1.1 hostsrv			#修正

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
---------------------------

#resolvd停止
$ sudo vi /etc/systemd/resolved.conf
----------------------------
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#DNSOverTLS=no
#Cache=no-negative
#DNSStubListener=yes
DNSStubListener=no	#修正
#ReadEtcHosts=yes
----------------------------

$ cd /etc
$ sudo rm -Rf resolv.conf
$ sudo ln -sf ../run/systemd/resolve/resolv.conf resolv.conf
$ sudo systemctl restart systemd-resolved
$ sudo shutdown -r now

2.Dokerインストール

#https経由のaptリポジトリ許可
$ cd
$ sudo apt update
$ sudo apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

#DockerCEインストール
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt update
$ sudo apt -y install docker-ce

#Docker-composeインストール
#最新バージョン確認 https://github.com/docker/compose/blob/master/CHANGELOG.md

#インストール
$ export compose='最新VersionNO'
$ sudo curl -L https://github.com/docker/compose/releases/download/${compose}/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod 0755 /usr/local/bin/docker-compose
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ sudo systemctl enable docker

#一般ユーザでDocker実行可能なように設定
$ getent group docker
docker:x:998:
$ sudo gpasswd -a youruser docker

3.Docker設定

#Samba用イメージコピーおよび修正
$ cd ~/docker/samba
$ git clone https://github.com/Fmstrat/samba-domain.git image
$ vi image/init.sh
--------------------------------------------
if [[ $DNSFORWARDER != "NONE" ]]; then
	sed -i "/dns forwarder/d" /etc/samba/smb.conf			#追記
	sed -i "/idmap_ldb:use rfc2307 = yes/d" /etc/samba/smb.conf	#追記
	sed -i "/\[global\]/a \
		\\\tdns forwarder = ${DNSFORWARDER}\
		" /etc/samba/smb.conf
fi
--------------------------------------------

$ mkdir main_samba
$ vi main_samba/docker-compose.yml
------------------------------------
version: '3.9'

networks:
  inner-net:
    name: samba_net
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: ${MY_SUBNET}
          gateway: ${SUBNET_GATEWAY}

services:
  # see: https://github.com/Fmstrat/samba-domain
  ad_main_samba:
    build: ../image
    #image: nowsci/samba-domain
    container_name: main_samba
    volumes:
      #- /etc/localtime:/etc/localtime:ro
      - ./data/:/var/lib/samba
      - ./config/samba:/etc/samba/external
      - ./log:/var/log/samba
    environment:
      - DOMAIN=${AD_DOMAIN}
      - DOMAINPASS=${AD_DOMAIN_PASSWORD}
      - JOIN=false
      - INSECURELDAP:true
      - DNSFORWARDER=${EXT_DNS1_ADDR}
      - HOSTIP=${MAIN_AD_ADDR}
      - TZ=Asia/Tokyo
    networks:
      inner-net:
          ipv4_address: ${MAIN_AD_ADDR}
    ports:
     - ${ADS_ADDR}:53:53
     - ${ADS_ADDR}:53:53/udp
     - ${ADS_ADDR}:88:88
     - ${ADS_ADDR}:88:88/udp
     - ${ADS_ADDR}:135:135
     - ${ADS_ADDR}:137-138:137-138/udp
     - ${ADS_ADDR}:139:139
     - ${ADS_ADDR}:389:389
     - ${ADS_ADDR}:389:389/udp
     - ${ADS_ADDR}:445:445
     - ${ADS_ADDR}:464:464
     - ${ADS_ADDR}:464:464/udp
     - ${ADS_ADDR}:636:636
     - ${ADS_ADDR}:1024-1044:1024-1044
     - ${ADS_ADDR}:3268-3269:3268-3269
    dns_search:
      - ${DOMAIN_NAME}
    dns:
      - ${MAIN_AD_ADDR}
      - ${SUB_AD_ADDR}
      - ${EXT_DNS1_ADDR}
      - ${EXT_DNS2_ADDR}
    extra_hosts:
      - ${HOST_NAME}.${DOMAIN_NAME}:${MAIN_AD_ADDR}
    hostname: ${HOST_NAME}
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
    privileged: true
    restart: always
-------------------------------
$ vi main_samba/.env
----------------------
MY_SUBNET=192.168.50.0/24
SUBNET_GATEWAY=192.168.50.1
ADS_ADDR=192.168.0.11
MAIN_AD_ADDR=192.168.50.10
SUB_AD_ADDR=192.168.50.20
AD_DOMAIN=YOURDOMAIN
EXT_DNS1_ADDR=8.8.8.8
EXT_DNS2_ADDR=8.8.4.4
AD_DOMAIN_PASSWORD=password
HOST_NAME=samba-ad
DOMAIN_NAME=yourdomain
----------------------

#Docker起動
$ docker-compose up -d

4.Windows側設定

そのままだとWindowsからDockerのSambaに接続できないのでLinux側のネットワークを設定してそっちに入れるように、DOSプロンプトを起動してルーティングを追加する。

*ほんとはもっとうまい方法あるんだろうけど、とりあえず使えればいいや的な考え方で端末に単独でルーティングを追加しました。

C:\WINDOWS\system32>route -p add 192.168.50.10 mask 255.255.255.255 192.168.50.1
OK!


◆参考サイト

1.ホスト側IPアドレス固定、ホスト名変更

https://linuxfan.info/ubuntu-2004-server-static-ip-address

https://qiita.com/zen3/items/757f96cbe522a9ad397d

https://tryota.hatenablog.com/entry/2021/01/10/Ubuntu20.04%E3%81%A7DNS%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B


2.Samba Docker関連

https://qiita.com/hrkt/items/68ae33cdfae4713d7566

http://sheepdogjam.cocolog-nifty.com/blog/2020/01/post-808d61.html

https://www.lunaplus.net/posts/2020/04/docker-activedirectory/

https://github.com/Fmstrat/samba-domain

https://qiita.com/ir-shin1/items/ba50a2e7ba1e9e025f7c

https://lists.samba.org/archive/samba/2018-September/217931.html

https://github.com/hobby-labs/samba-ad-container#prerequisite-of-primarysecondary-dc

https://github.com/naturalis/docker-samba


3.dns forwarder複数できる不具合対応

https://github.com/Fmstrat/samba-domain/issues/11


4.Windowsルーティング設定

https://qiita.com/kooohei/items/b0931ae210911cc52adc

https://qiita.com/BooookStore/items/5862515209a31658f88c


ActiveDirectoryまでDockerでできるとは末恐ろしい限りです。(すでに何年も遅れているので突っ込まないでくださいww)

Windowsでドメイン参加できるところまでは確認できましたが、Windowsからユーザ追加できていません。まずはWindowsからユーザ追加したいですがRSATからActiveDirectoryとユーザが消えていてユーザ追加できないので困っています。

後はセカンダリのADサーバもDockerで作れないかとか思ったりしてます。Dockerするならわざわざ1台のホストの中に2台も作る必要はないのですが、なんとなく1台のLinuxでDocker使って複数ADとかあまりしている人いなかったのでバカげてるからやってみてもいいかなぁと思ったりしています。(あまり有意義ではないな・・・)


気が向いたら次回もSamba-ADのDocker編やるかもしれないです。ではまたどこかでお会いしましょう。


【2021/7/10追記】

前提条件として同一のホスト内でないとうまく動いてくれません。何かうまい手がないか調査中です。

【2021/7/18追記】

自宅ネットワークのせいでした。WiFi中継器かましている場合にWifiルータ親機から中継器経由で接続させるとWindowsでrouting切ってもうまくDockerネットワーク内にarpできていないみたいな感じでした。ですので無線中継器かましている場合は要注意です。

*有線の方がトラブル少ないです。

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)