]> pere.pagekite.me Git - homepage.git/blob - blog/What_are_they_searching_for___PowerDNS_and_ISC_DHCP_in_LDAP.html
Generated.
[homepage.git] / blog / What_are_they_searching_for___PowerDNS_and_ISC_DHCP_in_LDAP.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
4 <head>
5 <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
6 <title>Petter Reinholdtsen: What are they searching for - PowerDNS and ISC DHCP in LDAP</title>
7 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/style.css" />
8 <link rel="stylesheet" type="text/css" media="screen" href="http://people.skolelinux.org/pere/blog/vim.css" />
9
10
11 </head>
12 <body>
13 <div class="title">
14 <h1>
15 <a href="http://people.skolelinux.org/pere/blog/">Petter Reinholdtsen</a>
16
17 </h1>
18
19 </div>
20
21
22 <div class="entry">
23 <div class="title">What are they searching for - PowerDNS and ISC DHCP in LDAP</div>
24 <div class="date">17th July 2010</div>
25 <div class="body"><p>This is a
26 <a href="http://people.skolelinux.org/pere/blog/Time_for_new__LDAP_schemas_replacing_RFC_2307_.html">followup</a>
27 on my
28 <a href="http://people.skolelinux.org/pere/blog/Idea_for_a_change_to_LDAP_schemas_allowing_DNS_and_DHCP_info_to_be_combined_into_one_object.html">previous
29 work</a> on
30 <a href="http://people.skolelinux.org/pere/blog/Combining_PowerDNS_and_ISC_DHCP_LDAP_objects.html">merging
31 all</a> the computer related LDAP objects in Debian Edu.</p>
32
33 <p>As a step to try to see if it possible to merge the DNS and DHCP
34 LDAP objects, I have had a look at how the packages pdns-backend-ldap
35 and dhcp3-server-ldap in Debian use the LDAP server. The two
36 implementations are quite different in how they use LDAP.</p>
37
38 To get this information, I started slapd with debugging enabled and
39 dumped the debug output to a file to get the LDAP searches performed
40 on a Debian Edu main-server. Here is a summary.
41
42 <p><strong>powerdns</strong></p>
43
44 <a href="http://www.linuxnetworks.de/doc/index.php/PowerDNS_LDAP_Backend">Clues
45 on how to</a> set up PowerDNS to use a LDAP backend is available on
46 the web.
47
48 <p>PowerDNS have two modes of operation using LDAP as its backend.
49 One "strict" mode where the forward and reverse DNS lookups are done
50 using the same LDAP objects, and a "tree" mode where the forward and
51 reverse entries are in two different subtrees in LDAP with a structure
52 based on the DNS names, as in tjener.intern and
53 2.2.0.10.in-addr.arpa.</p>
54
55 <p>In tree mode, the server is set up to use a LDAP subtree as its
56 base, and uses a "base" scoped search for the DNS name by adding
57 "dc=tjener,dc=intern," to the base with a filter for
58 "(associateddomain=tjener.intern)" for the forward entry and
59 "dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa," with a filter for
60 "(associateddomain=2.2.0.10.in-addr.arpa)" for the reverse entry. For
61 forward entries, it is looking for attributes named dnsttl, arecord,
62 nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord, mxrecord,
63 txtrecord, rprecord, afsdbrecord, keyrecord, aaaarecord, locrecord,
64 srvrecord, naptrrecord, kxrecord, certrecord, dsrecord, sshfprecord,
65 ipseckeyrecord, rrsigrecord, nsecrecord, dnskeyrecord, dhcidrecord,
66 spfrecord and modifytimestamp. For reverse entries it is looking for
67 the attributes dnsttl, arecord, nsrecord, cnamerecord, soarecord,
68 ptrrecord, hinforecord, mxrecord, txtrecord, rprecord, aaaarecord,
69 locrecord, srvrecord, naptrrecord and modifytimestamp. The equivalent
70 ldapsearch commands could look like this:</p>
71
72 <blockquote><pre>
73 ldapsearch -h ldap \
74 -b dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no \
75 -s base -x '(associateddomain=tjener.intern)' dNSTTL aRecord nSRecord \
76 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
77 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
78 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
79 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
80
81 ldapsearch -h ldap \
82 -b dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no \
83 -s base -x '(associateddomain=2.2.0.10.in-addr.arpa)'
84 dnsttl, arecord, nsrecord, cnamerecord soarecord ptrrecord \
85 hinforecord mxrecord txtrecord rprecord aaaarecord locrecord \
86 srvrecord naptrrecord modifytimestamp
87 </pre></blockquote>
88
89 <p>In Debian Edu/Lenny, the PowerDNS tree mode is used with
90 ou=hosts,dc=skole,dc=skolelinux,dc=no as the base, and these are two
91 example LDAP objects used there. In addition to these objects, the
92 parent objects all th way up to ou=hosts,dc=skole,dc=skolelinux,dc=no
93 also exist.</p>
94
95 <blockquote><pre>
96 dn: dc=tjener,dc=intern,ou=hosts,dc=skole,dc=skolelinux,dc=no
97 objectclass: top
98 objectclass: dnsdomain
99 objectclass: domainrelatedobject
100 dc: tjener
101 arecord: 10.0.2.2
102 associateddomain: tjener.intern
103
104 dn: dc=2,dc=2,dc=0,dc=10,dc=in-addr,dc=arpa,ou=hosts,dc=skole,dc=skolelinux,dc=no
105 objectclass: top
106 objectclass: dnsdomain2
107 objectclass: domainrelatedobject
108 dc: 2
109 ptrrecord: tjener.intern
110 associateddomain: 2.2.0.10.in-addr.arpa
111 </pre></blockquote>
112
113 <p>In strict mode, the server behaves differently. When looking for
114 forward DNS entries, it is doing a "subtree" scoped search with the
115 same base as in the tree mode for a object with filter
116 "(associateddomain=tjener.intern)" and requests the attributes dnsttl,
117 arecord, nsrecord, cnamerecord, soarecord, ptrrecord, hinforecord,
118 mxrecord, txtrecord, rprecord, aaaarecord, locrecord, srvrecord,
119 naptrrecord and modifytimestamp. For reverse entires it also do a
120 subtree scoped search but this time the filter is "(arecord=10.0.2.2)"
121 and the requested attributes are associateddomain, dnsttl and
122 modifytimestamp. In short, in strict mode the objects with ptrrecord
123 go away, and the arecord attribute in the forward object is used
124 instead.</p>
125
126 <p>The forward and reverse searches can be simulated using ldapsearch
127 like this:</p>
128
129 <blockquote><pre>
130 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
131 '(associateddomain=tjener.intern)' dNSTTL aRecord nSRecord \
132 cNAMERecord sOARecord pTRRecord hInfoRecord mXRecord tXTRecord \
133 rPRecord aFSDBRecord KeyRecord aAAARecord lOCRecord sRVRecord \
134 nAPTRRecord kXRecord certRecord dSRecord sSHFPRecord iPSecKeyRecord \
135 rRSIGRecord nSECRecord dNSKeyRecord dHCIDRecord sPFRecord modifyTimestamp
136
137 ldapsearch -h ldap -b ou=hosts,dc=skole,dc=skolelinux,dc=no -s sub -x \
138 '(arecord=10.0.2.2)' associateddomain dnsttl modifytimestamp
139 </pre></blockquote>
140
141 <p>In addition to the forward and reverse searches , there is also a
142 search for SOA records, which behave similar to the forward and
143 reverse lookups.</p>
144
145 <p>A thing to note with the PowerDNS behaviour is that it do not
146 specify any objectclass names, and instead look for the attributes it
147 need to generate a DNS reply. This make it able to work with any
148 objectclass that provide the needed attributes.</p>
149
150 <p>The attributes are normally provided in the cosine (RFC 1274) and
151 dnsdomain2 schemas. The latter is used for reverse entries like
152 ptrrecord and recent DNS additions like aaaarecord and srvrecord.</p>
153
154 <p>In Debian Edu, we have created DNS objects using the object classes
155 dcobject (for dc), dnsdomain or dnsdomain2 (structural, for the DNS
156 attributes) and domainrelatedobject (for associatedDomain). The use
157 of structural object classes make it impossible to combine these
158 classes with the object classes used by DHCP.</p>
159
160 <p>There are other schemas that could be used too, for example the
161 dnszone structural object class used by Gosa and bind-sdb for the DNS
162 attributes combined with the domainrelatedobject object class, but in
163 this case some unused attributes would have to be included as well
164 (zonename and relativedomainname).</p>
165
166 <p>My proposal for Debian Edu would be to switch PowerDNS to strict
167 mode and not use any of the existing objectclasses (dnsdomain,
168 dnsdomain2 and dnszone) when one want to combine the DNS information
169 with DHCP information, and instead create a auxiliary object class
170 defined something like this (using the attributes defined for
171 dnsdomain and dnsdomain2 or dnszone):</p>
172
173 <blockquote><pre>
174 objectclass ( some-oid NAME 'dnsDomainAux'
175 SUP top
176 AUXILIARY
177 MAY ( ARecord $ MDRecord $ MXRecord $ NSRecord $ SOARecord $ CNAMERecord $
178 DNSTTL $ DNSClass $ PTRRecord $ HINFORecord $ MINFORecord $
179 TXTRecord $ SIGRecord $ KEYRecord $ AAAARecord $ LOCRecord $
180 NXTRecord $ SRVRecord $ NAPTRRecord $ KXRecord $ CERTRecord $
181 A6Record $ DNAMERecord
182 ))
183 </pre></blockquote>
184
185 <p>This will allow any object to become a DNS entry when combined with
186 the domainrelatedobject object class, and allow any entity to include
187 all the attributes PowerDNS wants. I've sent an email to the PowerDNS
188 developers asking for their view on this schema and if they are
189 interested in providing such schema with PowerDNS, and I hope my
190 message will be accepted into their mailing list soon.</p>
191
192 <p><strong>ISC dhcp</strong></p>
193
194 <p>The DHCP server searches for specific objectclass and requests all
195 the object attributes, and then uses the attributes it want. This
196 make it harder to figure out exactly what attributes are used, but
197 thanks to the working example in Debian Edu I can at least get an idea
198 what is needed without having to read the source code.</p>
199
200 <p>In the DHCP server configuration, the LDAP base to use and the
201 search filter to use to locate the correct dhcpServer entity is
202 stored. These are the relevant entries from
203 /etc/dhcp3/dhcpd.conf:</p>
204
205 <blockquote><pre>
206 ldap-base-dn "dc=skole,dc=skolelinux,dc=no";
207 ldap-dhcp-server-cn "dhcp";
208 </pre></blockquote>
209
210 <p>The DHCP server uses this information to nest all the DHCP
211 configuration it need. The cn "dhcp" is located using the given LDAP
212 base and the filter "(&(objectClass=dhcpServer)(cn=dhcp))". The
213 search result is this entry:</p>
214
215 <blockquote><pre>
216 dn: cn=dhcp,dc=skole,dc=skolelinux,dc=no
217 cn: dhcp
218 objectClass: top
219 objectClass: dhcpServer
220 dhcpServiceDN: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
221 </pre></blockquote>
222
223 <p>The content of the dhcpServiceDN attribute is next used to locate the
224 subtree with DHCP configuration. The DHCP configuration subtree base
225 is located using a base scope search with base "cn=DHCP
226 Config,dc=skole,dc=skolelinux,dc=no" and filter
227 "(&(objectClass=dhcpService)(|(dhcpPrimaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)(dhcpSecondaryDN=cn=dhcp,dc=skole,dc=skolelinux,dc=no)))".
228 The search result is this entry:</p>
229
230 <blockquote><pre>
231 dn: cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
232 cn: DHCP Config
233 objectClass: top
234 objectClass: dhcpService
235 objectClass: dhcpOptions
236 dhcpPrimaryDN: cn=dhcp, dc=skole,dc=skolelinux,dc=no
237 dhcpStatements: ddns-update-style none
238 dhcpStatements: authoritative
239 dhcpOption: smtp-server code 69 = array of ip-address
240 dhcpOption: www-server code 72 = array of ip-address
241 dhcpOption: wpad-url code 252 = text
242 </pre></blockquote>
243
244 <p>Next, the entire subtree is processed, one level at the time. When
245 all the DHCP configuration is loaded, it is ready to receive requests.
246 The subtree in Debian Edu contain objects with object classes
247 top/dhcpService/dhcpOptions, top/dhcpSharedNetwork/dhcpOptions,
248 top/dhcpSubnet, top/dhcpGroup and top/dhcpHost. These provide options
249 and information about netmasks, dynamic range etc. Leaving out the
250 details here because it is not relevant for the focus of my
251 investigation, which is to see if it is possible to merge dns and dhcp
252 related computer objects.</p>
253
254 <p>When a DHCP request come in, LDAP is searched for the MAC address
255 of the client (00:00:00:00:00:00 in this example), using a subtree
256 scoped search with "cn=DHCP Config,dc=skole,dc=skolelinux,dc=no" as
257 the base and "(&(objectClass=dhcpHost)(dhcpHWAddress=ethernet
258 00:00:00:00:00:00))" as the filter. This is what a host object look
259 like:</p>
260
261 <blockquote><pre>
262 dn: cn=hostname,cn=group1,cn=THINCLIENTS,cn=DHCP Config,dc=skole,dc=skolelinux,dc=no
263 cn: hostname
264 objectClass: top
265 objectClass: dhcpHost
266 dhcpHWAddress: ethernet 00:00:00:00:00:00
267 dhcpStatements: fixed-address hostname
268 </pre></blockquote>
269
270 <p>There is less flexiblity in the way LDAP searches are done here.
271 The object classes need to have fixed names, and the configuration
272 need to be stored in a fairly specific LDAP structure. On the
273 positive side, the invidiual dhcpHost entires can be anywhere without
274 the DN pointed to by the dhcpServer entries. The latter should make
275 it possible to group all host entries in a subtree next to the
276 configuration entries, and this subtree can also be shared with the
277 DNS server if the schema proposed above is combined with the dhcpHost
278 structural object class.
279
280 <p><strong>Conclusion</strong></p>
281
282 <p>The PowerDNS implementation seem to be very flexible when it come
283 to which LDAP schemas to use. While its "tree" mode is rigid when it
284 come to the the LDAP structure, the "strict" mode is very flexible,
285 allowing DNS objects to be stored anywhere under the base cn specified
286 in the configuration.</p>
287
288 <p>The DHCP implementation on the other hand is very inflexible, both
289 regarding which LDAP schemas to use and which LDAP structure to use.
290 I guess one could implement ones own schema, as long as the
291 objectclasses and attributes have the names used, but this do not
292 really help when the DHCP subtree need to have a fairly fixed
293 structure.</p>
294
295 <p>Based on the observed behaviour, I suspect a LDAP structure like
296 this might work for Debian Edu:</p>
297
298 <blockquote><pre>
299 ou=services
300 cn=machine-info (dhcpService) - dhcpServiceDN points here
301 cn=dhcp (dhcpServer)
302 cn=dhcp-internal (dhcpSharedNetwork/dhcpOptions)
303 cn=10.0.2.0 (dhcpSubnet)
304 cn=group1 (dhcpGroup/dhcpOptions)
305 cn=dhcp-thinclients (dhcpSharedNetwork/dhcpOptions)
306 cn=192.168.0.0 (dhcpSubnet)
307 cn=group1 (dhcpGroup/dhcpOptions)
308 ou=machines - PowerDNS base points here
309 cn=hostname (dhcpHost/domainrelatedobject/dnsDomainAux)
310 </pre></blockquote>
311
312 <P>This is not tested yet. If the DHCP server require the dhcpHost
313 entries to be in the dhcpGroup subtrees, the entries can be stored
314 there instead of a common machines subtree, and the PowerDNS base
315 would have to be moved one level up to the machine-info subtree.</p>
316
317 <p>The combined object under the machines subtree would look something
318 like this:</p>
319
320 <blockquote><pre>
321 dn: dc=hostname,ou=machines,cn=machine-info,dc=skole,dc=skolelinux,dc=no
322 dc: hostname
323 objectClass: top
324 objectClass: dhcpHost
325 objectclass: domainrelatedobject
326 objectclass: dnsDomainAux
327 associateddomain: hostname.intern
328 arecord: 10.11.12.13
329 dhcpHWAddress: ethernet 00:00:00:00:00:00
330 dhcpStatements: fixed-address hostname.intern
331 </pre></blockquote>
332
333 </p>One could even add the LTSP configuration associated with a given
334 machine, as long as the required attributes are available in a
335 auxiliary object class.</p>
336 </div>
337
338 <div class="tags">Tags: <a href="http://people.skolelinux.org/pere/blog/tags/debian">debian</a>, <a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu</a>, <a href="http://people.skolelinux.org/pere/blog/tags/english">english</a>, <a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap</a>, <a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug</a>.</div>
339
340
341 </div>
342
343
344
345
346 <div id="sidebar">
347
348
349
350 <h2>Archive</h2>
351 <ul>
352
353 <li>2013
354 <ul>
355
356 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/01/">January (11)</a></li>
357
358 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/02/">February (9)</a></li>
359
360 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/03/">March (9)</a></li>
361
362 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/04/">April (6)</a></li>
363
364 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/05/">May (9)</a></li>
365
366 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/06/">June (10)</a></li>
367
368 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/07/">July (7)</a></li>
369
370 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/08/">August (3)</a></li>
371
372 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/09/">September (5)</a></li>
373
374 <li><a href="http://people.skolelinux.org/pere/blog/archive/2013/10/">October (6)</a></li>
375
376 </ul></li>
377
378 <li>2012
379 <ul>
380
381 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/01/">January (7)</a></li>
382
383 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/02/">February (10)</a></li>
384
385 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/03/">March (17)</a></li>
386
387 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/04/">April (12)</a></li>
388
389 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/05/">May (12)</a></li>
390
391 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/06/">June (20)</a></li>
392
393 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/07/">July (17)</a></li>
394
395 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/08/">August (6)</a></li>
396
397 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/09/">September (9)</a></li>
398
399 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/10/">October (17)</a></li>
400
401 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/11/">November (10)</a></li>
402
403 <li><a href="http://people.skolelinux.org/pere/blog/archive/2012/12/">December (7)</a></li>
404
405 </ul></li>
406
407 <li>2011
408 <ul>
409
410 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/01/">January (16)</a></li>
411
412 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/02/">February (6)</a></li>
413
414 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/03/">March (6)</a></li>
415
416 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/04/">April (7)</a></li>
417
418 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/05/">May (3)</a></li>
419
420 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/06/">June (2)</a></li>
421
422 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/07/">July (7)</a></li>
423
424 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/08/">August (6)</a></li>
425
426 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/09/">September (4)</a></li>
427
428 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/10/">October (2)</a></li>
429
430 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/11/">November (3)</a></li>
431
432 <li><a href="http://people.skolelinux.org/pere/blog/archive/2011/12/">December (1)</a></li>
433
434 </ul></li>
435
436 <li>2010
437 <ul>
438
439 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/01/">January (2)</a></li>
440
441 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/02/">February (1)</a></li>
442
443 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/03/">March (3)</a></li>
444
445 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/04/">April (3)</a></li>
446
447 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/05/">May (9)</a></li>
448
449 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/06/">June (14)</a></li>
450
451 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/07/">July (12)</a></li>
452
453 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/08/">August (13)</a></li>
454
455 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/09/">September (7)</a></li>
456
457 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/10/">October (9)</a></li>
458
459 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/11/">November (13)</a></li>
460
461 <li><a href="http://people.skolelinux.org/pere/blog/archive/2010/12/">December (12)</a></li>
462
463 </ul></li>
464
465 <li>2009
466 <ul>
467
468 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/01/">January (8)</a></li>
469
470 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/02/">February (8)</a></li>
471
472 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/03/">March (12)</a></li>
473
474 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/04/">April (10)</a></li>
475
476 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/05/">May (9)</a></li>
477
478 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/06/">June (3)</a></li>
479
480 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/07/">July (4)</a></li>
481
482 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/08/">August (3)</a></li>
483
484 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/09/">September (1)</a></li>
485
486 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/10/">October (2)</a></li>
487
488 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/11/">November (3)</a></li>
489
490 <li><a href="http://people.skolelinux.org/pere/blog/archive/2009/12/">December (3)</a></li>
491
492 </ul></li>
493
494 <li>2008
495 <ul>
496
497 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/11/">November (5)</a></li>
498
499 <li><a href="http://people.skolelinux.org/pere/blog/archive/2008/12/">December (7)</a></li>
500
501 </ul></li>
502
503 </ul>
504
505
506
507 <h2>Tags</h2>
508 <ul>
509
510 <li><a href="http://people.skolelinux.org/pere/blog/tags/3d-printer">3d-printer (13)</a></li>
511
512 <li><a href="http://people.skolelinux.org/pere/blog/tags/amiga">amiga (1)</a></li>
513
514 <li><a href="http://people.skolelinux.org/pere/blog/tags/aros">aros (1)</a></li>
515
516 <li><a href="http://people.skolelinux.org/pere/blog/tags/bankid">bankid (4)</a></li>
517
518 <li><a href="http://people.skolelinux.org/pere/blog/tags/bitcoin">bitcoin (7)</a></li>
519
520 <li><a href="http://people.skolelinux.org/pere/blog/tags/bootsystem">bootsystem (12)</a></li>
521
522 <li><a href="http://people.skolelinux.org/pere/blog/tags/bsa">bsa (2)</a></li>
523
524 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian">debian (87)</a></li>
525
526 <li><a href="http://people.skolelinux.org/pere/blog/tags/debian edu">debian edu (142)</a></li>
527
528 <li><a href="http://people.skolelinux.org/pere/blog/tags/digistan">digistan (10)</a></li>
529
530 <li><a href="http://people.skolelinux.org/pere/blog/tags/docbook">docbook (10)</a></li>
531
532 <li><a href="http://people.skolelinux.org/pere/blog/tags/drivstoffpriser">drivstoffpriser (4)</a></li>
533
534 <li><a href="http://people.skolelinux.org/pere/blog/tags/english">english (222)</a></li>
535
536 <li><a href="http://people.skolelinux.org/pere/blog/tags/fiksgatami">fiksgatami (21)</a></li>
537
538 <li><a href="http://people.skolelinux.org/pere/blog/tags/fildeling">fildeling (12)</a></li>
539
540 <li><a href="http://people.skolelinux.org/pere/blog/tags/freeculture">freeculture (12)</a></li>
541
542 <li><a href="http://people.skolelinux.org/pere/blog/tags/freedombox">freedombox (4)</a></li>
543
544 <li><a href="http://people.skolelinux.org/pere/blog/tags/frikanalen">frikanalen (11)</a></li>
545
546 <li><a href="http://people.skolelinux.org/pere/blog/tags/intervju">intervju (37)</a></li>
547
548 <li><a href="http://people.skolelinux.org/pere/blog/tags/isenkram">isenkram (7)</a></li>
549
550 <li><a href="http://people.skolelinux.org/pere/blog/tags/kart">kart (18)</a></li>
551
552 <li><a href="http://people.skolelinux.org/pere/blog/tags/ldap">ldap (8)</a></li>
553
554 <li><a href="http://people.skolelinux.org/pere/blog/tags/lenker">lenker (6)</a></li>
555
556 <li><a href="http://people.skolelinux.org/pere/blog/tags/ltsp">ltsp (1)</a></li>
557
558 <li><a href="http://people.skolelinux.org/pere/blog/tags/mesh network">mesh network (2)</a></li>
559
560 <li><a href="http://people.skolelinux.org/pere/blog/tags/multimedia">multimedia (25)</a></li>
561
562 <li><a href="http://people.skolelinux.org/pere/blog/tags/norsk">norsk (236)</a></li>
563
564 <li><a href="http://people.skolelinux.org/pere/blog/tags/nuug">nuug (156)</a></li>
565
566 <li><a href="http://people.skolelinux.org/pere/blog/tags/offentlig innsyn">offentlig innsyn (8)</a></li>
567
568 <li><a href="http://people.skolelinux.org/pere/blog/tags/open311">open311 (2)</a></li>
569
570 <li><a href="http://people.skolelinux.org/pere/blog/tags/opphavsrett">opphavsrett (45)</a></li>
571
572 <li><a href="http://people.skolelinux.org/pere/blog/tags/personvern">personvern (67)</a></li>
573
574 <li><a href="http://people.skolelinux.org/pere/blog/tags/raid">raid (1)</a></li>
575
576 <li><a href="http://people.skolelinux.org/pere/blog/tags/reprap">reprap (11)</a></li>
577
578 <li><a href="http://people.skolelinux.org/pere/blog/tags/rfid">rfid (2)</a></li>
579
580 <li><a href="http://people.skolelinux.org/pere/blog/tags/robot">robot (8)</a></li>
581
582 <li><a href="http://people.skolelinux.org/pere/blog/tags/rss">rss (1)</a></li>
583
584 <li><a href="http://people.skolelinux.org/pere/blog/tags/ruter">ruter (4)</a></li>
585
586 <li><a href="http://people.skolelinux.org/pere/blog/tags/scraperwiki">scraperwiki (2)</a></li>
587
588 <li><a href="http://people.skolelinux.org/pere/blog/tags/sikkerhet">sikkerhet (32)</a></li>
589
590 <li><a href="http://people.skolelinux.org/pere/blog/tags/sitesummary">sitesummary (4)</a></li>
591
592 <li><a href="http://people.skolelinux.org/pere/blog/tags/skepsis">skepsis (4)</a></li>
593
594 <li><a href="http://people.skolelinux.org/pere/blog/tags/standard">standard (43)</a></li>
595
596 <li><a href="http://people.skolelinux.org/pere/blog/tags/stavekontroll">stavekontroll (3)</a></li>
597
598 <li><a href="http://people.skolelinux.org/pere/blog/tags/stortinget">stortinget (9)</a></li>
599
600 <li><a href="http://people.skolelinux.org/pere/blog/tags/surveillance">surveillance (20)</a></li>
601
602 <li><a href="http://people.skolelinux.org/pere/blog/tags/sysadmin">sysadmin (1)</a></li>
603
604 <li><a href="http://people.skolelinux.org/pere/blog/tags/valg">valg (8)</a></li>
605
606 <li><a href="http://people.skolelinux.org/pere/blog/tags/video">video (39)</a></li>
607
608 <li><a href="http://people.skolelinux.org/pere/blog/tags/vitenskap">vitenskap (4)</a></li>
609
610 <li><a href="http://people.skolelinux.org/pere/blog/tags/web">web (28)</a></li>
611
612 </ul>
613
614
615 </div>
616 <p style="text-align: right">
617 Created by <a href="http://steve.org.uk/Software/chronicle">Chronicle v4.6</a>
618 </p>
619
620 </body>
621 </html>