この記事ではdnspythonを使ってzoneファイルにAレコードを追加して削除するサンプルプログラムを記載します。
Table of Contents
1 dnspythonのインストール
Ubuntuの場合はpython-dnspythonパッケージをインストールします。CentOSの場合はpython-dnsパッケージに組み込まれています。
$ sudo apt install -y python-dnspython # Ubuntu $ sudo yum install -y python-dns # CentOS
dnspythonがパッケージングされていないディストリビューションの場合はpipでインストールします。
$ sudo pip install dnspython
2 zoneファイルにAレコードを追加する
以下のスクリプトでAレコードを追加します。
$ cat dns-append-example.py
#!/usr/bin/env python
import os
import dns.rdataset
import dns.rdtypes.IN.A
import dns.zone
conf = 'example.zone'
hostname = 'foobar'
ipaddr = '192.168.11.250'
def append():
zone = dns.zone.from_file(conf, os.path.basename(conf))
rdataset = zone.find_rdataset(hostname, dns.rdatatype.A, create=True)
rdata = dns.rdtypes.IN.A.A(dns.rdataclass.IN, dns.rdatatype.A, ipaddr)
rdataset.add(rdata, 86400)
zone.to_file(conf)
append()
- dns.zone.from_fileを使い、example.zoneというファイルからexample.zoneというzone名でzoneオブジェクトを作成します。
- zone.find_rdatasetで'foobar'というホスト名のrdatasetオブジェクトを見つけます。ない場合は作成します。
- IPアドレス192.168.11.250を設定したAレコードのrdataオブジェクトをrdatasetに追加します。rdataにはNSレコード等の各種レコードを格納できます。
- zoneオブジェクトをexample.zoneというファイルに保存します。
以下のzoneファイルを使用します。
$ cat example.zone $TTL 86400 @ IN SOA my.net root.my.net ( 2017021902 3600 900 604800 86400 ) @ IN NS ubuntu-16.04
pythonスクリプトを実行します。
$ python dnspython-append-example.py
Aレコードが追加されました。
$ cat example.zone @ 86400 IN SOA my.net root.my.net 2017021902 3600 900 604800 86400 @ 86400 IN NS ubuntu-16.04 foobar 86400 IN A 192.168.11.250
3 zoneファイルからAレコードを削除する
以下のスクリプトでAレコードを追加します。
$ cat dnspython-remove-example.py
#!/usr/bin/env python
import os
import dns.rdataset
import dns.rdtypes.IN.A
import dns.zone
conf = 'example.zone'
hostname = 'foobar'
def remove():
zone = dns.zone.from_file(conf, os.path.basename(conf))
zone.delete_rdataset(hostname, dns.rdatatype.A)
zone.to_file(conf)
remove()
- zone.delete_rdatasetで'foobar'というホスト名でAレコードのrdatasetオブジェクトを削除します。
以下のzoneファイルを使用します。
$ cat example.zone @ 86400 IN SOA my.net root.my.net 2017021902 3600 900 604800 86400 @ 86400 IN NS ubuntu-16.04 foobar 86400 IN A 192.168.11.250
pythonスクリプトを実行します。
$ python dnspython-remove-example.py
Aレコードが削除されました。
$ cat example.zone @ 86400 IN SOA my.net root.my.net 2017021902 3600 900 604800 86400 @ 86400 IN NS ubuntu-16.04