LinuxからMS DNSのレコードの安全な動的更新

はじめに



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
      
      










All Articles