はじめに
Ubuntu Linuxを実行するADサービスクライアントを設定するプロセスで、Sambaツールを使用したDNSサーバー上のレコードの更新の遅れと、「net ads dns register」コマンドの誤った操作に直面しました。 ドメインコンピューターで作業するときに関連する問題の原因は何ですか。
たとえば、dhclient.confに2つのDNSサーバーが存在すると、「net ads dns register -P」の実行後にエラー「ERROR_DNS_GSS_ERROR」が発生します。
この問題の解決策を探して、私は多くの記事とバグレポートを読み、 Warlock_ua記事「LinuxからのWindowsドメインのDNSレコードの安全な動的更新(GSS-TSIG)」につまずきました。 このアイデアは私にとって興味深いものでした。 しかし、すべてのDNSゾーンエントリを変更する権利を持つ、別のドメインユーザーアカウントを作成するという決定が好きではありませんでした。 まず、潜在的に安全ではありません。 第二に、Windowsには既製のソリューションが既に存在します。各コンピューターアカウントには、そのエントリをDNSに変更する権利があります。 これを活用してみませんか?
基本として、私はWarlock_uaからlearn-address.shスクリプトを取得し、必要に応じてそれを完成させました。
インフラについて
Windows Server 2008 R2 Standardを実行するADサービスとMS DNSサーバーがあります。 それらはWindows管理者によって実行されます。 DHCPサーバーはシスコに基づいています。 これはネットワーク管理者によって管理されます。 何がそうなのか、私にとってはこれはすべてクラウドのどこかにあり、ブラックボックスのようなものです。 また、Samba 4.1.6、isc-dhcp-clientがインストールされたUbuntu 14.04(Trusty)を実行しているクライアントもあります。 これは私の一部です。
DNSレコードを更新するスクリプト
ADドメインで実行されているUbuntuを実行しているコンピューターを入力する手順全体については説明しません。これは記事の範囲を超えているためです。 キーポイントのみを説明します。
DNSレコードを更新するコンピューターは、ドメインに入力する必要があります。 つまり 彼はドメインにアカウントを持っている必要があります。 まず、Trivial DataBaseからコンピューターアカウントのパスワードを取得する必要があります。 これは、 tdbdumpユーティリティを使用して実行できます。
sudo tdbdump -k SECRETS/MACHINE_PASSWORD/DOMAIN /var/lib/samba/private/secrets.tdb | sed 's/\\\00$//'
その後、 ktutilユーティリティを使用して、マシンの資格情報でkeytabファイルを作成する必要があります。
ktutil <<EOF addent -password -p $cn@DOMAIN.LOCAL -k 1 -e rc4-hmac $MPAS write_kt $keytab_file quit EOF
次に、 Kerberosチケットを取得する必要があります。
kinit -k -t $keytab_file $user
また、特定のコンピューターアカウントのDNSレコードを更新できます。
nsupdate-gsstsigの概要
nsupdate-gsstsig update <ip> <hostname>
nsupdate-gsstsigのリスト
#!/bin/bash ### ### ### dnsserver=dc1 fwdzone=domain.local # . # , . #revzone=115.70.10.in-addr.arpa ttl=300 op=$1 addr=$2 #revaddr=`echo $addr | sed -re 's:([0-9]+).([0-9]+).([0-9]+).([0-9]+):4.3.2.1.in-addr.arpa:'` cn=$3 fqdn=$cn.$fwdzone addfile=add_$addr delfile=del_$addr # , AD, # CNAME user=$cn keytab_file=./machine_krb5.keytab ### ### ### MPAS=`sudo tdbdump -k SECRETS/MACHINE_PASSWORD/DOMAIN /var/lib/samba/private/secrets.tdb | sed 's/\\\00$//'` ### ### keytab- ### ktutil <<EOF addent -password -p $cn@DOMAIN.LOCAL -k 1 -e rc4-hmac $MPAS write_kt $keytab_file quit EOF ### ### DNS ### addRecord() { kinit -k -t $keytab_file $user cat <<EOF > $addfile gsstsig server $dnsserver zone $fwdzone update delete $fqdn a update add $fqdn $ttl a $addr send EOF #zone $revzone #update delete $revaddr ptr #update add $revaddr $ttl ptr $fqdn #send #EOF cat <<EOF > $delfile gsstsig server $dnsserver zone $fwdzone update delete $fqdn a send EOF #zone $revzone #update delete $revaddr ptr #send #EOF nsupdate -v $addfile rm -f $addfile rm -f $delfile } delRecord() { kinit -k -t $keytab_file $user nsupdate -v $delfile rm -f $delfile } case $op in add|update) addRecord ;; delete) delRecord ;; *) echo "Unable to handle operation $op. Exiting" exit 1 esac rm $keytab_file
スクリプト実行
便宜上、スクリプトを/ bin / nsupdate-gsstsigに配置しました。
DNSの情報が自動的に更新されるように、regdnsスクリプトを作成して/etc/network/if-up.d/に配置しました。
regdnのリスト
#!/bin/sh # SHOST=`cat /etc/hostname` # IP- lo IP=$(ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}') # DNS- nsupdate-gsstsig update $IP $SHOST
情報源
- habrahabr.ru/post/221843
- help.ubuntu.ru/wiki/input_in_windows_domain
- forum.ubuntu.ru/index.php?topic=17941.0
- help.ubuntu.com/community/ActiveDirectoryWinbindHowto
- manpages.ubuntu.com/manpages/trusty/en/man8/net.8.html
- manpages.ubuntu.com/manpages/trusty/man5/dhclient.conf.5.html
- manpages.ubuntu.com/manpages/trusty/en/man8/tdbdump.8.html
- manpages.ubuntu.com/manpages/trusty/en/man1/ktutil.1.html
- web.mit.edu/Kerberos/krb5-1.12/doc/formats/keytab_file_format.html
- web.mit.edu/Kerberos/www/krb5-devel/doc/user/tkt_mgmt.html