1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
- "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
- <!ENTITY mdash "—" >
- <!ENTITY % version SYSTEM "version.ent">
- %version;
- ]>
- <!--
- - Copyright (C) 2010-2012 Internet Systems Consortium, Inc. ("ISC")
- -
- - Permission to use, copy, modify, and/or distribute this software for any
- - purpose with or without fee is hereby granted, provided that the above
- - copyright notice and this permission notice appear in all copies.
- -
- - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
- - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
- - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
- - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- - PERFORMANCE OF THIS SOFTWARE.
- -->
- <book>
- <?xml-stylesheet href="bind10-guide.css" type="text/css"?>
- <bookinfo>
- <title>BIND 10 Guide</title>
- <subtitle>Administrator Reference for BIND 10</subtitle>
- <copyright>
- <year>2010-2012</year><holder>Internet Systems Consortium, Inc.</holder>
- </copyright>
- <abstract>
- <para>BIND 10 is a framework that features Domain Name System
- (DNS) suite and Dynamic Host Configuration Protocol (DHCP)
- servers managed by Internet Systems Consortium (ISC). It
- includes DNS libraries, modular components for controlling
- authoritative and recursive DNS servers, and experimental DHCPv4
- and DHCPv6 servers.
- </para>
- <para>
- This is the reference guide for BIND 10 version &__VERSION__;.
- The most up-to-date version of this document (in PDF, HTML,
- and plain text formats), along with other documents for
- BIND 10, can be found at <ulink url="http://bind10.isc.org/docs"/>.
- </para> </abstract>
- <releaseinfo>This is the reference guide for BIND 10 version
- &__VERSION__;.</releaseinfo>
- </bookinfo>
- <preface>
- <title>Preface</title>
- <section id="acknowledgements">
- <title>Acknowledgements</title>
- <para>ISC would like to acknowledge generous support for
- BIND 10 development of DHCPv4 and DHCPv6 components provided
- by <ulink url="http://www.comcast.com/">Comcast</ulink>.</para>
- </section>
- </preface>
- <chapter id="intro">
- <title>Introduction</title>
- <para>
- BIND is the popular implementation of a DNS server, developer
- interfaces, and DNS tools.
- BIND 10 is a rewrite of BIND 9. BIND 10 is written in C++ and Python
- and provides a modular environment for serving and maintaining DNS.
- BIND 10 provides a EDNS0- and DNSSEC-capable authoritative
- DNS server and a caching recursive name server which also
- provides forwarding.
- </para>
- <para>
- This guide covers the experimental prototype of
- BIND 10 version &__VERSION__;.
- </para>
- <section>
- <title>Supported Platforms</title>
- <para>
- BIND 10 builds have been tested on Debian GNU/Linux 5 and unstable,
- Ubuntu 9.10, NetBSD 5, Solaris 10, FreeBSD 7 and 8, CentOS
- Linux 5.3, and MacOS 10.6.
- It has been tested on Sparc, i386, and amd64 hardware
- platforms.
- It is planned for BIND 10 to build, install and run on
- Windows and standard Unix-type platforms.
- </para>
- </section>
- <section id="required-software">
- <title>Required Software</title>
- <para>
- BIND 10 requires at least Python 3.1
- (<ulink url="http://www.python.org/"/>).
- It has also been tested with Python 3.2.
- </para>
- <para>
- BIND 10 uses the Botan crypto library for C++
- (<ulink url="http://botan.randombit.net/"/>).
- It requires at least Botan version 1.8.
- </para>
- <para>
- BIND 10 uses the log4cplus C++ logging library
- (<ulink url="http://log4cplus.sourceforge.net/"/>).
- It requires at least log4cplus version 1.0.3.
- </para>
- <para>
- The authoritative DNS server uses SQLite3
- (<ulink url="http://www.sqlite.org/"/>).
- <!-- TODO: is this still required? -->
- It needs at least SQLite version 3.3.9.
- </para>
- <para>
- The <command>b10-xfrin</command>, <command>b10-xfrout</command>,
- and <command>b10-zonemgr</command> components require the
- libpython3 library and the Python _sqlite3.so module
- (which is included with Python).
- The Python module needs to be built for the corresponding Python 3.
- </para>
- <!-- TODO: this will change ... -->
- <note>
- <para>
- Some operating systems do not provide these dependencies
- in their default installation nor standard packages
- collections.
- You may need to install them separately.
- </para>
- </note>
- </section>
- <section id="starting_stopping">
- <title>Starting and Stopping the Server</title>
- <para>
- BIND 10 is modular. Part of this modularity is
- accomplished using multiple cooperating processes which, together,
- provide the server functionality. This is a change from
- the previous generation of BIND software, which used a
- single process.
- </para>
- <para>
- At first, running many different processes may seem confusing.
- However, these processes are started, stopped, and maintained
- by a single command, <command>bind10</command>.
- This command starts a master process which will start other
- processes as needed.
- The processes started by the <command>bind10</command>
- command have names starting with "b10-", including:
- </para>
- <para>
- <itemizedlist>
- <listitem>
- <simpara>
- <command>b10-auth</command> —
- Authoritative DNS server.
- This process serves DNS requests.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-cfgmgr</command> —
- Configuration manager.
- This process maintains all of the configuration for BIND 10.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-cmdctl</command> —
- Command and control service.
- This process allows external control of the BIND 10 system.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-msgq</command> —
- Message bus daemon.
- This process coordinates communication between all of the other
- BIND 10 processes.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-resolver</command> —
- Recursive name server.
- This process handles incoming queries.
- <!-- TODO: -->
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-sockcreator</command> —
- Socket creator daemon.
- This process creates sockets used by
- network-listening BIND 10 processes.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-stats</command> —
- Statistics collection daemon.
- This process collects and reports statistics data.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-stats-httpd</command> —
- HTTP server for statistics reporting.
- This process reports statistics data in XML format over HTTP.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-xfrin</command> —
- Incoming zone transfer service.
- This process is used to transfer a new copy
- of a zone into BIND 10, when acting as a secondary server.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-xfrout</command> —
- Outgoing zone transfer service.
- This process is used to handle transfer requests to
- send a local zone to a remote secondary server,
- when acting as a master server.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-zonemgr</command> —
- Secondary manager.
- This process keeps track of timers and other
- necessary information for BIND 10 to act as a slave server.
- </simpara>
- </listitem>
- </itemizedlist>
- </para>
- <para>
- These are ran automatically by <command>bind10</command>
- and do not need to be run manually.
- </para>
- </section>
- <section id="managing_once_running">
- <title>Managing BIND 10</title>
- <para>
- Once BIND 10 is running, a few commands are used to interact
- directly with the system:
- <itemizedlist>
- <listitem>
- <simpara>
- <command>bindctl</command> —
- interactive administration interface.
- This is a low-level command-line tool which allows
- a developer or an experienced administrator to control
- BIND 10.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-loadzone</command> —
- zone file loader.
- This tool will load standard masterfile-format zone files into
- BIND 10.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <command>b10-cmdctl-usermgr</command> —
- user access control.
- This tool allows an administrator to authorize additional users
- to manage BIND 10.
- </simpara>
- </listitem>
- <!-- TODO usermgr -->
- </itemizedlist>
- </para>
- </section>
- <para>
- The tools and modules are covered in full detail in this guide.
- <!-- TODO point to these -->
- In addition, manual pages are also provided in the default installation.
- </para>
- <!--
- bin/
- bindctl*
- host*
- lib/
- libauth
- libdns
- libexceptions
- python3.1/site-packages/isc/{cc,config}
- sbin/
- bind10
- share/
- share/bind10/
- auth.spec
- b10-cmdctl.pem
- bob.spec
- passwd.csv
- man/
- var/
- bind10/b10-config.db
- -->
- <para>
- BIND 10 also provides libraries and programmer interfaces
- for C++ and Python for the message bus, configuration backend,
- and, of course, DNS. These include detailed developer
- documentation and code examples.
- <!-- TODO point to this -->
- </para>
- </chapter>
- <chapter id="installation">
- <title>Installation</title>
- <section id="build-requirements">
- <title>Building Requirements</title>
- <para>
- In addition to the run-time requirements, building BIND 10
- from source code requires various development include headers.
- </para>
- <note>
- <simpara>
- Some operating systems have split their distribution packages into
- a run-time and a development package. You will need to install
- the development package versions, which include header files and
- libraries, to build BIND 10 from source code.
- </simpara>
- </note>
- <para>
- Building from source code requires the Boost
- build-time headers
- (<ulink url="http://www.boost.org/"/>).
- At least Boost version 1.35 is required.
- <!-- TODO: we don't check for this version -->
- <!-- NOTE: jreed has tested with 1.34, 1.38, and 1.41. -->
- </para>
- <para>
- To build BIND 10, also install the Botan (at least version
- 1.8) and the log4cplus (at least version 1.0.3)
- development include headers.
- </para>
- <!--
- TODO
- Debian and Ubuntu:
- libgmp3-dev and libbz2-dev required for botan too
- -->
- <!-- NOTE: _sqlite3 is only needed at test time; it is already listed
- as a dependency earlier -->
- <para>
- Building BIND 10 also requires a C++ compiler and
- standard development headers, make, and pkg-config.
- BIND 10 builds have been tested with GCC g++ 3.4.3, 4.1.2,
- 4.1.3, 4.2.1, 4.3.2, and 4.4.1; Clang++ 2.8; and Sun C++ 5.10.
- </para>
- <para>
- Visit the wiki at <ulink
- url="http://bind10.isc.org/wiki/SystemSpecificNotes" />
- for system-specific installation tips.
- </para>
- </section>
- <section id="quickstart">
- <title>Quick start</title>
- <note>
- <simpara>
- This quickly covers the standard steps for installing
- and deploying BIND 10 as an authoritative name server using
- its defaults. For troubleshooting, full customizations and further
- details, see the respective chapters in the BIND 10 guide.
- </simpara>
- </note>
- <para>
- To quickly get started with BIND 10, follow these steps.
- </para>
- <orderedlist>
- <listitem>
- <simpara>
- Install required run-time and build dependencies.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- Download the BIND 10 source tar file from
- <ulink url="ftp://ftp.isc.org/isc/bind10/"/>.
- </simpara>
- </listitem>
- <listitem>
- <para>Extract the tar file:
- <screen>$ <userinput>gzcat bind10-<replaceable>VERSION</replaceable>.tar.gz | tar -xvf -</userinput></screen>
- </para>
- </listitem>
- <listitem>
- <para>Go into the source and run configure:
- <screen>$ <userinput>cd bind10-<replaceable>VERSION</replaceable></userinput>
- $ <userinput>./configure</userinput></screen>
- </para>
- </listitem>
- <listitem>
- <para>Build it:
- <screen>$ <userinput>make</userinput></screen>
- </para>
- </listitem>
- <listitem>
- <para>Install it (to default /usr/local):
- <screen>$ <userinput>make install</userinput></screen>
- </para>
- </listitem>
- <listitem>
- <para>Start the server:
- <screen>$ <userinput>/usr/local/sbin/bind10</userinput></screen>
- </para>
- </listitem>
- <listitem>
- <para>Test it; for example:
- <screen>$ <userinput>dig @127.0.0.1 -c CH -t TXT authors.bind</userinput></screen>
- </para>
- </listitem>
- <listitem>
- <para>Load desired zone file(s), for example:
- <screen>$ <userinput>b10-loadzone <replaceable>your.zone.example.org</replaceable></userinput></screen>
- </para>
- </listitem>
- <listitem>
- <simpara>
- Test the new zone.
- </simpara>
- </listitem>
- </orderedlist>
- </section>
- <section id="install">
- <title>Installation from source</title>
- <para>
- BIND 10 is open source software written in C++ and Python.
- It is freely available in source code form from ISC via
- the Git code revision control system or as a downloadable
- tar file. It may also be available in pre-compiled ready-to-use
- packages from operating system vendors.
- </para>
- <section>
- <title>Download Tar File</title>
- <para>
- Downloading a release tar file is the recommended method to
- obtain the source code.
- </para>
- <para>
- The BIND 10 releases are available as tar file downloads from
- <ulink url="ftp://ftp.isc.org/isc/bind10/"/>.
- Periodic development snapshots may also be available.
- </para>
- <!-- TODO -->
- </section>
- <section>
- <title>Retrieve from Git</title>
- <para>
- Downloading this "bleeding edge" code is recommended only for
- developers or advanced users. Using development code in a production
- environment is not recommended.
- </para>
- <note>
- <para>
- When using source code retrieved via Git additional
- software will be required: automake (v1.11 or newer),
- libtoolize, and autoconf (2.59 or newer).
- These may need to be installed.
- </para>
- </note>
- <para>
- The latest development code, including temporary experiments
- and un-reviewed code, is available via the BIND 10 code revision
- control system. This is powered by Git and all the BIND 10
- development is public.
- The leading development is done in the <quote>master</quote>.
- </para>
- <para>
- The code can be checked out from
- <filename>git://git.bind10.isc.org/bind10</filename>;
- for example:
- <screen>$ <userinput>git clone git://git.bind10.isc.org/bind10</userinput></screen>
- </para>
- <para>
- When checking out the code from
- the code version control system, it doesn't include the
- generated configure script, Makefile.in files, nor the
- related configure files.
- They can be created by running <command>autoreconf</command>
- with the <option>--install</option> switch.
- This will run <command>autoconf</command>,
- <command>aclocal</command>,
- <command>libtoolize</command>,
- <command>autoheader</command>,
- <command>automake</command>,
- and related commands.
- </para>
- </section>
- <section>
- <title>Configure before the build</title>
- <para>
- BIND 10 uses the GNU Build System to discover build environment
- details.
- To generate the makefiles using the defaults, simply run:
- <screen>$ <userinput>./configure</userinput></screen>
- </para>
- <para>
- Run <command>./configure</command> with the <option>--help</option>
- switch to view the different options. The commonly-used options are:
- <variablelist>
- <varlistentry>
- <term>--prefix</term>
- <listitem>
- <simpara>Define the installation location (the
- default is <filename>/usr/local/</filename>).
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>--with-boost-include</term>
- <listitem>
- <simpara>Define the path to find the Boost headers.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>--with-pythonpath</term>
- <listitem>
- <simpara>Define the path to Python 3.1 if it is not in the
- standard execution path.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>--with-gtest</term>
- <listitem>
- <simpara>Enable building the C++ Unit Tests using the
- Google Tests framework. Optionally this can define the
- path to the gtest header files and library.
- </simpara>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- <!-- TODO: lcov -->
- <para>
- For example, the following configures it to
- find the Boost headers, find the
- Python interpreter, and sets the installation location:
- <screen>$ <userinput>./configure \
- --with-boost-include=/usr/pkg/include \
- --with-pythonpath=/usr/pkg/bin/python3.1 \
- --prefix=/opt/bind10</userinput></screen>
- </para>
- <para>
- If the configure fails, it may be due to missing or old
- dependencies.
- </para>
- </section>
- <section>
- <title>Build</title>
- <para>
- After the configure step is complete, to build the executables
- from the C++ code and prepare the Python scripts, run:
- <screen>$ <userinput>make</userinput></screen>
- </para>
- </section>
- <section>
- <title>Install</title>
- <para>
- To install the BIND 10 executables, support files,
- and documentation, run:
- <screen>$ <userinput>make install</userinput></screen>
- </para>
- <note>
- <para>The install step may require superuser privileges.</para>
- </note>
- </section>
- <!-- TODO: tests -->
- <section>
- <title>Install Hierarchy</title>
- <para>
- The following is the layout of the complete BIND 10 installation:
- <itemizedlist>
- <listitem>
- <simpara>
- <filename>bin/</filename> —
- general tools and diagnostic clients.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>etc/bind10-devel/</filename> —
- configuration files.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>lib/</filename> —
- libraries and python modules.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>libexec/bind10-devel/</filename> —
- executables that a user wouldn't normally run directly and
- are not run independently.
- These are the BIND 10 modules which are daemons started by
- the <command>bind10</command> tool.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>sbin/</filename> —
- commands used by the system administrator.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>share/bind10-devel/</filename> —
- configuration specifications.
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>share/man/</filename> —
- manual pages (online documentation).
- </simpara>
- </listitem>
- <listitem>
- <simpara>
- <filename>var/bind10-devel/</filename> —
- data source and configuration databases.
- </simpara>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </section>
- <!--
- <section id="install.troubleshooting">
- <title>Troubleshooting</title>
- <para>
- </para>
- </section>
- -->
- </chapter>
- <chapter id="bind10">
- <title>Starting BIND10 with <command>bind10</command></title>
- <para>
- BIND 10 provides the <command>bind10</command> command which
- starts up the required processes.
- <command>bind10</command>
- will also restart some processes that exit unexpectedly.
- This is the only command needed to start the BIND 10 system.
- </para>
- <para>
- After starting the <command>b10-msgq</command> communications channel,
- <command>bind10</command> connects to it,
- runs the configuration manager, and reads its own configuration.
- Then it starts the other modules.
- </para>
- <para>
- The <command>b10-sockcreator</command>, <command>b10-msgq</command> and
- <command>b10-cfgmgr</command>
- services make up the core. The <command>b10-msgq</command> daemon
- provides the communication channel between every part of the system.
- The <command>b10-cfgmgr</command> daemon is always needed by every
- module, if only to send information about themselves somewhere,
- but more importantly to ask about their own settings, and
- about other modules. The <command>b10-sockcreator</command> will
- allocate sockets for the rest of the system.
- </para>
- <para>
- In its default configuration, the <command>bind10</command>
- master process will also start up
- <command>b10-cmdctl</command> for administration tools to
- communicate with the system,
- <command>b10-auth</command> for authoritative DNS service,
- <command>b10-stats</command> for statistics collection,
- <command>b10-stats-httpd</command> for statistics reporting,
- <command>b10-xfrin</command> for inbound DNS zone transfers,
- <command>b10-xfrout</command> for outbound DNS zone transfers,
- and <command>b10-zonemgr</command> for secondary service.
- </para>
- <section id="start">
- <title>Starting BIND 10</title>
- <para>
- To start the BIND 10 service, simply run <command>bind10</command>.
- Run it with the <option>--verbose</option> switch to
- get additional debugging or diagnostic output.
- </para>
- <!-- TODO: note it doesn't go into background -->
- <note>
- <para>
- If the setproctitle Python module is detected at start up,
- the process names for the Python-based daemons will be renamed
- to better identify them instead of just <quote>python</quote>.
- This is not needed on some operating systems.
- </para>
- </note>
- </section>
- <section id="bind10.config">
- <title>Configuration of started processes</title>
- <para>
- The processes to be started can be configured, with the exception
- of the <command>b10-sockcreator</command>, <command>b10-msgq</command>
- and <command>b10-cfgmgr</command>.
- </para>
- <para>
- The configuration is in the Boss/components section. Each element
- represents one component, which is an abstraction of a process
- (currently there's also one component which doesn't represent
- a process). If you didn't want to transfer out at all (your server
- is a slave only), you would just remove the corresponding component
- from the set, like this and the process would be stopped immediately
- (and not started on the next startup):
- <screen>> <userinput>config remove Boss/components b10-xfrout</userinput>
- > <userinput>config commit</userinput></screen>
- </para>
- <para>
- To add a process to the set, let's say the resolver (which not started
- by default), you would do this:
- <screen>> <userinput>config add Boss/components b10-resolver</userinput>
- > <userinput>config set Boss/components/b10-resolver/special resolver</userinput>
- > <userinput>config set Boss/components/b10-resolver/kind needed</userinput>
- > <userinput>config set Boss/components/b10-resolver/priority 10</userinput>
- > <userinput>config commit</userinput></screen></para>
- <para>
- Now, what it means. We add an entry called b10-resolver. It is both a
- name used to reference this component in the configuration and the
- name of the process to start. Then we set some parameters on how to
- start it.
- </para>
- <para>
- The special one is for components that need some kind of special care
- during startup or shutdown. Unless specified, the component is started
- in usual way. This is the list of components that need to be started
- in a special way, with the value of special used for them:
- <table>
- <tgroup cols='3' align='left'>
- <colspec colname='component'/>
- <colspec colname='special'/>
- <colspec colname='description'/>
- <thead><row><entry>Component</entry><entry>Special</entry><entry>Description</entry></row></thead>
- <tbody>
- <row><entry>b10-auth</entry><entry>auth</entry><entry>Authoritative server</entry></row>
- <row><entry>b10-resolver</entry><entry>resolver</entry><entry>The resolver</entry></row>
- <row><entry>b10-cmdctl</entry><entry>cmdctl</entry><entry>The command control (remote control interface)</entry></row>
- <!-- TODO Either add xfrin and xfrout as well or clean up the workarounds in boss before the release -->
- </tbody>
- </tgroup>
- </table>
- </para>
- <para>
- The kind specifies how a failure of the component should
- be handled. If it is set to <quote>dispensable</quote>
- (the default unless you set something else), it will get
- started again if it fails. If it is set to <quote>needed</quote>
- and it fails at startup, the whole <command>bind10</command>
- shuts down and exits with error exit code. But if it fails
- some time later, it is just started again. If you set it
- to <quote>core</quote>, you indicate that the system is
- not usable without the component and if such component
- fails, the system shuts down no matter when the failure
- happened. This is the behaviour of the core components
- (the ones you can't turn off), but you can declare any
- other components as core as well if you wish (but you can
- turn these off, they just can't fail).
- </para>
- <para>
- The priority defines order in which the components should start.
- The ones with higher number are started sooner than the ones with
- lower ones. If you don't set it, 0 (zero) is used as the priority.
- Usually, leaving it at the default is enough.
- </para>
- <para>
- There are other parameters we didn't use in our example.
- One of them is <quote>address</quote>. It is the address
- used by the component on the <command>b10-msgq</command>
- message bus. The special components already know their
- address, but the usual ones don't. The address is by
- convention the thing after <emphasis>b10-</emphasis>, with
- the first letter capital (eg. <command>b10-stats</command>
- would have <quote>Stats</quote> as its address).
- <!-- TODO: this should be simplified so we don't even have to document it -->
- </para>
- <!-- TODO: what does "The special components already know their
- address, but the usual ones don't." mean? -->
- <!-- TODO: document params when is enabled -->
- <para>
- The last one is process. It is the name of the process to be started.
- It defaults to the name of the component if not set, but you can use
- this to override it.
- </para>
- <!-- TODO Add parameters when they work, not implemented yet-->
- <note>
- <para>
- This system allows you to start the same component multiple times
- (by including it in the configuration with different names, but the
- same process setting). However, the rest of the system doesn't expect
- such a situation, so it would probably not do what you want. Such
- support is yet to be implemented.
- </para>
- </note>
- <note>
- <para>
- The configuration is quite powerful, but that includes
- a lot of space for mistakes. You could turn off the
- <command>b10-cmdctl</command>, but then you couldn't
- change it back the usual way, as it would require it to
- be running (you would have to find and edit the configuration
- directly). Also, some modules might have dependencies:
- <command>b10-stats-httpd</command> needs
- <command>b10-stats</command>, <command>b10-xfrout</command>
- needs <command>b10-auth</command> to be running, etc.
- <!-- TODO: should we define dependencies? -->
- </para>
- <para>
- In short, you should think twice before disabling something here.
- </para>
- </note>
- <para>
- It is possible to start some components multiple times (currently
- <command>b10-auth</command> and <command>b10-resolzer</command>).
- You might want to do that to gain more performance (each one uses only
- single core). Just put multiple entries under different names, like
- this, with the same config:
- <screen>> <userinput>config add Boss/components b10-resolver-2</userinput>
- > <userinput>config set Boss/components/b10-resolver-2/special resolver</userinput>
- > <userinput>config set Boss/components/b10-resolver-2/kind needed</userinput>
- > <userinput>config commit</userinput></screen>
- </para>
- <para>
- However, this is work in progress and the support is not yet complete.
- For example, each resolver will have its own cache, each authoritative
- server will keep its own copy of in-memory data and there could be
- problems with locking the sqlite database, if used. The configuration
- might be changed to something more convenient in future.
- </para>
- </section>
- </chapter>
- <chapter id="msgq">
- <title>Command channel</title>
- <para>
- The BIND 10 components use the <command>b10-msgq</command>
- message routing daemon to communicate with other BIND 10 components.
- The <command>b10-msgq</command> implements what is called the
- <quote>Command Channel</quote>.
- Processes intercommunicate by sending messages on the command
- channel.
- Example messages include shutdown, get configurations, and set
- configurations.
- This Command Channel is not used for DNS message passing.
- It is used only to control and monitor the BIND 10 system.
- </para>
- <para>
- Administrators do not communicate directly with the
- <command>b10-msgq</command> daemon.
- By default, BIND 10 uses port 9912 for the
- <command>b10-msgq</command> service.
- It listens on 127.0.0.1.
- </para>
- <!-- TODO: this is broken, see Trac #111
- <para>
- To select an alternate port for the <command>b10-msgq</command> to
- use, run <command>bind10</command> specifying the option:
- <screen> $ <userinput>bind10 -TODO-msgq-port 9912</userinput></screen>
- </para>
- -->
- <!-- TODO: upcoming plans:
- Unix domain sockets
- -->
- </chapter>
- <chapter id="cfgmgr">
- <title>Configuration manager</title>
- <para>
- The configuration manager, <command>b10-cfgmgr</command>,
- handles all BIND 10 system configuration. It provides
- persistent storage for configuration, and notifies running
- modules of configuration changes.
- </para>
- <para>
- The <command>b10-auth</command> and <command>b10-xfrin</command>
- daemons and other components receive their configurations
- from the configuration manager over the <command>b10-msgq</command>
- command channel.
- </para>
- <para>The administrator doesn't connect to it directly, but
- uses a user interface to communicate with the configuration
- manager via <command>b10-cmdctl</command>'s REST-ful interface.
- <command>b10-cmdctl</command> is covered in <xref linkend="cmdctl"/>.
- </para>
- <!-- TODO -->
- <note>
- <para>
- The development prototype release only provides
- <command>bindctl</command> as a user interface to
- <command>b10-cmdctl</command>.
- Upcoming releases will provide another interactive command-line
- interface and a web-based interface.
- </para>
- </note>
- <para>
- The <command>b10-cfgmgr</command> daemon can send all
- specifications and all current settings to the
- <command>bindctl</command> client (via
- <command>b10-cmdctl</command>).
- </para>
- <para>
- <command>b10-cfgmgr</command> relays configurations received
- from <command>b10-cmdctl</command> to the appropriate modules.
- </para>
- <!-- TODO:
- Configuration settings for itself are defined as ConfigManager.
- TODO: show examples
- -->
- <!-- TODO:
- config changes are actually commands to cfgmgr
- -->
- <!-- TODO: what about run time config to change this? -->
- <!-- jelte: > config set cfgmgr/config_database <file> -->
- <!-- TODO: what about command line switch to change this? -->
- <para>
- The stored configuration file is at
- <filename>/usr/local/var/bind10-devel/b10-config.db</filename>.
- (The full path is what was defined at build configure time for
- <option>--localstatedir</option>.
- The default is <filename>/usr/local/var/</filename>.)
- The format is loosely based on JSON and is directly parseable
- python, but this may change in a future version.
- This configuration data file is not manually edited by the
- administrator.
- </para>
- <!--
- Well the specfiles have a more fixed format (they must contain specific
- stuff), but those are also directly parseable python structures (and
- 'coincidentally', our data::element string representation is the same)
- loosely based on json, tweaked to be directly parseable in python, but a
- subset of that.
- wiki page is http://bind10.isc.org/wiki/DataElementDesign
- nope, spec files are written by module developers, and db should be done
- through bindctl and friends
- -->
- <para>
- The configuration manager does not have any command line arguments.
- Normally it is not started manually, but is automatically
- started using the <command>bind10</command> master process
- (as covered in <xref linkend="bind10"/>).
- </para>
- <!-- TODO: upcoming plans:
- configuration for configuration manager itself. And perhaps we might
- change the messaging protocol, but an admin should never see any of that
- -->
- <!-- TODO: show examples, test this -->
- <!--
- , so an admin can simply run bindctl,
- do config show, and it shows all modules; config show >module> shows all
- options for that module
- -->
- </chapter>
- <chapter id="cmdctl">
- <title>Remote control daemon</title>
- <para>
- <command>b10-cmdctl</command> is the gateway between
- administrators and the BIND 10 system.
- It is a HTTPS server that uses standard HTTP Digest
- Authentication for username and password validation.
- It provides a REST-ful interface for accessing and controlling
- BIND 10.
- </para>
- <!-- TODO: copy examples from wiki, try with wget -->
- <para>
- When <command>b10-cmdctl</command> starts, it firsts
- asks <command>b10-cfgmgr</command> about what modules are
- running and what their configuration is (over the
- <command>b10-msgq</command> channel). Then it will start listening
- on HTTPS for clients — the user interface — such
- as <command>bindctl</command>.
- </para>
- <para>
- <command>b10-cmdctl</command> directly sends commands
- (received from the user interface) to the specified component.
- Configuration changes are actually commands to
- <command>b10-cfgmgr</command> so are sent there.
- </para>
- <!--
- TODO:
- "For bindctl to list a module's available configurations and
- available commands, it communicates over the cmdctl REST interface.
- cmdctl then asks cfgmgr over the msgq command channel. Then cfgmgr
- asks the module for its specification and also cfgmgr looks in its
- own configuration database for current values."
- (05:32:03) jelte: i think cmdctl doesn't request it upon a incoming
- GET, but rather requests it once and then listens in for updates,
- but you might wanna check with likun
- -->
- <!-- TODO: replace /usr/local -->
- <!-- TODO: permissions -->
- <para>The HTTPS server requires a private key,
- such as a RSA PRIVATE KEY.
- The default location is at
- <filename>/usr/local/etc/bind10-devel/cmdctl-keyfile.pem</filename>.
- (A sample key is at
- <filename>/usr/local/share/bind10-devel/cmdctl-keyfile.pem</filename>.)
- It also uses a certificate located at
- <filename>/usr/local/etc/bind10-devel/cmdctl-certfile.pem</filename>.
- (A sample certificate is at
- <filename>/usr/local/share/bind10-devel/cmdctl-certfile.pem</filename>.)
- This may be a self-signed certificate or purchased from a
- certification authority.
- </para>
- <note><para>
- The HTTPS server doesn't support a certificate request from a
- client (at this time).
- <!-- TODO: maybe allow request from server side -->
- The <command>b10-cmdctl</command> daemon does not provide a
- public service. If any client wants to control BIND 10, then
- a certificate needs to be first received from the BIND 10
- administrator.
- The BIND 10 installation provides a sample PEM bundle that matches
- the sample key and certificate.
- </para></note>
- <!-- TODO: cross-ref -->
- <!-- TODO
- openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
- but that is a single file, maybethis should go back to that format?
- -->
- <!--
- <para>
- (08:20:56) shane: It is in theory possible to run without cmdctl.
- (08:21:02) shane: I think we discussed this.
- </para>
- -->
- <!-- TODO: Please check https://bind10.isc.org/wiki/cmd-ctrld -->
- <para>
- The <command>b10-cmdctl</command> daemon also requires
- the user account file located at
- <filename>/usr/local/etc/bind10-devel/cmdctl-accounts.csv</filename>.
- This comma-delimited file lists the accounts with a user name,
- hashed password, and salt.
- (A sample file is at
- <filename>/usr/local/share/bind10-devel/cmdctl-accounts.csv</filename>.
- It contains the user named <quote>root</quote> with the password
- <quote>bind10</quote>.)
- </para>
- <para>
- The administrator may create a user account with the
- <command>b10-cmdctl-usermgr</command> tool.
- </para>
- <!-- TODO: show example -->
- <!-- TODO: does cmdctl need to be restarted to change cert or key
- or accounts database -->
- <para>
- By default the HTTPS server listens on the localhost port 8080.
- The port can be set by using the <option>--port</option> command line option.
- The address to listen on can be set using the <option>--address</option> command
- line argument.
- Each HTTPS connection is stateless and times out in 1200 seconds
- by default. This can be
- redefined by using the <option>--idle-timeout</option> command line argument.
- </para>
- <section id="cmdctl.spec">
- <title>Configuration specification for b10-cmdctl</title>
- <para>
- The configuration items for <command>b10-cmdctl</command> are:
- key_file
- cert_file
- accounts_file
- </para>
- <!-- TODO -->
- <para>
- The control commands are:
- print_settings
- <!-- TODO: remove that -->
- shutdown
- </para>
- <!-- TODO -->
- </section>
- <!--
- TODO
- (12:21:30) jinmei: I'd like to have sample session using a command line www client such as wget
- (12:21:33) jinmei: btw
- -->
- </chapter>
- <chapter id="bindctl">
- <title>Control and configure user interface</title>
- <note><para>
- For this development prototype release, <command>bindctl</command>
- is the only user interface. It is expected that upcoming
- releases will provide another interactive command-line
- interface and a web-based interface for controlling and
- configuring BIND 10.
- </para></note>
- <para>
- The <command>bindctl</command> tool provides an interactive
- prompt for configuring, controlling, and querying the BIND 10
- components.
- It communicates directly with a REST-ful interface over HTTPS
- provided by <command>b10-cmdctl</command>. It doesn't
- communicate to any other components directly.
- </para>
- <!-- TODO: explain and show interface -->
- <para>
- Configuration changes are actually commands to
- <command>b10-cfgmgr</command>. So when <command>bindctl</command>
- sends a configuration, it is sent to <command>b10-cmdctl</command>
- (over a HTTPS connection); then <command>b10-cmdctl</command>
- sends the command (over a <command>b10-msgq</command> command
- channel) to <command>b10-cfgmgr</command> which then stores
- the details and relays (over a <command>b10-msgq</command> command
- channel) the configuration on to the specified module.
- </para>
- <para>
- </para>
- </chapter>
- <chapter id="authserver">
- <title>Authoritative Server</title>
- <para>
- The <command>b10-auth</command> is the authoritative DNS server.
- It supports EDNS0 and DNSSEC. It supports IPv6.
- Normally it is started by the <command>bind10</command> master
- process.
- </para>
- <section>
- <title>Server Configurations</title>
- <!-- TODO: offers command line options but not used
- since we used bind10 -->
- <para>
- <command>b10-auth</command> is configured via the
- <command>b10-cfgmgr</command> configuration manager.
- The module name is <quote>Auth</quote>.
- The configuration data items are:
- <variablelist>
- <varlistentry>
- <term>database_file</term>
- <listitem>
- <simpara>This is an optional string to define the path to find
- the SQLite3 database file.
- <!-- TODO: -->
- Note: Later the DNS server will use various data source backends.
- This may be a temporary setting until then.
- </simpara>
- </listitem>
- </varlistentry>
- <!-- NOTE: docs pulled in verbatim from the b10-auth.xml manual page.
- TODO: automate this if want this or rewrite
- -->
- <varlistentry>
- <term>datasources</term>
- <listitem>
- <simpara>
- <varname>datasources</varname> configures data sources.
- The list items include:
- <varname>type</varname> to optionally choose the data source type
- (such as <quote>memory</quote>);
- <varname>class</varname> to optionally select the class
- (it defaults to <quote>IN</quote>);
- and
- <varname>zones</varname> to define the
- <varname>file</varname> path name and the
- <varname>origin</varname> (default domain).
- By default, this is empty.
- <note><simpara>
- In this development version, currently this is only used for the
- memory data source.
- Only the IN class is supported at this time.
- By default, the memory data source is disabled.
- Also, currently the zone file must be canonical such as
- generated by <command>named-compilezone -D</command>.
- </simpara></note>
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>listen_on</term>
- <listitem>
- <simpara>
- <varname>listen_on</varname> is a list of addresses and ports for
- <command>b10-auth</command> to listen on.
- The list items are the <varname>address</varname> string
- and <varname>port</varname> number.
- By default, <command>b10-auth</command> listens on port 53
- on the IPv6 (::) and IPv4 (0.0.0.0) wildcard addresses.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>statistics-interval</term>
- <listitem>
- <simpara>
- <varname>statistics-interval</varname> is the timer interval
- in seconds for <command>b10-auth</command> to share its
- statistics information to
- <citerefentry><refentrytitle>b10-stats</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
- Statistics updates can be disabled by setting this to 0.
- The default is 60.
- </simpara>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- <para>
- The configuration commands are:
- <variablelist>
- <varlistentry>
- <term>loadzone</term>
- <listitem>
- <simpara>
- <command>loadzone</command> tells <command>b10-auth</command>
- to load or reload a zone file. The arguments include:
- <varname>class</varname> which optionally defines the class
- (it defaults to <quote>IN</quote>);
- <varname>origin</varname> is the domain name of the zone;
- and
- <varname>datasrc</varname> optionally defines the type of datasource
- (it defaults to <quote>memory</quote>).
- <note><simpara>
- In this development version, currently this only supports the
- IN class and the memory data source.
- </simpara></note>
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>sendstats</term>
- <listitem>
- <simpara>
- <command>sendstats</command> tells <command>b10-auth</command>
- to send its statistics data to
- <citerefentry><refentrytitle>b10-stats</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- immediately.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>shutdown</term>
- <listitem>
- <simpara>Stop the authoritative DNS server.
- This has an optional <varname>pid</varname> argument to
- select the process ID to stop.
- (Note that the BIND 10 boss process may restart this service
- if configured.)
- </simpara>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- <!-- TODO: examples of setting or running above? -->
- </section>
- <section>
- <title>Data Source Backends</title>
- <note><para>
- For the development prototype release, <command>b10-auth</command>
- supports a SQLite3 data source backend and in-memory data source
- backend.
- Upcoming versions will be able to use multiple different
- data sources, such as MySQL and Berkeley DB.
- </para></note>
- <para>
- By default, the SQLite3 backend uses the data file located at
- <filename>/usr/local/var/bind10-devel/zone.sqlite3</filename>.
- (The full path is what was defined at build configure time for
- <option>--localstatedir</option>.
- The default is <filename>/usr/local/var/</filename>.)
- This data file location may be changed by defining the
- <quote>database_file</quote> configuration.
- </para>
- <section id="in-memory-datasource">
- <title>In-memory Data Source</title>
- <para>
- <!-- How to configure it. -->
- The following commands to <command>bindctl</command>
- provide an example of configuring an in-memory data
- source containing the <quote>example.com</quote> zone
- with the zone file named <quote>example.com.zone</quote>:
- <!--
- <screen>> <userinput> config set Auth/datasources/ [{"type": "memory", "zones": [{"origin": "example.com", "file": "example.com.zone"}]}]</userinput></screen>
- -->
- <screen>> <userinput>config add Auth/datasources</userinput>
- > <userinput>config set Auth/datasources[0]/type "<option>memory</option>"</userinput>
- > <userinput>config add Auth/datasources[0]/zones</userinput>
- > <userinput>config set Auth/datasources[0]/zones[0]/origin "<option>example.com</option>"</userinput>
- > <userinput>config set Auth/datasources[0]/zones[0]/file "<option>example.com.zone</option>"</userinput>
- > <userinput>config commit</userinput></screen>
- </para>
- <!--
- <para>
- The <varname>file</varname> may be an absolute path to the
- master zone file or it is relative to the directory BIND 10 is
- started from.
- </para>
- -->
- <para>
- By default, the memory data source is disabled; it must be
- configured explicitly. To disable it again, specify a null list
- for <varname>Auth/datasources</varname>:
- <screen>> <userinput>config set Auth/datasources/ []</userinput>
- > <userinput>config commit</userinput></screen>
- </para>
- <para>
- The following example stops serving a specific zone:
- <screen>> <userinput>config remove Auth/datasources[<option>0</option>]/zones[<option>0</option>]</userinput>
- > <userinput>config commit</userinput></screen>
- </para>
- </section>
- </section>
- <section>
- <title>Loading Master Zones Files</title>
- <para>
- RFC 1035 style DNS master zone files may imported
- into a BIND 10 SQLite3 data source by using the
- <command>b10-loadzone</command> utility.
- </para>
- <para>
- <command>b10-loadzone</command> supports the following
- special directives (control entries):
- <variablelist>
- <varlistentry>
- <term>$INCLUDE</term>
- <listitem>
- <simpara>Loads an additional zone file. This may be recursive.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>$ORIGIN</term>
- <listitem>
- <simpara>Defines the relative domain name.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>$TTL</term>
- <listitem>
- <simpara>Defines the time-to-live value used for following
- records that don't include a TTL.
- </simpara>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- <para>
- The <option>-o</option> argument may be used to define the
- default origin for loaded zone file records.
- </para>
- <note>
- <para>
- In the development prototype release, only the SQLite3 back
- end is used.
- By default, it stores the zone data in
- <filename>/usr/local/var/bind10-devel/zone.sqlite3</filename>
- unless the <option>-d</option> switch is used to set the
- database filename.
- Multiple zones are stored in a single SQLite3 zone database.
- </para>
- </note>
- <para>
- If you reload a zone already existing in the database,
- all records from that prior zone disappear and a whole new set
- appears.
- </para>
- <!--TODO: permissions for xfrin or loadzone to create the file -->
- </section>
- <!--
- TODO
- <section>
- <title>Troubleshooting</title>
- <para>
- </para>
- </section>
- -->
- </chapter>
- <chapter id="xfrin">
- <title>Incoming Zone Transfers</title>
- <para>
- Incoming zones are transferred using the <command>b10-xfrin</command>
- process which is started by <command>bind10</command>.
- When received, the zone is stored in the corresponding BIND 10
- data source, and its records can be served by
- <command>b10-auth</command>.
- In combination with <command>b10-zonemgr</command> (for
- automated SOA checks), this allows the BIND 10 server to
- provide <quote>secondary</quote> service.
- </para>
- <para>
- The <command>b10-xfrin</command> process supports both AXFR and
- IXFR. Due to some implementation limitations of the current
- development release, however, it only tries AXFR by default,
- and care should be taken to enable IXFR.
- </para>
- <!-- TODO: http://bind10.isc.org/ticket/1279 -->
- <note><simpara>
- In the current development release of BIND 10, incoming zone
- transfers are only available for SQLite3-based data sources,
- that is, they don't work for an in-memory data source.
- </simpara></note>
- <section>
- <title>Configuration for Incoming Zone Transfers</title>
- <para>
- In practice, you need to specify a list of secondary zones to
- enable incoming zone transfers for these zones (you can still
- trigger a zone transfer manually, without a prior configuration
- (see below)).
- </para>
- <para>
- For example, to enable zone transfers for a zone named "example.com"
- (whose master address is assumed to be 2001:db8::53 here),
- run the following at the <command>bindctl</command> prompt:
- <screen>> <userinput>config add Xfrin/zones</userinput>
- > <userinput>config set Xfrin/zones[0]/name "<option>example.com</option>"</userinput>
- > <userinput>config set Xfrin/zones[0]/master_addr "<option>2001:db8::53</option>"</userinput>
- > <userinput>config commit</userinput></screen>
- (We assume there has been no zone configuration before).
- </para>
- </section>
- <section>
- <title>Enabling IXFR</title>
- <para>
- As noted above, <command>b10-xfrin</command> uses AXFR for
- zone transfers by default. To enable IXFR for zone transfers
- for a particular zone, set the <userinput>use_ixfr</userinput>
- configuration parameter to <userinput>true</userinput>.
- In the above example of configuration sequence, you'll need
- to add the following before performing <userinput>commit</userinput>:
- <screen>> <userinput>config set Xfrin/zones[0]/use_ixfr true</userinput></screen>
- </para>
- <!-- TODO: http://bind10.isc.org/ticket/1279 -->
- <note><simpara>
- One reason why IXFR is disabled by default in the current
- release is because it does not support automatic fallback from IXFR to
- AXFR when it encounters a primary server that doesn't support
- outbound IXFR (and, not many existing implementations support
- it). Another, related reason is that it does not use AXFR even
- if it has no knowledge about the zone (like at the very first
- time the secondary server is set up). IXFR requires the
- "current version" of the zone, so obviously it doesn't work
- in this situation and AXFR is the only workable choice.
- The current release of <command>b10-xfrin</command> does not
- make this selection automatically.
- These features will be implemented in a near future
- version, at which point we will enable IXFR by default.
- </simpara></note>
- </section>
- <!-- TODO:
- how to tell bind10 you are a secondary?
- when will it first attempt to check for new zone? (using REFRESH?)
- what if zonemgr is not running?
- what if a NOTIFY is sent?
- -->
- <section id="zonemgr">
- <title>Secondary Manager</title>
- <para>
- The <command>b10-zonemgr</command> process is started by
- <command>bind10</command>.
- It keeps track of SOA refresh, retry, and expire timers
- and other details for BIND 10 to perform as a slave.
- When the <command>b10-auth</command> authoritative DNS server
- receives a NOTIFY message, <command>b10-zonemgr</command>
- may tell <command>b10-xfrin</command> to do a refresh
- to start an inbound zone transfer.
- The secondary manager resets its counters when a new zone is
- transferred in.
- </para>
- <note><simpara>
- Access control (such as allowing notifies) is not yet provided.
- The primary/secondary service is not yet complete.
- </simpara></note>
- <para>
- The following example shows using <command>bindctl</command>
- to configure the server to be a secondary for the example zone:
- <screen>> <userinput>config add Zonemgr/secondary_zones</userinput>
- > <userinput>config set Zonemgr/secondary_zones[0]/name "<option>example.com</option>"</userinput>
- > <userinput>config set Zonemgr/secondary_zones[0]/class "<option>IN</option>"</userinput>
- > <userinput>config commit</userinput></screen>
- <!-- TODO: remove the IN class example above when it is the default -->
- </para>
- <para>
- If the zone does not exist in the data source already
- (i.e. no SOA record for it), <command>b10-zonemgr</command>
- will automatically tell <command>b10-xfrin</command>
- to transfer the zone in.
- </para>
- </section>
- <section>
- <title>Trigger an Incoming Zone Transfer Manually</title>
- <para>
- To manually trigger a zone transfer to retrieve a remote zone,
- you may use the <command>bindctl</command> utility.
- For example, at the <command>bindctl</command> prompt run:
- <screen>> <userinput>Xfrin retransfer zone_name="<option>foo.example.org</option>" master=<option>192.0.2.99</option></userinput></screen>
- </para>
- </section>
- <!-- TODO: can that retransfer be used to identify a new zone? -->
- <!-- TODO: what if doesn't exist at that master IP? -->
- </chapter>
- <chapter id="xfrout">
- <title>Outbound Zone Transfers</title>
- <para>
- The <command>b10-xfrout</command> process is started by
- <command>bind10</command>.
- When the <command>b10-auth</command> authoritative DNS server
- receives an AXFR or IXFR request, <command>b10-auth</command>
- internally forwards the request to <command>b10-xfrout</command>,
- which handles the rest of request processing.
- This is used to provide primary DNS service to share zones
- to secondary name servers.
- The <command>b10-xfrout</command> is also used to send
- NOTIFY messages to secondary servers.
- </para>
- <para>
- A global or per zone <option>transfer_acl</option> configuration
- can be used to control accessibility of the outbound zone
- transfer service.
- By default, <command>b10-xfrout</command> allows any clients to
- perform zone transfers for any zones:
- </para>
- <screen>> <userinput>config show Xfrout/transfer_acl</userinput>
- Xfrout/transfer_acl[0] {"action": "ACCEPT"} any (default)</screen>
- <para>
- You can change this to, for example, rejecting all transfer
- requests by default while allowing requests for the transfer
- of zone "example.com" from 192.0.2.1 and 2001:db8::1 as follows:
- </para>
- <screen>> <userinput>config set Xfrout/transfer_acl[0] {"action": "REJECT"}</userinput>
- > <userinput>config add Xfrout/zone_config</userinput>
- > <userinput>config set Xfrout/zone_config[0]/origin "example.com"</userinput>
- > <userinput>config set Xfrout/zone_config[0]/transfer_acl [{"action": "ACCEPT", "from": "192.0.2.1"},</userinput>
- <userinput> {"action": "ACCEPT", "from": "2001:db8::1"}]</userinput>
- > <userinput>config commit</userinput></screen>
- <note><simpara>
- In the above example the lines
- for <option>transfer_acl</option> were divided for
- readability. In the actual input it must be in a single line.
- </simpara></note>
- <para>
- If you want to require TSIG in access control, a system wide TSIG
- "key ring" must be configured.
- For example, to change the previous example to allowing requests
- from 192.0.2.1 signed by a TSIG with a key name of
- "key.example", you'll need to do this:
- </para>
- <screen>> <userinput>config set tsig_keys/keys ["key.example:<base64-key>"]</userinput>
- > <userinput>config set Xfrout/zone_config[0]/transfer_acl [{"action": "ACCEPT", "from": "192.0.2.1", "key": "key.example"}]</userinput>
- > <userinput>config commit</userinput></screen>
- <para>Both Xfrout and Auth will use the system wide keyring to check
- TSIGs in the incoming messages and to sign responses.</para>
- <note><simpara>
- The way to specify zone specific configuration (ACLs, etc) is
- likely to be changed.
- </simpara></note>
- <!--
- TODO:
- xfrout section:
- auth servers checks for AXFR query
- sends the XFR query to the xfrout module
- uses /tmp/auth_xfrout_conn which is a socket
- what is XfroutClient xfr_client??
- /tmp/auth_xfrout_conn is not removed
- -->
- </chapter>
- <chapter id="resolverserver">
- <title>Recursive Name Server</title>
- <para>
- The <command>b10-resolver</command> process is started by
- <command>bind10</command>.
- <!-- TODO
- It provides a resolver so DNS clients can ask it to do recursion
- and it will return answers.
- -->
- </para>
- <para>
- The main <command>bind10</command> process can be configured
- to select to run either the authoritative or resolver or both.
- By default, it starts the authoritative service.
- <!-- TODO: later both -->
- You may change this using <command>bindctl</command>, for example:
- <screen>
- > <userinput>config remove Boss/components b10-xfrout</userinput>
- > <userinput>config remove Boss/components b10-xfrin</userinput>
- > <userinput>config remove Boss/components b10-auth</userinput>
- > <userinput>config add Boss/components b10-resolver</userinput>
- > <userinput>config set Boss/components/b10-resolver/special resolver</userinput>
- > <userinput>config set Boss/components/b10-resolver/kind needed</userinput>
- > <userinput>config set Boss/components/b10-resolver/priority 10</userinput>
- > <userinput>config commit</userinput>
- </screen>
- </para>
- <para>
- The master <command>bind10</command> will stop and start
- the desired services.
- </para>
- <para>
- By default, the resolver listens on port 53 for 127.0.0.1 and ::1.
- The following example shows how it can be configured to
- listen on an additional address (and port):
- <screen>
- > <userinput>config add Resolver/listen_on</userinput>
- > <userinput>config set Resolver/listen_on[<replaceable>2</replaceable>]/address "192.168.1.1"</userinput>
- > <userinput>config set Resolver/listen_on[<replaceable>2</replaceable>]/port 53</userinput>
- > <userinput>config commit</userinput>
- </screen>
- </para>
- <simpara>(Replace the <quote><replaceable>2</replaceable></quote>
- as needed; run <quote><userinput>config show
- Resolver/listen_on</userinput></quote> if needed.)</simpara>
- <!-- TODO: this example should not include the port, ticket #1185 -->
- <section>
- <title>Access Control</title>
- <para>
- By default, the <command>b10-resolver</command> daemon only accepts
- DNS queries from the localhost (127.0.0.1 and ::1).
- The <option>Resolver/query_acl</option> configuration may
- be used to reject, drop, or allow specific IPs or networks.
- This configuration list is first match.
- </para>
- <para>
- The configuration's <option>action</option> item may be
- set to <quote>ACCEPT</quote> to allow the incoming query,
- <quote>REJECT</quote> to respond with a DNS REFUSED return
- code, or <quote>DROP</quote> to ignore the query without
- any response (such as a blackhole). For more information,
- see the respective debugging messages: <ulink
- url="bind10-messages.html#RESOLVER_QUERY_ACCEPTED">RESOLVER_QUERY_ACCEPTED</ulink>,
- <ulink
- url="bind10-messages.html#RESOLVER_QUERY_REJECTED">RESOLVER_QUERY_REJECTED</ulink>,
- and <ulink
- url="bind10-messages.html#RESOLVER_QUERY_DROPPED">RESOLVER_QUERY_DROPPED</ulink>.
- </para>
- <para>
- The required configuration's <option>from</option> item is set
- to an IPv4 or IPv6 address, addresses with an network mask, or to
- the special lowercase keywords <quote>any6</quote> (for
- any IPv6 address) or <quote>any4</quote> (for any IPv4
- address).
- </para>
- <!-- TODO:
- /0 is for any address in that address family
- does that need any address too?
- TODO: tsig
- -->
- <para>
- For example to allow the <replaceable>192.168.1.0/24</replaceable>
- network to use your recursive name server, at the
- <command>bindctl</command> prompt run:
- </para>
- <screen>
- > <userinput>config add Resolver/query_acl</userinput>
- > <userinput>config set Resolver/query_acl[<replaceable>2</replaceable>]/action "ACCEPT"</userinput>
- > <userinput>config set Resolver/query_acl[<replaceable>2</replaceable>]/from "<replaceable>192.168.1.0/24</replaceable>"</userinput>
- > <userinput>config commit</userinput>
- </screen>
- <simpara>(Replace the <quote><replaceable>2</replaceable></quote>
- as needed; run <quote><userinput>config show
- Resolver/query_acl</userinput></quote> if needed.)</simpara>
- <!-- TODO: check this -->
- <note><simpara>This prototype access control configuration
- syntax may be changed.</simpara></note>
- </section>
- <section>
- <title>Forwarding</title>
- <para>
- To enable forwarding, the upstream address and port must be
- configured to forward queries to, such as:
- <screen>
- > <userinput>config set Resolver/forward_addresses [{ "address": "<replaceable>192.168.1.1</replaceable>", "port": 53 }]</userinput>
- > <userinput>config commit</userinput>
- </screen>
- (Replace <replaceable>192.168.1.1</replaceable> to point to your
- full resolver.)
- </para>
- <para>
- Normal iterative name service can be re-enabled by clearing the
- forwarding address(es); for example:
- <screen>
- > <userinput>config set Resolver/forward_addresses []</userinput>
- > <userinput>config commit</userinput>
- </screen>
- </para>
- </section>
- <!-- TODO: later try this
- > config set Resolver/forward_addresses[0]/address "192.168.8.8"
- > config set Resolver/forward_addresses[0]/port 53
- then change those defaults with config set Resolver/forward_addresses[0]/address "1.2.3.4"
- > config set Resolver/forward_addresses[0]/address "1.2.3.4"
- -->
- </chapter>
- <chapter id="dhcp4">
- <title>DHCPv4 Server</title>
- <para>Dynamic Host Configuration Protocol for IPv4 (DHCP or
- DHCPv4) and Dynamic Host Configuration Protocol for IPv6 (DHCPv6)
- are protocols that allow one node (server) to provision
- configuration parameters to many hosts and devices (clients). To
- ease deployment in larger networks, additional nodes (relays) may
- be deployed that facilitate communication between servers and
- clients. Even though principles of both DHCPv4 and DHCPv6 are
- somewhat similar, these are two radically different
- protocols. BIND10 offers server implementations for both DHCPv4
- and DHCPv6. This chapter is about DHCP for IPv4. For a description
- of the DHCPv6 server, see <xref linkend="dhcp6"/>.</para>
- <para>The DHCPv4 server component is currently under intense
- development. You may want to check out <ulink
- url="http://bind10.isc.org/wiki/Kea">BIND10 DHCP (Kea) wiki</ulink>
- and recent posts on <ulink
- url="https://lists.isc.org/mailman/listinfo/bind10-dev">BIND10
- developers mailing list</ulink>.</para>
- <para>The DHCPv4 and DHCPv6 components in BIND10 architecture are
- internally code named <quote>Kea</quote>.</para>
- <note>
- <para>
- As of December 2011, both DHCPv4 and DHCPv6 components are
- skeleton servers. That means that while they are capable of
- performing DHCP configuration, they are not fully functional
- yet. In particular, neither has functional lease
- databases. This means that they will assign the same, fixed,
- hardcoded addresses to any client that will ask. See <xref
- linkend="dhcp4-limit"/> and <xref linkend="dhcp6-limit"/> for
- detailed description.
- </para>
- </note>
- <section id="dhcp4-usage">
- <title>DHCPv4 Server Usage</title>
- <para>BIND10 provides the DHCPv4 server component since December
- 2011. It is a skeleton server and can be described as an early
- prototype that is not fully functional yet. It is mature enough
- to conduct first tests in lab environment, but it has
- significant limitations. See <xref linkend="dhcp4-limit"/> for
- details.
- </para>
- <para>
- The DHCPv4 server is implemented as <command>b10-dhcp4</command>
- daemon. As it is not configurable yet, it is fully autonomous,
- that is it does not interact with <command>b10-cfgmgr</command>.
- To start DHCPv4 server, simply input:
- <screen>
- #<userinput>cd src/bin/dhcp4</userinput>
- #<userinput>./b10-dhcp4</userinput>
- </screen>
- Depending on your installation, <command>b10-dhcp4</command>
- binary may reside in src/bin/dhcp4 in your source code
- directory, in /usr/local/bin/b10-dhcp4 or other directory
- you specified during compilation.
- At start, the server will detect available network interfaces
- and will attempt to open UDP sockets on all interfaces that
- are up, running, are not loopback, and have IPv4 address
- assigned.
- The server will then listen to incoming traffic. Currently
- supported client messages are DISCOVER and REQUEST. The server
- will respond to them with OFFER and ACK, respectively.
- Since the DHCPv4 server opens privileged ports, it requires root
- access. Make sure you run this daemon as root.</para>
- <note>
- <para>
- Integration with <command>bind10</command> is
- planned. Ultimately, <command>b10-dhcp4</command> will not
- be started directly, but rather via
- <command>bind10</command>. Please be aware of this planned
- change.
- </para>
- </note>
- </section>
- <section id="dhcp4-config">
- <title>DHCPv4 Server Configuration</title>
- <para>
- The DHCPv4 server does not have a lease database implemented yet
- nor any support for configuration, so every time the same set
- of configuration options (including the same fixed address)
- will be assigned every time.
- </para>
- <para>
- At this stage of development, the only way to alter the server
- configuration is to tweak its source code. To do so, please
- edit src/bin/dhcp4/dhcp4_srv.cc file and modify following
- parameters and recompile:
- <screen>
- const std::string HARDCODED_LEASE = "192.0.2.222"; // assigned lease
- const std::string HARDCODED_NETMASK = "255.255.255.0";
- const uint32_t HARDCODED_LEASE_TIME = 60; // in seconds
- const std::string HARDCODED_GATEWAY = "192.0.2.1";
- const std::string HARDCODED_DNS_SERVER = "192.0.2.2";
- const std::string HARDCODED_DOMAIN_NAME = "isc.example.com";
- const std::string HARDCODED_SERVER_ID = "192.0.2.1";</screen>
- Lease database and configuration support is planned for 2012.
- </para>
- </section>
- <section id="dhcp4-std">
- <title>Supported standards</title>
- <para>The following standards and draft standards are currently
- supported:</para>
- <itemizedlist>
- <listitem>
- <simpara>RFC2131: Supported messages are DISCOVER, OFFER,
- REQUEST, and ACK.</simpara>
- </listitem>
- <listitem>
- <simpara>RFC2132: Supported options are: PAD (0),
- END(255), Message Type(53), DHCP Server Identifier (54),
- Domain Name (15), DNS Servers (6), IP Address Lease Time
- (51), Subnet mask (1), and Routers (3).</simpara>
- </listitem>
- </itemizedlist>
- </section>
- <section id="dhcp4-limit">
- <title>DHCPv4 Server Limitations</title>
- <para>These are the current limitations of the DHCPv4 server
- software. Most of them are reflections of the early stage of
- development and should be treated as <quote>not implemented
- yet</quote>, rather than actual limitations.</para>
- <itemizedlist>
- <listitem>
- <simpara>During initial IPv4 node configuration, the
- server is expected to send packets to a node that does not
- have IPv4 address assigned yet. The server requires
- certain tricks (or hacks) to transmit such packets. This
- is not implemented yet, therefore DHCPv4 server supports
- relayed traffic only (that is, normal point to point
- communication).</simpara>
- </listitem>
- <listitem>
- <simpara><command>b10-dhcp4</command> provides a single,
- fixed, hardcoded lease to any client that asks. There is
- no lease manager implemented. If two clients request
- addresses, they will both get the same fixed
- address.</simpara>
- </listitem>
- <listitem>
- <simpara><command>b10-dhcp4</command> does not support any
- configuration mechanisms yet. The whole configuration is
- currently hardcoded. The only way to tweak configuration
- is to directly modify source code. See see <xref
- linkend="dhcp4-config"/> for details.</simpara>
- </listitem>
- <listitem>
- <simpara>Upon start, the server will open sockets on all
- interfaces that are not loopback, are up and running and
- have IPv4 address. Support for multiple interfaces is not
- coded in reception routines yet, so if you are running
- this code on a machine that has many interfaces and
- <command>b10-dhcp4</command> happens to listen on wrong
- interface, the easiest way to work around this problem is
- to turn down other interfaces. This limitation will be
- fixed shortly.</simpara>
- </listitem>
- <listitem>
- <simpara>PRL (Parameter Request List, a list of options
- requested by a client) is currently ignored and server
- assigns DNS SERVER and DOMAIN NAME options.</simpara>
- </listitem>
- <listitem>
- <simpara><command>b10-dhcp4</command> does not support
- BOOTP. That is a design choice. This limitation is
- permanent. If you have legacy nodes that can't use DHCP and
- require BOOTP support, please use latest version of ISC DHCP
- <ulink url="http://www.isc.org/software/dhcp"/>.</simpara>
- </listitem>
- <listitem>
- <simpara>Interface detection is currently working on Linux
- only. See <xref linkend="iface-detect"/> for details.</simpara>
- </listitem>
- <listitem>
- <simpara><command>b10-dhcp4</command> does not verify that
- assigned address is unused. According to RFC2131, the
- allocating server should verify that address is no used by
- sending ICMP echo request.</simpara>
- </listitem>
- <listitem>
- <simpara>Address renewal (RENEW), rebinding (REBIND),
- confirmation (CONFIRM), duplication report (DECLINE) and
- release (RELEASE) are not supported yet.</simpara>
- </listitem>
- <listitem>
- <simpara>DNS Update is not supported yet.</simpara>
- </listitem>
- <listitem>
- <simpara>-v (verbose) command line option is currently
- the default, and cannot be disabled.</simpara>
- </listitem>
- </itemizedlist>
- </section>
- </chapter>
- <chapter id="dhcp6">
- <title>DHCPv6 Server</title>
- <para>Dynamic Host Configuration Protocol for IPv6 (DHCPv6) is
- specified in RFC3315. BIND10 provides DHCPv6 server implementation
- that is described in this chapter. For a description of the DHCPv4
- server implementation, see <xref linkend="dhcp4"/>.
- </para>
- <para>The DHCPv6 server component is currently under intense
- development. You may want to check out <ulink
- url="http://bind10.isc.org/wiki/Kea">BIND10 DHCP (Kea) wiki</ulink>
- and recent posts on <ulink
- url="https://lists.isc.org/mailman/listinfo/bind10-dev">BIND10
- developers mailing list</ulink>.</para>
- <para>The DHCPv4 and DHCPv6 components in BIND10 architecture are
- internally code named <quote>Kea</quote>.</para>
- <note>
- <para>
- As of December 2011, both DHCPv4 and DHCPv6 components are
- skeleton servers. That means that while they are capable of
- performing DHCP configuration, they are not fully functional
- yet. In particular, neither has functional lease
- databases. This means that they will assign the same, fixed,
- hardcoded addresses to any client that will ask. See <xref
- linkend="dhcp4-limit"/> and <xref linkend="dhcp6-limit"/> for
- detailed description.
- </para>
- </note>
- <section id="dhcp6-usage">
- <title>DHCPv6 Server Usage</title>
- <para>
- BIND10 provides the DHCPv6 server component since September
- 2011. It is a skeleton server and can be described as an early
- prototype that is not fully functional yet. It is mature
- enough to conduct first tests in lab environment, but it has
- significant limitations. See <xref linkend="dhcp6-limit"/> for
- details.
- </para>
- <para>
- The DHCPv6 server is implemented as <command>b10-dhcp6</command>
- daemon. As it is not configurable yet, it is fully autonomous,
- that is it does not interact with <command>b10-cfgmgr</command>.
- To start DHCPv6 server, simply input:
- <screen>
- #<userinput>cd src/bin/dhcp6</userinput>
- #<userinput>./b10-dhcp6</userinput>
- </screen>
- Depending on your installation, <command>b10-dhcp6</command>
- binary may reside in src/bin/dhcp6 in your source code
- directory, in /usr/local/bin/b10-dhcp6 or other directory
- you specified during compilation.
- At start, server will detect available network interfaces
- and will attempt to open UDP sockets on all interfaces that
- are up, running, are not loopback, are multicast-capable, and
- have IPv6 address assigned.
- The server will then listen to incoming traffic. Currently
- supported client messages are SOLICIT and REQUEST. The server
- will respond to them with ADVERTISE and REPLY, respectively.
- Since the DHCPv6 server opens privileged ports, it requires root
- access. Make sure you run this daemon as root.
- </para>
- <note>
- <para>
- Integration with <command>bind10</command> is
- planned. Ultimately, <command>b10-dhcp6</command> will not
- be started directly, but rather via
- <command>bind10</command>. Please be aware of this planned
- change.
- </para>
- </note>
- </section>
- <section id="dhcp6-config">
- <title>DHCPv6 Server Configuration</title>
- <para>
- The DHCPv6 server does not have lease database implemented yet
- or any support for configuration, so every time the same set
- of configuration options (including the same fixed address)
- will be assigned every time.
- </para>
- <para>
- At this stage of development, the only way to alter server
- configuration is to tweak its source code. To do so, please
- edit src/bin/dhcp6/dhcp6_srv.cc file and modify following
- parameters and recompile:
- <screen>
- const std::string HARDCODED_LEASE = "2001:db8:1::1234:abcd";
- const uint32_t HARDCODED_T1 = 1500; // in seconds
- const uint32_t HARDCODED_T2 = 2600; // in seconds
- const uint32_t HARDCODED_PREFERRED_LIFETIME = 3600; // in seconds
- const uint32_t HARDCODED_VALID_LIFETIME = 7200; // in seconds
- const std::string HARDCODED_DNS_SERVER = "2001:db8:1::1";</screen>
- Lease database and configuration support is planned for 2012.
- </para>
- </section>
- <section id="dhcp6-std">
- <title>Supported DHCPv6 Standards</title>
- <para>The following standards and draft standards are currently
- supported:</para>
- <itemizedlist>
- <listitem>
- <simpara>RFC3315: Supported messages are SOLICIT,
- ADVERTISE, REQUEST, and REPLY. Supported options are
- SERVER_ID, CLIENT_ID, IA_NA, and IAADDRESS.</simpara>
- </listitem>
- <listitem>
- <simpara>RFC3646: Supported option is DNS_SERVERS.</simpara>
- </listitem>
- </itemizedlist>
- </section>
- <section id="dhcp6-limit">
- <title>DHCPv6 Server Limitations</title>
- <para> These are the current limitations of the DHCPv6 server
- software. Most of them are reflections of the early stage of
- development and should be treated as <quote>not implemented
- yet</quote>, rather than actual limitations.</para>
- <para>
- <itemizedlist>
- <listitem>
- <simpara>Relayed traffic is not supported.</simpara>
- </listitem>
- <listitem>
- <simpara><command>b10-dhcp6</command> provides a single,
- fixed, hardcoded lease to any client that asks. There is no
- lease manager implemented. If two clients request addresses,
- they will both get the same fixed address.</simpara>
- </listitem>
- <listitem>
- <simpara><command>b10-dhcp6</command> does not support any
- configuration mechanisms yet. The whole configuration is
- currently hardcoded. The only way to tweak configuration
- is to directly modify source code. See see <xref
- linkend="dhcp6-config"/> for details.</simpara>
- </listitem>
- <listitem>
- <simpara>Upon start, the server will open sockets on all
- interfaces that are not loopback, are up, running and are
- multicast capable and have IPv6 address. Support for
- multiple interfaces is not coded in reception routines yet,
- so if you are running this code on a machine that has many
- interfaces and <command>b10-dhcp6</command> happens to
- listen on wrong interface, the easiest way to work around
- this problem is to turn down other interfaces. This
- limitation will be fixed shortly.</simpara>
- </listitem>
- <listitem>
- <simpara>ORO (Option Request Option, a list of options
- requested by a client) is currently ignored and server
- assigns DNS SERVER option.</simpara>
- </listitem>
- <listitem>
- <simpara>Temporary addresses are not supported yet.</simpara>
- </listitem>
- <listitem>
- <simpara>Prefix delegation is not supported yet.</simpara>
- </listitem>
- <listitem>
- <simpara>Address renewal (RENEW), rebinding (REBIND),
- confirmation (CONFIRM), duplication report (DECLINE) and
- release (RELEASE) are not supported yet.</simpara>
- </listitem>
- <listitem>
- <simpara>DNS Update is not supported yet.</simpara>
- </listitem>
- <listitem>
- <simpara>Interface detection is currently working on Linux
- only. See <xref linkend="iface-detect"/> for details.</simpara>
- </listitem>
- <listitem>
- <simpara>-v (verbose) command line option is currently the
- default, and cannot be disabled.</simpara>
- </listitem>
- </itemizedlist>
- </para>
- </section>
- </chapter>
- <chapter id="libdhcp">
- <title>libdhcp++ library</title>
- <para>libdhcp++ is a common library written in C++ that handles
- many DHCP-related tasks, like DHCPv4 and DHCPv6 packets parsing,
- manipulation and assembly, option parsing, manipulation and
- assembly, network interface detection and socket operations, like
- socket creations, data transmission and reception and socket
- closing.
- </para>
- <para>
- While this library is currently used by
- <command>b10-dhcp4</command> and <command>b10-dhcp6</command>
- only, it is designed to be portable, universal library useful for
- any kind of DHCP-related software.
- </para>
- <section id="iface-detect">
- <title>Interface detection</title>
- <para>Both DHCPv4 and DHCPv6 components share network
- interface detection routines. Interface detection is
- currently only supported on Linux systems.</para>
- <para>For non-Linux systems, there is currently stub
- implementation provided. As DHCP servers need to know available
- addresses, there is a simple mechanism implemented to provide
- that information. User is expected to create interfaces.txt
- file. Format of this file is simple. It contains list of
- interfaces along with available address on each interface. This
- mechanism is temporary and is going to be removed as soon as
- interface detection becomes available on non-Linux
- systems. Here is an example of the interfaces.txt file:
- <screen>
- # For DHCPv6, please specify link-local address (starts with fe80::)
- # If in doubt, check output of 'ifconfig -a' command.
- eth0 fe80::21e:8cff:fe9b:7349
- # For DHCPv4, please use following format:
- #eth0 192.0.2.5</screen>
- </para>
- </section>
- <section id="packet-handling">
- <title>DHCPv4/DHCPv6 packet handling</title>
- <para>TODO: Describe packet handling here, with pointers to wiki</para>
- </section>
- </chapter>
- <chapter id="statistics">
- <title>Statistics</title>
- <para>
- The <command>b10-stats</command> process is started by
- <command>bind10</command>.
- It periodically collects statistics data from various modules
- and aggregates it.
- <!-- TODO -->
- </para>
- <para>
- This stats daemon provides commands to identify if it is
- running, show specified or all statistics data, show specified
- or all statistics data schema, and set specified statistics
- data.
- For example, using <command>bindctl</command>:
- <screen>
- > <userinput>Stats show</userinput>
- {
- "Auth": {
- "opcode.iquery": 0,
- "opcode.notify": 10,
- "opcode.query": 869617,
- ...
- "queries.tcp": 1749,
- "queries.udp": 867868
- },
- "Boss": {
- "boot_time": "2011-01-20T16:59:03Z"
- },
- "Stats": {
- "boot_time": "2011-01-20T16:59:05Z",
- "last_update_time": "2011-01-20T17:04:05Z",
- "lname": "4d3869d9_a@jreed.example.net",
- "report_time": "2011-01-20T17:04:06Z",
- "timestamp": 1295543046.823504
- }
- }
- </screen>
- </para>
- </chapter>
- <chapter id="logging">
- <title>Logging</title>
- <section>
- <title>Logging configuration</title>
- <para>
- The logging system in BIND 10 is configured through the
- Logging module. All BIND 10 modules will look at the
- configuration in Logging to see what should be logged and
- to where.
- <!-- TODO: what is context of Logging module for readers of this guide? -->
- </para>
- <section>
- <title>Loggers</title>
- <para>
- Within BIND 10, a message is logged through a component
- called a "logger". Different parts of BIND 10 log messages
- through different loggers, and each logger can be configured
- independently of one another.
- </para>
- <para>
- In the Logging module, you can specify the configuration
- for zero or more loggers; any that are not specified will
- take appropriate default values.
- </para>
- <para>
- The three most important elements of a logger configuration
- are the <option>name</option> (the component that is
- generating the messages), the <option>severity</option>
- (what to log), and the <option>output_options</option>
- (where to log).
- </para>
- <section>
- <title>name (string)</title>
- <para>
- Each logger in the system has a name, the name being that
- of the component using it to log messages. For instance,
- if you want to configure logging for the resolver module,
- you add an entry for a logger named <quote>Resolver</quote>. This
- configuration will then be used by the loggers in the
- Resolver module, and all the libraries used by it.
- </para>
- <!-- TODO: later we will have a way to know names of all modules
- Right now you can only see what their names are if they are running
- (a simple 'help' without anything else in bindctl for instance).
- -->
- <para>
- If you want to specify logging for one specific library
- within the module, you set the name to
- <replaceable>module.library</replaceable>. For example, the
- logger used by the nameserver address store component
- has the full name of <quote>Resolver.nsas</quote>. If
- there is no entry in Logging for a particular library,
- it will use the configuration given for the module.
- <!-- TODO: how to know these specific names?
- We will either have to document them or tell the administrator to
- specify module-wide logging and see what appears...
- -->
- </para>
- <para>
- <!-- TODO: severity has not been covered yet -->
- To illustrate this, suppose you want the cache library
- to log messages of severity DEBUG, and the rest of the
- resolver code to log messages of severity INFO. To achieve
- this you specify two loggers, one with the name
- <quote>Resolver</quote> and severity INFO, and one with
- the name <quote>Resolver.cache</quote> with severity
- DEBUG. As there are no entries for other libraries (e.g.
- the nsas), they will use the configuration for the module
- (<quote>Resolver</quote>), so giving the desired behavior.
- </para>
- <para>
- One special case is that of a module name of <quote>*</quote>
- (asterisks), which is interpreted as <emphasis>any</emphasis>
- module. You can set global logging options by using this,
- including setting the logging configuration for a library
- that is used by multiple modules (e.g. <quote>*.config</quote>
- specifies the configuration library code in whatever
- module is using it).
- </para>
- <para>
- If there are multiple logger specifications in the
- configuration that might match a particular logger, the
- specification with the more specific logger name takes
- precedence. For example, if there are entries for for
- both <quote>*</quote> and <quote>Resolver</quote>, the
- resolver module — and all libraries it uses —
- will log messages according to the configuration in the
- second entry (<quote>Resolver</quote>). All other modules
- will use the configuration of the first entry
- (<quote>*</quote>). If there was also a configuration
- entry for <quote>Resolver.cache</quote>, the cache library
- within the resolver would use that in preference to the
- entry for <quote>Resolver</quote>.
- </para>
- <para>
- One final note about the naming. When specifying the
- module name within a logger, use the name of the module
- as specified in <command>bindctl</command>, e.g.
- <quote>Resolver</quote> for the resolver module,
- <quote>Xfrout</quote> for the xfrout module, etc. When
- the message is logged, the message will include the name
- of the logger generating the message, but with the module
- name replaced by the name of the process implementing
- the module (so for example, a message generated by the
- <quote>Auth.cache</quote> logger will appear in the output
- with a logger name of <quote>b10-auth.cache</quote>).
- </para>
- </section>
- <section>
- <title>severity (string)</title>
- <para>
- This specifies the category of messages logged.
- Each message is logged with an associated severity which
- may be one of the following (in descending order of
- severity):
- </para>
- <itemizedlist>
- <listitem>
- <simpara> FATAL </simpara>
- </listitem>
- <listitem>
- <simpara> ERROR </simpara>
- </listitem>
- <listitem>
- <simpara> WARN </simpara>
- </listitem>
- <listitem>
- <simpara> INFO </simpara>
- </listitem>
- <listitem>
- <simpara> DEBUG </simpara>
- </listitem>
- </itemizedlist>
- <para>
- When the severity of a logger is set to one of these
- values, it will only log messages of that severity, and
- the severities above it. The severity may also be set to
- NONE, in which case all messages from that logger are
- inhibited.
- <!-- TODO: worded wrong? If I set to INFO, why would it show DEBUG which is literally below in that list? -->
- </para>
- </section>
- <section>
- <title>output_options (list)</title>
- <para>
- Each logger can have zero or more
- <option>output_options</option>. These specify where log
- messages are sent to. These are explained in detail below.
- </para>
- <para>
- The other options for a logger are:
- </para>
- </section>
- <section>
- <title>debuglevel (integer)</title>
- <para>
- When a logger's severity is set to DEBUG, this value
- specifies what debug messages should be printed. It ranges
- from 0 (least verbose) to 99 (most verbose).
- </para>
- <!-- TODO: complete this sentence:
- The general classification of debug message types is
- TODO; there's a ticket to determine these levels, see #1074
- -->
- <para>
- If severity for the logger is not DEBUG, this value is ignored.
- </para>
- </section>
- <section>
- <title>additive (true or false)</title>
- <para>
- If this is true, the <option>output_options</option> from
- the parent will be used. For example, if there are two
- loggers configured; <quote>Resolver</quote> and
- <quote>Resolver.cache</quote>, and <option>additive</option>
- is true in the second, it will write the log messages
- not only to the destinations specified for
- <quote>Resolver.cache</quote>, but also to the destinations
- as specified in the <option>output_options</option> in
- the logger named <quote>Resolver</quote>.
- <!-- TODO: check this -->
- </para>
- </section>
- </section>
- <section>
- <title>Output Options</title>
- <para>
- The main settings for an output option are the
- <option>destination</option> and a value called
- <option>output</option>, the meaning of which depends on
- the destination that is set.
- </para>
- <section>
- <title>destination (string)</title>
- <para>
- The destination is the type of output. It can be one of:
- </para>
- <itemizedlist>
- <listitem>
- <simpara> console </simpara>
- </listitem>
- <listitem>
- <simpara> file </simpara>
- </listitem>
- <listitem>
- <simpara> syslog </simpara>
- </listitem>
- </itemizedlist>
- </section>
- <section>
- <title>output (string)</title>
- <para>
- Depending on what is set as the output destination, this
- value is interpreted as follows:
- </para>
- <variablelist>
- <varlistentry>
- <term><option>destination</option> is <quote>console</quote></term>
- <listitem>
- <simpara>
- The value of output must be one of <quote>stdout</quote>
- (messages printed to standard output) or
- <quote>stderr</quote> (messages printed to standard
- error).
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>destination</option> is <quote>file</quote></term>
- <listitem>
- <simpara>
- The value of output is interpreted as a file name;
- log messages will be appended to this file.
- </simpara>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>destination</option> is <quote>syslog</quote></term>
- <listitem>
- <simpara>
- The value of output is interpreted as the
- <command>syslog</command> facility (e.g.
- <emphasis>local0</emphasis>) that should be used
- for log messages.
- </simpara>
- </listitem>
- </varlistentry>
- </variablelist>
- <para>
- The other options for <option>output_options</option> are:
- </para>
- <section>
- <title>flush (true of false)</title>
- <para>
- Flush buffers after each log message. Doing this will
- reduce performance but will ensure that if the program
- terminates abnormally, all messages up to the point of
- termination are output.
- </para>
- </section>
- <section>
- <title>maxsize (integer)</title>
- <para>
- Only relevant when destination is file, this is maximum
- file size of output files in bytes. When the maximum
- size is reached, the file is renamed and a new file opened.
- (For example, a ".1" is appended to the name —
- if a ".1" file exists, it is renamed ".2",
- etc.)
- </para>
- <para>
- If this is 0, no maximum file size is used.
- </para>
- </section>
- <section>
- <title>maxver (integer)</title>
- <para>
- Maximum number of old log files to keep around when
- rolling the output file. Only relevant when
- <option>destination</option> is <quote>file</quote>.
- </para>
- </section>
- </section>
- </section>
- <section>
- <title>Example session</title>
- <para>
- In this example we want to set the global logging to
- write to the file <filename>/var/log/my_bind10.log</filename>,
- at severity WARN. We want the authoritative server to
- log at DEBUG with debuglevel 40, to a different file
- (<filename>/tmp/debug_messages</filename>).
- </para>
- <para>
- Start <command>bindctl</command>.
- </para>
- <para>
- <screen>["login success "]
- > <userinput>config show Logging</userinput>
- Logging/loggers [] list
- </screen>
- </para>
- <para>
- By default, no specific loggers are configured, in which
- case the severity defaults to INFO and the output is
- written to stderr.
- </para>
- <para>
- Let's first add a default logger:
- </para>
- <!-- TODO: adding the empty loggers makes no sense -->
- <para>
- <screen><userinput>> config add Logging/loggers</userinput>
- > <userinput>config show Logging</userinput>
- Logging/loggers/ list (modified)
- </screen>
- </para>
- <para>
- The loggers value line changed to indicate that it is no
- longer an empty list:
- </para>
- <para>
- <screen>> <userinput>config show Logging/loggers</userinput>
- Logging/loggers[0]/name "" string (default)
- Logging/loggers[0]/severity "INFO" string (default)
- Logging/loggers[0]/debuglevel 0 integer (default)
- Logging/loggers[0]/additive false boolean (default)
- Logging/loggers[0]/output_options [] list (default)
- </screen>
- </para>
- <para>
- The name is mandatory, so we must set it. We will also
- change the severity as well. Let's start with the global
- logger.
- </para>
- <para>
- <screen>> <userinput>config set Logging/loggers[0]/name *</userinput>
- > <userinput>config set Logging/loggers[0]/severity WARN</userinput>
- > <userinput>config show Logging/loggers</userinput>
- Logging/loggers[0]/name "*" string (modified)
- Logging/loggers[0]/severity "WARN" string (modified)
- Logging/loggers[0]/debuglevel 0 integer (default)
- Logging/loggers[0]/additive false boolean (default)
- Logging/loggers[0]/output_options [] list (default)
- </screen>
- </para>
- <para>
- Of course, we need to specify where we want the log
- messages to go, so we add an entry for an output option.
- </para>
- <para>
- <screen>> <userinput> config add Logging/loggers[0]/output_options</userinput>
- > <userinput> config show Logging/loggers[0]/output_options</userinput>
- Logging/loggers[0]/output_options[0]/destination "console" string (default)
- Logging/loggers[0]/output_options[0]/output "stdout" string (default)
- Logging/loggers[0]/output_options[0]/flush false boolean (default)
- Logging/loggers[0]/output_options[0]/maxsize 0 integer (default)
- Logging/loggers[0]/output_options[0]/maxver 0 integer (default)
- </screen>
- </para>
- <para>
- These aren't the values we are looking for.
- </para>
- <para>
- <screen>> <userinput> config set Logging/loggers[0]/output_options[0]/destination file</userinput>
- > <userinput> config set Logging/loggers[0]/output_options[0]/output /var/log/bind10.log</userinput>
- > <userinput> config set Logging/loggers[0]/output_options[0]/maxsize 204800</userinput>
- > <userinput> config set Logging/loggers[0]/output_options[0]/maxver 8</userinput>
- </screen>
- </para>
- <para>
- Which would make the entire configuration for this logger
- look like:
- </para>
- <para>
- <screen>> <userinput> config show all Logging/loggers</userinput>
- Logging/loggers[0]/name "*" string (modified)
- Logging/loggers[0]/severity "WARN" string (modified)
- Logging/loggers[0]/debuglevel 0 integer (default)
- Logging/loggers[0]/additive false boolean (default)
- Logging/loggers[0]/output_options[0]/destination "file" string (modified)
- Logging/loggers[0]/output_options[0]/output "/var/log/bind10.log" string (modified)
- Logging/loggers[0]/output_options[0]/flush false boolean (default)
- Logging/loggers[0]/output_options[0]/maxsize 204800 integer (modified)
- Logging/loggers[0]/output_options[0]/maxver 8 integer (modified)
- </screen>
- </para>
- <para>
- That looks OK, so let's commit it before we add the
- configuration for the authoritative server's logger.
- </para>
- <para>
- <screen>> <userinput> config commit</userinput></screen>
- </para>
- <para>
- Now that we have set it, and checked each value along
- the way, adding a second entry is quite similar.
- </para>
- <para>
- <screen>> <userinput> config add Logging/loggers</userinput>
- > <userinput> config set Logging/loggers[1]/name Auth</userinput>
- > <userinput> config set Logging/loggers[1]/severity DEBUG</userinput>
- > <userinput> config set Logging/loggers[1]/debuglevel 40</userinput>
- > <userinput> config add Logging/loggers[1]/output_options</userinput>
- > <userinput> config set Logging/loggers[1]/output_options[0]/destination file</userinput>
- > <userinput> config set Logging/loggers[1]/output_options[0]/output /tmp/auth_debug.log</userinput>
- > <userinput> config commit</userinput>
- </screen>
- </para>
- <para>
- And that's it. Once we have found whatever it was we
- needed the debug messages for, we can simply remove the
- second logger to let the authoritative server use the
- same settings as the rest.
- </para>
- <para>
- <screen>> <userinput> config remove Logging/loggers[1]</userinput>
- > <userinput> config commit</userinput>
- </screen>
- </para>
- <para>
- And every module will now be using the values from the
- logger named <quote>*</quote>.
- </para>
- </section>
- </section>
- <section>
- <title>Logging Message Format</title>
- <para>
- Each message written by BIND 10 to the configured logging
- destinations comprises a number of components that identify
- the origin of the message and, if the message indicates
- a problem, information about the problem that may be
- useful in fixing it.
- </para>
- <para>
- Consider the message below logged to a file:
- <screen>2011-06-15 13:48:22.034 ERROR [b10-resolver.asiolink]
- ASIODNS_OPENSOCK error 111 opening TCP socket to 127.0.0.1(53)</screen>
- </para>
- <para>
- Note: the layout of messages written to the system logging
- file (syslog) may be slightly different. This message has
- been split across two lines here for display reasons; in the
- logging file, it will appear on one line.)
- </para>
- <para>
- The log message comprises a number of components:
- <variablelist>
- <varlistentry>
- <term>2011-06-15 13:48:22.034</term>
- <!-- TODO: timestamp repeated even if using syslog? -->
- <listitem><para>
- The date and time at which the message was generated.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>ERROR</term>
- <listitem><para>
- The severity of the message.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>[b10-resolver.asiolink]</term>
- <listitem><para>
- The source of the message. This comprises two components:
- the BIND 10 process generating the message (in this
- case, <command>b10-resolver</command>) and the module
- within the program from which the message originated
- (which in the example is the asynchronous I/O link
- module, asiolink).
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>ASIODNS_OPENSOCK</term>
- <listitem><para>
- The message identification. Every message in BIND 10
- has a unique identification, which can be used as an
- index into the <ulink
- url="bind10-messages.html"><citetitle>BIND 10 Messages
- Manual</citetitle></ulink> (<ulink
- url="http://bind10.isc.org/docs/bind10-messages.html"
- />) from which more information can be obtained.
- </para></listitem>
- </varlistentry>
- <varlistentry>
- <term>error 111 opening TCP socket to 127.0.0.1(53)</term>
- <listitem><para>
- A brief description of the cause of the problem.
- Within this text, information relating to the condition
- that caused the message to be logged will be included.
- In this example, error number 111 (an operating
- system-specific error number) was encountered when
- trying to open a TCP connection to port 53 on the
- local system (address 127.0.0.1). The next step
- would be to find out the reason for the failure by
- consulting your system's documentation to identify
- what error number 111 means.
- </para></listitem>
- </varlistentry>
- </variablelist>
- </para>
- </section>
- </chapter>
- <!-- TODO: Add bibliography section (mostly RFCs, probably) -->
- <!-- TODO: how to help: run unit tests, join lists, review trac tickets -->
- <!-- <index> <title>Index</title> </index> -->
- </book>
- <!--
- TODO:
- Overview
- Getting BIND 10 Installed
- Basics
- Dependencies
- Optional
- Advanced
- How Does Everything Work Together?
- Need Help?
- -->
|