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 


Source: https://habr.com/ru/post/J265969/


All Articles