CentOS7でdhcpとbindを連携させ家庭内DDNS

インストール

今回はDNSサーバーもDHCPサーバーも1台で兼任させる。
まずインストールする。
※Version bind9.9.4 dhcp4.2.5

# yum install dhcp bind

DNSサーバーの設定

bindから設定する。
下記の箇所の内容を変更または追記する。

options {
    // zoneファイルの保存場所
    directory "/var/named/";
    // LAN内からの問い合わせを許可
    allow-query {
        localhost;
        192.168.1.0/24;
    };
    // 自分で名前解決できないときの丸投げ先
    forwarders {
        192.168.1.254;
        8.8.8.8;
    };
};

zone "example.jp." {
    type master;
    file "example.jp.zone";
    // 自身からの変更を許可しておく
    allow-update {
        localhost;
    };
};

さっき指定したzoneファイルを作成する。
※admin.example.jp.の部分はadmin@example.jpという管理者のE-mailという意味

$TTL 86400
@    IN    SOA    dns.example.jp.    admin.example.jp. (
           2018042619
           10800
           36400
           604800
           86400
)

       IN    NS   dns.example.jp.
dns    IN    A    192.168.1.11

作成したらファイルの所有グループをnamedに変更して書き込み権限を設定する。
※namedに読み書きの権限を持たせるのが目的

# chgrp named /var/named/example.jp.zone
# chmod g+w /var/named/example.jp.zone

ついでに/var/named/の所有グループもnamedに変更して書き込み権限を設定する。
※namedに書き込みの権限を持たせるのが目的

# chgrp named /var/named/
# chmod g+w /var/named/

DHCPサーバーの設定

設定ファイルを下記のように編集する。

# DNSサーバーに更新要求を送信する設定
ddns-update-style interim;
# 普通のDHCPの設定
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.101 192.168.1.120;
    option routers 192.168.1.254;
    option domain-name "example.jp";
    option domain-name-servers 192.168.1.11;
    # 更新を通知するDNSサーバーを指定
    zone example.jp. {
        primary localhost;
    }
}

その他の必要な設定

SELinuxとFirewallに例外を追加する。

# setsebool -P named_write_master_zones true
# firewall-cmd --add-service=dns --permanent
# firewall-cmd --add-service=dhcp --permanent
# firewall-cmd --reload

サービスを有効にして起動。

# systemctl enable named
# systemctl start named
# systemctl enable dhcpd
# systemctl start dhcpd

補足

nsupdate

nsupdateを使用してDNSサーバーを更新をテストするには bind-utils をインストールし、nsupdateコマンドを実行する。実行したら対話型コンソールになるので下記のような感じで入力する。何もエラーが出なければOK。

>server 127.0.0.1
>update add test.example.jp. 3600 A 192.168.1.222
>send
>server 127.0.0.1
>update delete test.example.jp.
>send
rndc

rndcでdumpして現在のDNSレコードを確認する。

# rndc dumpdb -zones
# cat /var/named/data/cache_dump.db | grep dns.example.jp.

CentOS7にVirtualBoxのリポジトリを追加する

公開鍵のインストール。

$ wget http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc
# rpm --import oracle_vbox.asc

リポジトリを追加する。

$ wget http://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo
# mv virtualbox.repo /etc/yum.repos.d/virtualbox.repo

CentOS7にWindowsからリモートデスクトップ

GNOME入ってなかったら入れて。

# yum groupinstall "GNOME Desktop"

xrdpのインストール。

# yum install epel-release
# yum install xrdp
# yum install tigervnc-server

/etc/xrdp/xrdp.iniの下記箇所を変更する。

#max_bpp=32
max_bpp=24

ファイアウォールに例外を登録する。

# firewall-cmd --add-port=3389/tcp --permanent
# firewall-cmd --reload

サービスを有効にして、起動。

# systemctl enable xrdp
# systemctl start xrdp

CentOS7でのSoftEtherVPNのインストール手順

OS:CentOS7 1708
SoftetherVPN:4.25

ビルドするためのパッケージをインストール。

# yum install kernel-devel
# yum install kernel-headers
# yum groupinstall "Development Tools"

http://www.softether-download.com/ja.aspx?product=softetherからOSに合ったVPN ServerのURLを取得しセットアップファイルを取得する。

$ wget [URL]

ダウンロードしたファイルを移動。

# mv ファイル名.tar.gz /usr/local/

ファイルを展開。

# tar xvzf ファイル名.tar.gz

インストールディレクトリに移動。

# cd /usr/local/vpnserver/

ビルドするためにmakeコマンドの実行。

# make

/etc/systemd/system/vpnserver.serviceを下記内容で作成する。

