1*00b67f09SDavid van MoolenbroekCopyright (C) 2004, 2007, 2008 Internet Systems Consortium, Inc. ("ISC") 2*00b67f09SDavid van MoolenbroekCopyright (C) 2000, 2001, 2003 Internet Software Consortium. 3*00b67f09SDavid van MoolenbroekSee COPYRIGHT in the source root or http://isc.org/copyright.html for terms. 4*00b67f09SDavid van Moolenbroek 5*00b67f09SDavid van Moolenbroek BIND 8 to BIND 9 Migration Notes 6*00b67f09SDavid van Moolenbroek 7*00b67f09SDavid van MoolenbroekBIND 9 is designed to be mostly upwards compatible with BIND 8, but 8*00b67f09SDavid van Moolenbroekthere is still a number of caveats you should be aware of when 9*00b67f09SDavid van Moolenbroekupgrading an existing BIND 8 installation to use BIND 9. 10*00b67f09SDavid van Moolenbroek 11*00b67f09SDavid van Moolenbroek 12*00b67f09SDavid van Moolenbroek1. Configuration File Compatibility 13*00b67f09SDavid van Moolenbroek 14*00b67f09SDavid van Moolenbroek1.1. Unimplemented Options and Changed Defaults 15*00b67f09SDavid van Moolenbroek 16*00b67f09SDavid van MoolenbroekBIND 9 supports most, but not all of the named.conf options of BIND 8. 17*00b67f09SDavid van MoolenbroekFor a complete list of implemented options, see doc/misc/options. 18*00b67f09SDavid van Moolenbroek 19*00b67f09SDavid van MoolenbroekIf your named.conf file uses an unimplemented option, named will log a 20*00b67f09SDavid van Moolenbroekwarning message. A message is also logged about each option whose 21*00b67f09SDavid van Moolenbroekdefault has changed unless the option is set explicitly in named.conf. 22*00b67f09SDavid van Moolenbroek 23*00b67f09SDavid van MoolenbroekThe default of the "transfer-format" option has changed from 24*00b67f09SDavid van Moolenbroek"one-answer" to "many-answers". If you have slave servers that do not 25*00b67f09SDavid van Moolenbroekunderstand the many-answers zone transfer format (e.g., BIND 4.9.5 or 26*00b67f09SDavid van Moolenbroekolder) you need to explicitly specify "transfer-format one-answer;" in 27*00b67f09SDavid van Moolenbroekeither the options block or a server statement. 28*00b67f09SDavid van Moolenbroek 29*00b67f09SDavid van MoolenbroekBIND 9.4 onwards implements "allow-query-cache". The "allow-query" 30*00b67f09SDavid van Moolenbroekoption is no longer used to specify access to the cache. The 31*00b67f09SDavid van Moolenbroek"allow-query" option continues to specify which hosts are allowed 32*00b67f09SDavid van Moolenbroekto ask ordinary DNS questions. The new "allow-query-cache" option 33*00b67f09SDavid van Moolenbroekis used to specify which hosts are allowed to get answers from the 34*00b67f09SDavid van Moolenbroekcache. Since BIND 9.4.1, if "allow-query-cache" is not set then 35*00b67f09SDavid van Moolenbroek"allow-recursion" is used if it is set, otherwise "allow-query" is 36*00b67f09SDavid van Moolenbroekused if it is set, otherwise the default localnets and localhost 37*00b67f09SDavid van Moolenbroekis used. 38*00b67f09SDavid van Moolenbroek 39*00b67f09SDavid van Moolenbroek1.2. Handling of Configuration File Errors 40*00b67f09SDavid van Moolenbroek 41*00b67f09SDavid van MoolenbroekIn BIND 9, named refuses to start if it detects an error in 42*00b67f09SDavid van Moolenbroeknamed.conf. Earlier versions would start despite errors, causing the 43*00b67f09SDavid van Moolenbroekserver to run with a partial configuration. Errors detected during 44*00b67f09SDavid van Moolenbroeksubsequent reloads do not cause the server to exit. 45*00b67f09SDavid van Moolenbroek 46*00b67f09SDavid van MoolenbroekErrors in master files do not cause the server to exit, but they 47*00b67f09SDavid van Moolenbroekdo cause the zone not to load. 48*00b67f09SDavid van Moolenbroek 49*00b67f09SDavid van Moolenbroek1.3. Logging 50*00b67f09SDavid van Moolenbroek 51*00b67f09SDavid van MoolenbroekThe set of logging categories in BIND 9 is different from that 52*00b67f09SDavid van Moolenbroekin BIND 8. If you have customised your logging on a per-category 53*00b67f09SDavid van Moolenbroekbasis, you need to modify your logging statement to use the 54*00b67f09SDavid van Moolenbroeknew categories. 55*00b67f09SDavid van Moolenbroek 56*00b67f09SDavid van MoolenbroekAnother difference is that the "logging" statement only takes effect 57*00b67f09SDavid van Moolenbroekafter the entire named.conf file has been read. This means that when 58*00b67f09SDavid van Moolenbroekthe server starts up, any messages about errors in the configuration 59*00b67f09SDavid van Moolenbroekfile are always logged to the default destination (syslog) when the 60*00b67f09SDavid van Moolenbroekserver first starts up, regardless of the contents of the "logging" 61*00b67f09SDavid van Moolenbroekstatement. In BIND 8, the new logging configuration took effect 62*00b67f09SDavid van Moolenbroekimmediately after the "logging" statement was read. 63*00b67f09SDavid van Moolenbroek 64*00b67f09SDavid van Moolenbroek1.4. Notify messages and Refresh queries 65*00b67f09SDavid van Moolenbroek 66*00b67f09SDavid van MoolenbroekThe source address and port for these is now controlled by 67*00b67f09SDavid van Moolenbroek"notify-source" and "transfer-source", respectively, rather that 68*00b67f09SDavid van Moolenbroekquery-source as in BIND 8. 69*00b67f09SDavid van Moolenbroek 70*00b67f09SDavid van Moolenbroek1.5. Multiple Classes. 71*00b67f09SDavid van Moolenbroek 72*00b67f09SDavid van MoolenbroekMultiple classes have to be put into explicit views for each class. 73*00b67f09SDavid van Moolenbroek 74*00b67f09SDavid van Moolenbroek 75*00b67f09SDavid van Moolenbroek2. Zone File Compatibility 76*00b67f09SDavid van Moolenbroek 77*00b67f09SDavid van Moolenbroek2.1. Strict RFC1035 Interpretation of TTLs in Zone Files 78*00b67f09SDavid van Moolenbroek 79*00b67f09SDavid van MoolenbroekBIND 9 strictly complies with the RFC1035 and RFC2308 rules regarding 80*00b67f09SDavid van Moolenbroekomitted TTLs in zone files. Omitted TTLs are replaced by the value 81*00b67f09SDavid van Moolenbroekspecified with the $TTL directive, or by the previous explicit TTL if 82*00b67f09SDavid van Moolenbroekthere is no $TTL directive. 83*00b67f09SDavid van Moolenbroek 84*00b67f09SDavid van MoolenbroekIf there is no $TTL directive and the first RR in the file does not 85*00b67f09SDavid van Moolenbroekhave an explicit TTL field, the zone file is illegal according to 86*00b67f09SDavid van MoolenbroekRFC1035 since the TTL of the first RR is undefined. Unfortunately, 87*00b67f09SDavid van MoolenbroekBIND 4 and many versions of BIND 8 accept such files without warning 88*00b67f09SDavid van Moolenbroekand use the value of the SOA MINTTL field as a default for missing TTL 89*00b67f09SDavid van Moolenbroekvalues. 90*00b67f09SDavid van Moolenbroek 91*00b67f09SDavid van MoolenbroekBIND 9.0 and 9.1 completely refused to load such files. BIND 9.2 92*00b67f09SDavid van Moolenbroekemulates the nonstandard BIND 4/8 SOA MINTTL behaviour and loads the 93*00b67f09SDavid van Moolenbroekfiles anyway (provided the SOA is the first record in the file), but 94*00b67f09SDavid van Moolenbroekwill issue the warning message "no TTL specified; using SOA MINTTL 95*00b67f09SDavid van Moolenbroekinstead". 96*00b67f09SDavid van Moolenbroek 97*00b67f09SDavid van MoolenbroekTo avoid problems, we recommend that you use a $TTL directive in each 98*00b67f09SDavid van Moolenbroekzone file. 99*00b67f09SDavid van Moolenbroek 100*00b67f09SDavid van Moolenbroek2.2. Periods in SOA Serial Numbers Deprecated 101*00b67f09SDavid van Moolenbroek 102*00b67f09SDavid van MoolenbroekSome versions of BIND allow SOA serial numbers with an embedded 103*00b67f09SDavid van Moolenbroekperiod, like "3.002", and convert them into integers in a rather 104*00b67f09SDavid van Moolenbroekunintuitive way. This feature is not supported by BIND 9; serial 105*00b67f09SDavid van Moolenbroeknumbers must be integers. 106*00b67f09SDavid van Moolenbroek 107*00b67f09SDavid van Moolenbroek2.3. Handling of Unbalanced Quotes 108*00b67f09SDavid van Moolenbroek 109*00b67f09SDavid van MoolenbroekTXT records with unbalanced quotes, like 'host TXT "foo', were not 110*00b67f09SDavid van Moolenbroektreated as errors in some versions of BIND. If your zone files 111*00b67f09SDavid van Moolenbroekcontain such records, you will get potentially confusing error 112*00b67f09SDavid van Moolenbroekmessages like "unexpected end of file" because BIND 9 will interpret 113*00b67f09SDavid van Moolenbroekeverything up to the next quote character as a literal string. 114*00b67f09SDavid van Moolenbroek 115*00b67f09SDavid van Moolenbroek2.4. Handling of Line Breaks 116*00b67f09SDavid van Moolenbroek 117*00b67f09SDavid van MoolenbroekSome versions of BIND accept RRs containing line breaks that are not 118*00b67f09SDavid van Moolenbroekproperly quoted with parentheses, like the following SOA: 119*00b67f09SDavid van Moolenbroek 120*00b67f09SDavid van Moolenbroek @ IN SOA ns.example. hostmaster.example. 121*00b67f09SDavid van Moolenbroek ( 1 3600 1800 1814400 3600 ) 122*00b67f09SDavid van Moolenbroek 123*00b67f09SDavid van MoolenbroekThis is not legal master file syntax and will be treated as an error 124*00b67f09SDavid van Moolenbroekby BIND 9. The fix is to move the opening parenthesis to the first 125*00b67f09SDavid van Moolenbroekline. 126*00b67f09SDavid van Moolenbroek 127*00b67f09SDavid van Moolenbroek2.5. Unimplemented BIND 8 Extensions 128*00b67f09SDavid van Moolenbroek 129*00b67f09SDavid van Moolenbroek$GENERATE: The "$$" construct for getting a literal $ into a domain 130*00b67f09SDavid van Moolenbroekname is deprecated. Use \$ instead. 131*00b67f09SDavid van Moolenbroek 132*00b67f09SDavid van Moolenbroek2.6. TXT records are no longer automatically split. 133*00b67f09SDavid van Moolenbroek 134*00b67f09SDavid van MoolenbroekSome versions of BIND accepted strings in TXT RDATA consisting of more 135*00b67f09SDavid van Moolenbroekthan 255 characters and silently split them to be able to encode the 136*00b67f09SDavid van Moolenbroekstrings in a protocol conformant way. You may now see errors like this 137*00b67f09SDavid van Moolenbroek dns_rdata_fromtext: local.db:119: ran out of space 138*00b67f09SDavid van Moolenbroekif you have TXT RRs with too longs strings. Make sure to split the 139*00b67f09SDavid van Moolenbroekstring in the zone data file at or before a single one reaches 255 140*00b67f09SDavid van Moolenbroekcharacters. 141*00b67f09SDavid van Moolenbroek 142*00b67f09SDavid van Moolenbroek3. Interoperability Impact of New Protocol Features 143*00b67f09SDavid van Moolenbroek 144*00b67f09SDavid van Moolenbroek3.1. EDNS0 145*00b67f09SDavid van Moolenbroek 146*00b67f09SDavid van MoolenbroekBIND 9 uses EDNS0 (RFC2671) to advertise its receive buffer size. It 147*00b67f09SDavid van Moolenbroekalso sets DO EDNS flag bit in queries to indicate that it wishes to 148*00b67f09SDavid van Moolenbroekreceive DNSSEC responses. 149*00b67f09SDavid van Moolenbroek 150*00b67f09SDavid van MoolenbroekMost older servers that do not support EDNS0, including prior versions 151*00b67f09SDavid van Moolenbroekof BIND, will send a FORMERR or NOTIMP response to these queries. 152*00b67f09SDavid van MoolenbroekWhen this happens, BIND 9 will automatically retry the query without 153*00b67f09SDavid van MoolenbroekEDNS0. 154*00b67f09SDavid van Moolenbroek 155*00b67f09SDavid van MoolenbroekUnfortunately, there exists at least one non-BIND name server 156*00b67f09SDavid van Moolenbroekimplementation that silently ignores these queries instead of sending 157*00b67f09SDavid van Moolenbroekan error response. Resolving names in zones where all or most 158*00b67f09SDavid van Moolenbroekauthoritative servers use this server will be very slow or fail 159*00b67f09SDavid van Moolenbroekcompletely. We have contacted the manufacturer of the name server in 160*00b67f09SDavid van Moolenbroekcase, and they are working on a solution. 161*00b67f09SDavid van Moolenbroek 162*00b67f09SDavid van MoolenbroekWhen BIND 9 communicates with a server that does support EDNS0, such as 163*00b67f09SDavid van Moolenbroekanother BIND 9 server, responses of up to 4096 bytes may be 164*00b67f09SDavid van Moolenbroektransmitted as a single UDP datagram which is subject to fragmentation 165*00b67f09SDavid van Moolenbroekat the IP level. If a firewall incorrectly drops IP fragments, it can 166*00b67f09SDavid van Moolenbroekcause resolution to slow down dramatically or fail. 167*00b67f09SDavid van Moolenbroek 168*00b67f09SDavid van Moolenbroek3.2. Zone Transfers 169*00b67f09SDavid van Moolenbroek 170*00b67f09SDavid van MoolenbroekOutgoing zone transfers now use the "many-answers" format by default. 171*00b67f09SDavid van MoolenbroekThis format is not understood by certain old versions of BIND 4. 172*00b67f09SDavid van MoolenbroekYou can work around this problem using the option "transfer-format 173*00b67f09SDavid van Moolenbroekone-answer;", but since these old versions all have known security 174*00b67f09SDavid van Moolenbroekproblems, the correct fix is to upgrade the slave servers. 175*00b67f09SDavid van Moolenbroek 176*00b67f09SDavid van MoolenbroekZone transfers to Windows 2000 DNS servers sometimes fail due to a 177*00b67f09SDavid van Moolenbroekbug in the Windows 2000 DNS server where DNS messages larger than 178*00b67f09SDavid van Moolenbroek16K are not handled properly. Obtain the latest service pack for 179*00b67f09SDavid van MoolenbroekWindows 2000 from Microsoft to address this issue. In the meantime, 180*00b67f09SDavid van Moolenbroekthe problem can be worked around by setting "transfer-format one-answer;". 181*00b67f09SDavid van Moolenbroekhttp://support.microsoft.com/default.aspx?scid=kb;en-us;297936 182*00b67f09SDavid van Moolenbroek 183*00b67f09SDavid van Moolenbroek4. Unrestricted Character Set 184*00b67f09SDavid van Moolenbroek 185*00b67f09SDavid van Moolenbroek BIND 9.2 only 186*00b67f09SDavid van Moolenbroek 187*00b67f09SDavid van MoolenbroekBIND 9 does not restrict the character set of domain names - it is 188*00b67f09SDavid van Moolenbroekfully 8-bit clean in accordance with RFC2181 section 11. 189*00b67f09SDavid van Moolenbroek 190*00b67f09SDavid van MoolenbroekIt is strongly recommended that hostnames published in the DNS follow 191*00b67f09SDavid van Moolenbroekthe RFC952 rules, but BIND 9 will not enforce this restriction. 192*00b67f09SDavid van Moolenbroek 193*00b67f09SDavid van MoolenbroekHistorically, some applications have suffered from security flaws 194*00b67f09SDavid van Moolenbroekwhere data originating from the network, such as names returned by 195*00b67f09SDavid van Moolenbroekgethostbyaddr(), are used with insufficient checking and may cause a 196*00b67f09SDavid van Moolenbroekbreach of security when containing unexpected characters; see 197*00b67f09SDavid van Moolenbroek<http://www.cert.org/advisories/CA-96.04.corrupt_info_from_servers.html> 198*00b67f09SDavid van Moolenbroekfor details. Some earlier versions of BIND attempt to protect these 199*00b67f09SDavid van Moolenbroekflawed applications from attack by discarding data containing 200*00b67f09SDavid van Moolenbroekcharacters deemed inappropriate in host names or mail addresses, under 201*00b67f09SDavid van Moolenbroekthe control of the "check-names" option in named.conf and/or "options 202*00b67f09SDavid van Moolenbroekno-check-names" in resolv.conf. BIND 9 provides no such protection; 203*00b67f09SDavid van Moolenbroekif applications with these flaws are still being used, they should 204*00b67f09SDavid van Moolenbroekbe upgraded. 205*00b67f09SDavid van Moolenbroek 206*00b67f09SDavid van Moolenbroek BIND 9.3 onwards implements check-names. 207*00b67f09SDavid van Moolenbroek 208*00b67f09SDavid van Moolenbroek5. Server Administration Tools 209*00b67f09SDavid van Moolenbroek 210*00b67f09SDavid van Moolenbroek5.1 Ndc Replaced by Rndc 211*00b67f09SDavid van Moolenbroek 212*00b67f09SDavid van MoolenbroekThe "ndc" program has been replaced by "rndc", which is capable of 213*00b67f09SDavid van Moolenbroekremote operation. Unlike ndc, rndc requires a configuration file. 214*00b67f09SDavid van MoolenbroekThe easiest way to generate a configuration file is to run 215*00b67f09SDavid van Moolenbroek"rndc-confgen -a"; see the man pages for rndc(8), rndc-confgen(8), 216*00b67f09SDavid van Moolenbroekand rndc.conf(5) for details. 217*00b67f09SDavid van Moolenbroek 218*00b67f09SDavid van Moolenbroek5.2. Nsupdate Differences 219*00b67f09SDavid van Moolenbroek 220*00b67f09SDavid van MoolenbroekThe BIND 8 implementation of nsupdate had an undocumented feature 221*00b67f09SDavid van Moolenbroekwhere an update request would be broken down into multiple requests 222*00b67f09SDavid van Moolenbroekbased upon the discovered zones that contained the records. This 223*00b67f09SDavid van Moolenbroekbehaviour has not been implemented in BIND 9. Each update request 224*00b67f09SDavid van Moolenbroekmust pertain to a single zone, but it is still possible to do multiple 225*00b67f09SDavid van Moolenbroekupdates in a single invocation of nsupdate by terminating each update 226*00b67f09SDavid van Moolenbroekwith an empty line or a "send" command. 227*00b67f09SDavid van Moolenbroek 228*00b67f09SDavid van Moolenbroek 229*00b67f09SDavid van Moolenbroek6. No Information Leakage between Zones 230*00b67f09SDavid van Moolenbroek 231*00b67f09SDavid van MoolenbroekBIND 9 stores the authoritative data for each zone in a separate data 232*00b67f09SDavid van Moolenbroekstructure, as recommended in RFC1035 and as required by DNSSEC and 233*00b67f09SDavid van MoolenbroekIXFR. When a BIND 9 server is authoritative for both a child zone and 234*00b67f09SDavid van Moolenbroekits parent, it will have two distinct sets of NS records at the 235*00b67f09SDavid van Moolenbroekdelegation point: the authoritative NS records at the child's apex, 236*00b67f09SDavid van Moolenbroekand a set of glue NS records in the parent. 237*00b67f09SDavid van Moolenbroek 238*00b67f09SDavid van MoolenbroekBIND 8 was unable to properly distinguish between these two sets of NS 239*00b67f09SDavid van Moolenbroekrecords and would "leak" the child's NS records into the parent, 240*00b67f09SDavid van Moolenbroekeffectively causing the parent zone to be silently modified: responses 241*00b67f09SDavid van Moolenbroekand zone transfers from the parent contained the child's NS records 242*00b67f09SDavid van Moolenbroekrather than the glue configured into the parent (if any). In the case 243*00b67f09SDavid van Moolenbroekof children of type "stub", this behaviour was documented as a feature, 244*00b67f09SDavid van Moolenbroekallowing the glue NS records to be omitted from the parent 245*00b67f09SDavid van Moolenbroekconfiguration. 246*00b67f09SDavid van Moolenbroek 247*00b67f09SDavid van MoolenbroekSites that were relying on this BIND 8 behaviour need to add any 248*00b67f09SDavid van Moolenbroekomitted glue NS records, and any necessary glue A records, to the 249*00b67f09SDavid van Moolenbroekparent zone. 250*00b67f09SDavid van Moolenbroek 251*00b67f09SDavid van MoolenbroekAlthough stub zones can no longer be used as a mechanism for injecting 252*00b67f09SDavid van MoolenbroekNS records into their parent zones, they are still useful as a way of 253*00b67f09SDavid van Moolenbroekdirecting queries for a given domain to a particular set of name 254*00b67f09SDavid van Moolenbroekservers. 255*00b67f09SDavid van Moolenbroek 256*00b67f09SDavid van Moolenbroek 257*00b67f09SDavid van Moolenbroek7. Umask not Modified 258*00b67f09SDavid van Moolenbroek 259*00b67f09SDavid van MoolenbroekThe BIND 8 named unconditionally sets the umask to 022. BIND 9 does 260*00b67f09SDavid van Moolenbroeknot; the umask inherited from the parent process remains in effect. 261*00b67f09SDavid van MoolenbroekThis may cause files created by named, such as journal files, to be 262*00b67f09SDavid van Moolenbroekcreated with different file permissions than they did in BIND 8. If 263*00b67f09SDavid van Moolenbroeknecessary, the umask should be set explicitly in the script used to 264*00b67f09SDavid van Moolenbroekstart the named process. 265*00b67f09SDavid van Moolenbroek 266*00b67f09SDavid van Moolenbroek 267*00b67f09SDavid van MoolenbroekId: migration,v 1.49 2008/03/18 15:42:53 jreed Exp 268