Powerdnsデータベースの更新方法に関するネットの記事をフォローしました。 ISC DHCPおよびPowerDNS リースを要求しているクライアントのホスト名を取得するためにどのくらい戦いますか。ログファイルから、dhcpサーバーが(括弧内に)それを持っていることがわかります。
私の問題は、Host-decl-nameが値を保持していないという事実にあります。これは、クライアントの名前であるMINIONを保持すると考えていたでしょう。 dhcpd.confの実行でMINIONという名前をどのように取得しますか。 b.t.w.ミニオンはWindows 7マシンです。
私のdhcpd.conf:
ddns-update-style none; option domain-name "butylseal.int"; option domain-name-servers 192.168.0.201、192.168.0.202; default-lease-time 600; max-lease-time 7200; authoritative; log-facility local7; subnet 192.168。 0.0 netmask 255.255.255.0 { range 192.168.0.1 192.168.0.99; option routers 192.168.0.249; option netbios-name-servers 192.168.0.201; option netbios-node-type 8; on commit { log( "============= [START COMMIT] ========= ======= "); log("ホスト名は: "); log(Host-decl-name); set ClientIP = binary- to-ascii(10、8、 "。"、リースアドレス); set ClientMac = binary-to-ascii(16、8、 ":"、substring(hardware、1、6)); log(concat( "Commit:IP:"、ClientIP、 "Mac:"、ClientMac、 "Hostname:"、Host-decl-name)); execute( "/ etc/dhcp/dhcp-event "、" commit "、ClientIP、ClientMac、Host-decl-name); [.___ _。] log( "============ [END COMMIT] ================="); } on release { log( "============ [START RELEASE] ==============="); set ClientIP = binary-to-ascii(10、8、 "。"、リースアドレス); set ClientMac = binary-to-ascii(16、8、 ":"、substring( hradware、1、6)); log(concat( "Release:IP:"、ClientIP、 "Mac:"、ClientMac、 "Hostname:"、Host-decl-name)); execute( "/ etc/dhcp/dhcp-event"、 "release"、ClientIP、ClientMace、Host-decl-name); log( "=========== ENDリリース] ==================); } 有効期限{ log( "===== ====== [START EXPIRY] ================)=)); set ClientIP = binary-to-ascii(10、8、 "。" 、リースアドレス); set ClientMac = binary-to-ascii(16、8、 ":"、substring(hardware、1、6)); log(concat( "Expiry: IP: "、ClientIP、" Mac: "、ClientMac、" Hostname: "、Host-decl-name)); execute("/etc/dhcp/dhcp-event "、" expiry "、ClientIP、ClientMac); log(" =========== [END EXPIRY] ================= "); } }
実行するスクリプト:
#!/ usr/bin/env python import MySQLdb import os、sys import pprint pp = pprint.PrettyPrinter() mysql_Host = "localhost" mysql_user = "mysqlUsr" mysql_pass = "mySqlPass" mysql_db = "mypdnsdb" if(len(sys.argv)> 1): command = sys.argv [1] clientIP = sys.argv [2] clientMac = sys.argv [3] hostname = sys.argv [4] if command == "commit": pp.pprint( "commit") f = open( "/ tmp/leases"、 "a") s = "リース:%s〜%s\n"%(clientIP、hostname) f。 write(s) f.flush() f.close() db = MySQLdb.connect(Host = mysql_Host、user = mysql_user、passwd = mysql_pass、db = mysql_db ) cursor = db.cursor() cursor.execute( "INSERT INTO records(domain_id、name、type、content、ttl、prio、change_date)VALUES(%s、%s、%) s、%s、%s、%s、UNIX_TIMESTAMP(NOW())) "、[1、hostname、" A "、clientIP、3600,0]) cursor.close() db.commit() db.close() Elif command == "release": pp.pprint ( "release") f = open( "/ tmp/leases"、 "a") s = "リリース:%s from%\ n"%(clientIP、hostname) f.write(s) f.flush() f.close() db = MySQLdb.connect(Host = mysql_Host、user = mysql_user、passwd = mysql_pass、db = mysql_db) cursor = db.cursor() cursor.execute( "レコードから削除WHEREコンテンツ=%s AND名前=%s"、[clientIP、hostname]) db.commit() db.close() Elif command == "expiry": pp.pprint( "expiry") f = open( "/ tmp/leases"、 "a") s = "期限切れ:%sからの%s\n"%(clientIP、hostname) f.write(s) f.flush() f.close() db = MySQLdb.connect(Host = mysql_Host、user = mysql_user、passwd = mysql_pass、db = mysql_db) cursor = db.cursor() cursor.execute( "DELETE FROM records WHERE content =%s AND name =%s"、[clientIP、hostname]) db.commit() db.close()
ありがとうございました
Mark Hollander
「最初に選択する値」があなたを助けることができると思います。次の方法でそれを行うことができます。set clientName = pick-first-value(オプションfqdn.hostname、オプションHost-name);