[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target

自動起動を有効にして、サービスを起動する。

# systemctl enable vpnserver
# systemctl start vpnserver

一度ファイアウォールをOFFに。

# systemctl stop firewalld

設定ツールをさっきのとこからダウンロード。設定をウィザードでWindowsから行った。

下記ポート開放して、とりあえず動いてる。
50/tcp 500/udp 4500/udp

ファイアウォールをONに戻して、例外を登録する。

# systemctl start firewalld
# firewall-cmd --add-port=50/tcp --permanent
# firewall-cmd --add-port=500/udp --permanent
# firewall-cmd --add-port=4500/udp --permanent
# firewall-cmd --reload

CentOS7+Samba4のActiveDirectory環境でのSMB共有

CentOS7にSamba4(4.6.5)をインストールし、ActiveDirectoryを構築した環境でWindowsからSMBプロトコルでアクセスする。

※Samba4にてドメインコントローラーの構築が完了している前提

共有用のディレクトリを作成する。
今回は /home/samba/share/ でやる。

# mkdir /home/share/
# chmod 777 /home/share/

/usr/local/samba/etc/smb.confを編集する。

[global]
unix charset = UTF8
dos charset = CP932
netbios name = TEST-DC1
realm = LOCAL.EXAMPLE.COM
workgroup = EXAMPLE
dns forwarder = 8.8.8.8
server string = TEST-DC1
server role = active directory domain controller
idmap_ldb:use rfc2307 = yes

[share]
path = /home/share/
comment = EXAMPLE\AdministratorとEXAMPLE\DomainUsersのみが読み書き可能
read only = no
valid users = Administrator "@domain users"
inherit acls = yes
inherit owner = yes
inherit permissions = yes
vfs objects = acl_xattr streams_xattr

Sambaサービスを再起動して動作を確認する。

CentOS7+Samba4での無料ActiveDirectory構築

今回はプライマリとセカンダリの2台を構成する。

プライマリとセカンダリの共通設定

ホスト名の設定。それぞれ test-dc1 test-dc2 とする。

# hostnamectl set-hostname test-dc1

NTPサーバーにする。
※構築手順はこちらの記事を参照

必要なコンポーネントのインストールらしい。

yum -y install \
perl \
gcc \
libacl-devel \
libblkid-devel \
gnutls-devel \
readline-devel \
python-devel \
gdb \
pkgconfig \
krb5-workstation \
zlib-devel \
setroubleshoot-server \
libaio-devel \
setroubleshoot-plugins \
policycoreutils-python \
libsemanage-python \
setools-libs-python \
setools-libs \
popt-devel \
libpcap-devel \
sqlite-devel \
libidn-devel \
libxml2-devel \
libacl-devel \
libsepol-devel \
libattr-devel \
keyutils-libs-devel \
cyrus-sasl-devel \
cups-devel \
bind-utils \
libxslt \
docbook-style-xsl \
openldap-devel

最新版のSambaをダウンロードする。この記事を書いたときは4.6.5だった。

$ wget http://www.samba.org/samba/ftp/samba-latest.tar.gz

解凍してインストールする。

$ tar zxf samba-latest.tar.gz
$ cd samba-*
# ./configure; make; make install

ファイアウォールの例外を登録する。

# firewall-cmd --permanent --add-port=42/tcp
# firewall-cmd --permanent --add-port=53/tcp
# firewall-cmd --permanent --add-port=53/udp
# firewall-cmd --permanent --add-service=kerberos
# firewall-cmd --permanent --add-service=ntp
# firewall-cmd --permanent --add-port=135/tcp
# firewall-cmd --permanent --add-port=137/udp
# firewall-cmd --permanent --add-port=138/udp
# firewall-cmd --permanent --add-port=139/tcp
# firewall-cmd --permanent --add-service=ldap
# firewall-cmd --permanent --add-port=389/tcp
# firewall-cmd --permanent --add-port=389/udp
# firewall-cmd --permanent --add-service=samba
# firewall-cmd --permanent --add-port=464/tcp
# firewall-cmd --permanent --add-port=464/udp
# firewall-cmd --permanent --add-service=ldaps
# firewall-cmd --permanent --add-port=1024-5000/tcp
# firewall-cmd --permanent --add-port=49152-65535/tcp
# firewall-cmd --permanent --add-port=5722/tcp
# firewall-cmd --permanent --add-port=9389/tcp
# firewall-cmd --reload

SELinuxの例外を登録する。

# setsebool -P samba_domain_controller true
# setsebool -P samba_export_all_ro true
# setsebool -P samba_export_all_rw true
# setsebool -P samba_enable_home_dirs true

systemdにsambaサービスを登録する。
/etc/systemd/system/samba.service を下記内容で作成。

[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/samba/var/run/samba.pid
ExecStart=/usr/local/samba/sbin/samba
[Install]
WantedBy=multi-user.target

プライマリの設定

ドメインをセットアップする。
※–use-rfc2307 (Linux/BSD/macOSを認証する場合は必須)
※–interactive (セットアップを対話式で行う)
※–function-level=2008_R2 (機能レベルを2008_R2に)

# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive --function-level=2008_R2

Realm: LOCAL.EXAMPLE.COM
Domain: EXAMPLE

下記のエラーが発生した場合は/etc/krb5.confの includedir /etc/krb5.conf.d/ をコメントアウトする。

ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:2816

参照DNSを自身のIPアドレスにする。
dns-searchをRealmに変更する。

サービスを有効にして起動する。

# systemctl enable samba
# systemctl start samba

セカンダリの設定

参照DNSのプライマリをプライマリドメコンのIPアドレスにする。
dns-searchをRealmに変更する。

プライマリでkrb5.conf内をコメントアウトしている場合は同じく /etc/krb5.conf の includedir /etc/krb5.conf.d/ をコメントアウトする。

ドメコンとしてドメイン参加させる。

# samba-tool domain join example DC -U administrator --realm=LOCAL.EXAMPLE.COM

/usr/local/samba/etc/smb.confに下記を追記する。

dns forwarder = [プライマリと同じforwarder]
idmap_ldb:use rfc2307 = yes

参照DNSのセカンダリを本サーバーのIPアドレスにする。

サービスを有効にして起動する。

# systemctl enable samba
# systemctl start samba

グループポリシーが自動では同期されないので、グループポリシーの変更後はセカンダリにて下記コマンドを実行する必要がある。

# rsync -a -u -e ssh root@test-dc1:/usr/local/samba/var/locks/sysvol/ /usr/local/samba/var/locks/sysvol/
# /usr/local/samba/bin/samba-tool ntacl sysvolreset

その他

Windowsの管理ツールではパスワードやアカウントロックのポリシーが変更できなかった。samba-toolで直接変更する。

# /usr/local/samba/bin/samba-tool domain passwordsettings set --complexity=on
# /usr/local/samba/bin/samba-tool domain passwordsettings set --min-pwd-length=5
# /usr/local/samba/bin/samba-tool domain passwordsettings set --min-pwd-age=30
# /usr/local/samba/bin/samba-tool domain passwordsettings set --max-pwd-age=0
# /usr/local/samba/bin/samba-tool domain passwordsettings set --account-lockout-duration=60
# /usr/local/samba/bin/samba-tool domain passwordsettings set --account-lockout-threshold=3
# /usr/local/samba/bin/samba-tool domain passwordsettings set --reset-account-lockout-after=60
# /usr/local/samba/bin/samba-tool domain passwordsettings set --history-length=5

DNSの更新状況の確認。
No DNS updates needed ならOKらしい。

# /usr/local/samba/sbin/samba_dnsupdate --verbose

FSMOの確認。

# /usr/local/samba/bin/samba-tool fsmo show

FSMOの移行。転送先サーバーで下記コマンドを実行する。

# /usr/local/samba/bin/samba-tool fsmo transfer --role all

CentOS7でNTPサーバーを構築

NTPをインストールする。

# yum -y install ntp

設定ファイルを変更する。

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
server ntp1.jst.mfeed.ad.jp iburst
server ntp2.jst.mfeed.ad.jp iburst
server ntp3.jst.mfeed.ad.jp iburst

ファイアウォールに例外を追加する。

# firewall-cmd --add-service ntp --permanent
# firewall-cmd --reload

サービスの自動起動を有効にして起動もする。

# systemctl enable ntpd
# systemctl start ntpd

※補足
タイムゾーンをJSTに変更するには…

# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

CentOS7でDHCPサーバーを構築する

DHCPをインストールする。

# yum -y install dhcp

/etc/dhcp/dhcpd.confに下記を追記する。

option domain-name "local.example.com";
subnet 10.0.2.0 netmask 255.255.255.0 {
    range dynamic-bootp 10.0.2.110 10.0.2.119;
    option routers 10.0.2.2;
    option domain-name-servers 10.0.2.101,10.0.2.102;
    default-lease-time 288000;
    max-lease-time 576000;
}

ファイアウォールに例外を追加する。

# firewall-cmd --permanent --add-service=dhcp
# firewall-cmd --reload

サービスを有効にして起動する。

# systemctl enable dhcpd
# systemctl start dhcpd