<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Dhcp on TurboVision</title>
    <link>https://turbovision.in6-addr.net/tags/dhcp/</link>
    <description>Recent content in Dhcp on TurboVision</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 21 Apr 2026 14:06:12 +0000</lastBuildDate>
    <atom:link href="https://turbovision.in6-addr.net/tags/dhcp/index.xml" rel="self" type="application/rss&#43;xml" />
    
    
    
    <item>
      <title>Home Router in 2003: Debian Woody, iptables and the Stuff Which Runs</title>
      <link>https://turbovision.in6-addr.net/linux/home-router/home-router-in-2003-debian-woody-iptables-and-the-stuff-which-runs/</link>
      <pubDate>Sun, 02 Mar 2003 00:00:00 +0000</pubDate>
      <lastBuildDate>Sun, 02 Mar 2003 00:00:00 +0000</lastBuildDate>
      <guid>https://turbovision.in6-addr.net/linux/home-router/home-router-in-2003-debian-woody-iptables-and-the-stuff-which-runs/</guid>
      <description>&lt;p&gt;Now the router is in a phase where I trust it.&lt;/p&gt;
&lt;p&gt;This is a good feeling. It is not the first excitement feeling from the early SuSE days, and it is also not the hack-pride feeling from the D-channel/syslog trick. It is something else. The machine is simply there. It routes. It resolves. It gives leases. It proxies web. It zaps ads. It survives reboot. It is part of the flat now like the switch or the shelf.&lt;/p&gt;
&lt;p&gt;The disk swap from the 486 into the Cyrix box worked. Debian Potato was first on that disk, but by now I moved the system further to Debian Woody. That means kernel 2.4, and now finally &lt;code&gt;iptables&lt;/code&gt; instead of &lt;code&gt;ipchains&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;the-move-from-potato-to-woody&#34;&gt;The move from Potato to Woody&lt;/h2&gt;
&lt;p&gt;This is not a dramatic migration like the first Debian step. This one is more calm.&lt;/p&gt;
&lt;p&gt;The big practical reason is netfilter and &lt;code&gt;iptables&lt;/code&gt;. I want the 2.4 generation now. I want the more modern firewall and NAT setup, and I also want to stay on a current stable Debian instead of freezing forever on Potato.&lt;/p&gt;
&lt;p&gt;So now the stack looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian Woody&lt;/li&gt;
&lt;li&gt;kernel 2.4&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iptables&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bind9&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dhcpd&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Squid&lt;/li&gt;
&lt;li&gt;Adzapper&lt;/li&gt;
&lt;li&gt;PPPoE on DSL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is already much more modern feeling than the original SuSE 5.3 plus ISDN phase.&lt;/p&gt;
&lt;h2 id=&#34;the-box-itself&#34;&gt;The box itself&lt;/h2&gt;
&lt;p&gt;The hardware is still the same Cyrix Cx133 box. Beige, boring, a bit dusty, absolutely fine.&lt;/p&gt;
&lt;p&gt;With 32 MB RAM it is much happier than in the 8 MB starting phase. This is one of the reasons I am glad I did not keep the 486 as the final router. The 486 was okay for proving the install and services, but the Cyrix with more memory is simply the better place for Squid and general peace.&lt;/p&gt;
&lt;p&gt;The Teles card is still physically there for some time after DSL. Then it becomes more and more irrelevant. I keep the old configs around for a while because deleting old working things always feels dangerous. Only much later do I stop caring about the old ISDN remains.&lt;/p&gt;
&lt;h2 id=&#34;local-services-the-boring-ones-and-the-useful-ones&#34;&gt;Local services: the boring ones and the useful ones&lt;/h2&gt;
&lt;p&gt;The router is not only a router anymore. It is the small local infrastructure box.&lt;/p&gt;
&lt;h3 id=&#34;dhcp&#34;&gt;DHCP&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;dhcpd&lt;/code&gt; does what it should do and I mostly do not think about it anymore. Which is good.&lt;/p&gt;
&lt;p&gt;Clients come, they get an address, gateway, DNS, and that is it. If DHCP is broken, everyone notices fast. If it works, nobody says anything. This is one of the purest sysadmin services in the world.&lt;/p&gt;
&lt;h3 id=&#34;dns&#34;&gt;DNS&lt;/h3&gt;
&lt;p&gt;Now I use &lt;code&gt;bind9&lt;/code&gt;, not the old bind8 from the Potato phase. Still forwarding, still simple. I am not suddenly becoming an authority server wizard. I still want a local cache and one place for clients to ask.&lt;/p&gt;
&lt;p&gt;What I like is that DNS problems are easier to see now because the line is always on. In the ISDN phase one could confuse line-down issues and DNS issues very easily. With DSL that whole category of confusion is much smaller.&lt;/p&gt;
&lt;h3 id=&#34;squid--adzapper&#34;&gt;Squid + Adzapper&lt;/h3&gt;
&lt;p&gt;Squid remains important. Maybe less dramatic than on ISDN, because the DSL line is already much nicer. But the proxy still gives me cache, central control, and with Adzapper it still gives me a better web.&lt;/p&gt;
&lt;p&gt;Adzapper is honestly one of my favourite small pieces in the whole setup. It is so unnecessary and so useful at the same time. Web pages are getting heavier and more stupid. Banners everywhere. Counters. Tracking garbage. The proxy says no and shows a small zapped replacement. Perfect.&lt;/p&gt;
&lt;h2 id=&#34;iptables-finally-a-nicer-firewall-world&#34;&gt;iptables: finally a nicer firewall world&lt;/h2&gt;
&lt;p&gt;With Woody and kernel 2.4 I finally move to &lt;code&gt;iptables&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The logic is not new. I already know what I want the firewall to do:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;default deny where sensible&lt;/li&gt;
&lt;li&gt;allow established traffic back in&lt;/li&gt;
&lt;li&gt;let the internal network out&lt;/li&gt;
&lt;li&gt;do masquerading on the DSL side&lt;/li&gt;
&lt;li&gt;only open specific ports intentionally&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But the framework feels cleaner now.&lt;/p&gt;
&lt;p&gt;My base script is still very normal:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -F
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t nat -F
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -P INPUT DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -P FORWARD DROP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -P OUTPUT ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A INPUT -i lo -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A INPUT -i eth0 -p tcp --dport &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; -j ACCEPT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is not a firewall masterpiece. It is just a decent honest firewall for a home router.&lt;/p&gt;
&lt;p&gt;And this is enough for me.&lt;/p&gt;
&lt;h2 id=&#34;things-that-changed-since-dsl&#34;&gt;Things that changed since DSL&lt;/h2&gt;
&lt;p&gt;The biggest change after DSL is not only speed. It is mentality.&lt;/p&gt;
&lt;p&gt;On ISDN I was always thinking in sessions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;line up&lt;/li&gt;
&lt;li&gt;line down&lt;/li&gt;
&lt;li&gt;should I bring it up now&lt;/li&gt;
&lt;li&gt;did the first request trigger it&lt;/li&gt;
&lt;li&gt;will this cost something stupid&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On DSL this is gone. The connection is just there. That means I can think much more about service quality and less about connection state.&lt;/p&gt;
&lt;p&gt;That is maybe why the router in 2003 feels more complete. The old uplink logic noise is gone, so the rest of the machine can come into focus.&lt;/p&gt;
&lt;h2 id=&#34;things-that-still-annoy-me&#34;&gt;Things that still annoy me&lt;/h2&gt;
&lt;p&gt;Not all is paradise of course.&lt;/p&gt;
&lt;p&gt;Sometimes PPPoE feels a bit ugly. Sometimes package upgrades want a bit too much trust. Sometimes Squid config debugging is still a way to lose an evening. And sometimes I make one firewall typo and then of course I only notice it when I am on the wrong side of the router.&lt;/p&gt;
&lt;p&gt;But these are good problems. They are now normal Linux administration problems, not existential connection problems.&lt;/p&gt;
&lt;p&gt;Also I still keep too many old notes and backup files. The system is half clean and half archaeology. This is maybe standard student-admin style.&lt;/p&gt;
&lt;h2 id=&#34;what-i-use-this-machine-for-now&#34;&gt;What I use this machine for now&lt;/h2&gt;
&lt;p&gt;The funny thing is that the router is no longer just about internet access. It is a little confidence machine.&lt;/p&gt;
&lt;p&gt;When I want to test something network related, I have a real place for it.
When I want to understand a service, I can run it there.
When I want to make some small infrastructure experiment, I do not need to imagine it, I can really do it.&lt;/p&gt;
&lt;p&gt;This maybe sounds bigger than a home router deserves, but I think many people who did such boxes know exactly this feeling. A machine at the edge of the network teaches a lot because it sits exactly where things become real.&lt;/p&gt;
&lt;h2 id=&#34;what-comes-next&#34;&gt;What comes next&lt;/h2&gt;
&lt;p&gt;I do not think this box is finished. It is only stable enough that now I can be a bit more calm.&lt;/p&gt;
&lt;p&gt;Maybe next I write more detailed notes about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;iptables&lt;/code&gt; rules I actually keep&lt;/li&gt;
&lt;li&gt;Squid and Adzapper config&lt;/li&gt;
&lt;li&gt;what I changed from Potato to Woody&lt;/li&gt;
&lt;li&gt;maybe some monitoring because right now I still trust too much and measure too little&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For now I mostly enjoy that the DSL LED is stable, Debian is on the box, the Cyrix is still alive, and all the little services come up after reboot without drama.&lt;/p&gt;
&lt;p&gt;That alone is already very good.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Debian Potato on a 486 Before the Real Router Swap</title>
      <link>https://turbovision.in6-addr.net/linux/home-router/debian-potato-on-a-486-before-the-real-router-swap/</link>
      <pubDate>Sat, 08 Sep 2001 00:00:00 +0000</pubDate>
      <lastBuildDate>Sat, 08 Sep 2001 00:00:00 +0000</lastBuildDate>
      <guid>https://turbovision.in6-addr.net/linux/home-router/debian-potato-on-a-486-before-the-real-router-swap/</guid>
      <description>&lt;p&gt;Now the DSL line is finally really there.&lt;/p&gt;
&lt;p&gt;The modem LED is not blinking anymore. It is stable. This alone already changes the whole feeling in the room. For years that modem was almost decoration with hope inside. Now it is actually the uplink.&lt;/p&gt;
&lt;p&gt;The speed is T-DSL 768/128. For me after ISDN it feels very fast. Web pages are suddenly there. Bigger downloads are no longer some project planning. The line is just there all the time. No dial on demand. No waiting for the first click. No listening if the ISDN side comes up. It is honestly a little bit fantastic.&lt;/p&gt;
&lt;p&gt;And exactly because now the line is stable, I make the next big move: I prepare the router migration to Debian.&lt;/p&gt;
&lt;h2 id=&#34;why-i-want-debian-on-this-machine&#34;&gt;Why I want Debian on this machine&lt;/h2&gt;
&lt;p&gt;SuSE was important for me to start. Without SuSE 5.3 maybe I would not have started at that point. YaST helped, the docs were okay, and for the first ISDN phase it was practical.&lt;/p&gt;
&lt;p&gt;But after some time I notice that what I really like is the direct config file side. I want less distribution magic, more plain files, more package control in a way that feels simple and honest. Also many people around me speak good things about Debian, and I like the whole idea that I can install a very small base and then only add what I really need.&lt;/p&gt;
&lt;p&gt;So I decide: the router should move to Debian. But I do not touch the production router first. I am maybe stubborn, but not that stupid.&lt;/p&gt;
&lt;h2 id=&#34;three-floppies-and-a-network&#34;&gt;Three floppies and a network&lt;/h2&gt;
&lt;p&gt;The install is very nice in a nerd way. No CD install. No glossy thing. Just floppies and network.&lt;/p&gt;
&lt;p&gt;For Potato I use three 1.44 MB floppies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rescue&lt;/li&gt;
&lt;li&gt;root&lt;/li&gt;
&lt;li&gt;driver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I use the compact boot flavor because it already has the common network cards I need. That means I can boot the machine, get network on it, and pull the rest directly from a Debian mirror through the internet.&lt;/p&gt;
&lt;p&gt;This is one of these moments where the technology itself already feels good. The install method is small and direct. It matches what I want the router to be.&lt;/p&gt;
&lt;p&gt;The target machine for the first Debian install is not the Cyrix router. It is a spare 486 I have lying around. Slow, but enough for testing. I want the whole new system ready somewhere else before I touch the real edge machine.&lt;/p&gt;
&lt;p&gt;The 486 boots from floppy, asks the normal questions, then I configure the network and point it to a mirror. The packages come over DSL. This is maybe the first time where I really feel the DSL in a practical admin task: network installation is not painful anymore. It is still not super fast, but it is completely realistic.&lt;/p&gt;
&lt;h2 id=&#34;first-priority-does-dsl-work-on-the-486&#34;&gt;First priority: does DSL work on the 486?&lt;/h2&gt;
&lt;p&gt;Before I care about LAN services, before DNS, before any comfort stuff, I want one proof: can this new Debian box take the DSL cable, boot, and come back with internet?&lt;/p&gt;
&lt;p&gt;So after the base install and the PPPoE setup I take the DSL cable and put it into the 486 test machine. Then reboot.&lt;/p&gt;
&lt;p&gt;This reboot test is important for me. A lot of things work once when you configured them half by hand in a hurry. I want to know if it survives a cold start and comes back alone.&lt;/p&gt;
&lt;p&gt;It does.&lt;/p&gt;
&lt;p&gt;The 486 boots, PPPoE comes up, the route is there, internet works. I reboot one more time because I do not trust success if I only saw it once. Same result. At that moment I know the migration is realistic.&lt;/p&gt;
&lt;h2 id=&#34;the-potato-package-set-i-use&#34;&gt;The Potato package set I use&lt;/h2&gt;
&lt;p&gt;I keep it simple. This is a router, not a kitchen sink.&lt;/p&gt;
&lt;p&gt;For the local infrastructure I install these important things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;bind8&lt;/code&gt; (BIND 8.2.3)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dhcpd&lt;/code&gt; from ISC DHCP 2.0&lt;/li&gt;
&lt;li&gt;Squid 2.2&lt;/li&gt;
&lt;li&gt;the PPPoE package/tools&lt;/li&gt;
&lt;li&gt;normal network admin tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For the firewall I stay with &lt;code&gt;ipchains&lt;/code&gt; because Potato is still kernel 2.2 land for me. &lt;code&gt;iptables&lt;/code&gt; is not the topic here yet.&lt;/p&gt;
&lt;p&gt;This is okay. The line is DSL now, but the firewall story is still 2.2 generation. I do not mind. First I want a stable router. The newer firewall framework can wait.&lt;/p&gt;
&lt;p&gt;The detailed LAN-service part became its own small project already, so I write that separately: DHCP, bind8, Squid, Adzapper, and the annoying testing while the old router is still alive on the same LAN. That part is not hard in one big dramatic way. It is hard in fifteen little annoying ways.&lt;/p&gt;
&lt;p&gt;So for this note I keep the focus on the migration shape itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Debian install by floppy and network&lt;/li&gt;
&lt;li&gt;DSL check on the 486&lt;/li&gt;
&lt;li&gt;package set ready&lt;/li&gt;
&lt;li&gt;disk prepared for the real box&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why-i-am-doing-the-disk-swap-instead-of-just-swapping-machines&#34;&gt;Why I am doing the disk swap instead of just swapping machines&lt;/h2&gt;
&lt;p&gt;The final plan is simple: when all is done on the 486, I take that disk and put it into the real router box, the Cyrix Cx133.&lt;/p&gt;
&lt;p&gt;The reason is practical. The Cyrix box is the better final hardware. More RAM. Better fit for Squid and general comfort. The 486 is only the preparation table.&lt;/p&gt;
&lt;p&gt;So the 486 is not the new router. It is the place where the new router disk is born.&lt;/p&gt;
&lt;p&gt;I like this method because it keeps the dangerous experimentation away from the live edge machine. The production router can keep running until the new disk is ready. Only then do I touch the real box.&lt;/p&gt;
&lt;p&gt;I think this is maybe the first time I do a migration in a way that feels half-professional.&lt;/p&gt;
&lt;p&gt;The part which still decides everything is whether the LAN services are really boring enough. DSL on the 486 is only the first proof. The second proof is whether clients get addresses, names resolve, and the proxy does not behave stupidly. If that part is still shaky, then the disk stays in the 486 for more testing.&lt;/p&gt;
&lt;p&gt;Next step is then the real swap. If all goes well, Debian boots in the Cyrix box and nobody in the LAN notices more than one short outage.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Getting the LAN Services Right: dhcpd, bind8, Squid and Adzapper</title>
      <link>https://turbovision.in6-addr.net/linux/home-router/getting-the-lan-services-right-dhcp-bind8-squid-and-adzapper/</link>
      <pubDate>Mon, 20 Aug 2001 00:00:00 +0000</pubDate>
      <lastBuildDate>Mon, 20 Aug 2001 00:00:00 +0000</lastBuildDate>
      <guid>https://turbovision.in6-addr.net/linux/home-router/getting-the-lan-services-right-dhcp-bind8-squid-and-adzapper/</guid>
      <description>&lt;p&gt;The DSL line is there now and the Debian box on the 486 can already boot and go online. That was the first important check. But that alone does not make it a real router replacement.&lt;/p&gt;
&lt;p&gt;The real pain is not only getting one machine online. The real pain is making one machine useful for the whole LAN.&lt;/p&gt;
&lt;p&gt;This is the part where a lot of nice migration ideas die. One machine can route, yes, but does it really replace the old box? That means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;clients must get addresses&lt;/li&gt;
&lt;li&gt;clients must resolve names&lt;/li&gt;
&lt;li&gt;web must go through a proxy if I want the same traffic saving as before&lt;/li&gt;
&lt;li&gt;and all this must survive reboot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only then it is serious.&lt;/p&gt;
&lt;p&gt;So this is what I do now on the Debian Potato install on the 486. The disk is still in the 486. The Cyrix Cx133 is still the production router. The old machine is still serving the flat. This is good because it gives me space to break things on the 486 without immediately making everybody angry.&lt;/p&gt;
&lt;h2 id=&#34;first-i-want-the-boring-things&#34;&gt;First I want the boring things&lt;/h2&gt;
&lt;p&gt;I noticed already some time ago that good router work is mostly boring work.&lt;/p&gt;
&lt;p&gt;The exciting things are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;first successful dial&lt;/li&gt;
&lt;li&gt;first firewall rules&lt;/li&gt;
&lt;li&gt;the syslog hack&lt;/li&gt;
&lt;li&gt;the DynDNS update&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But the part which decides if people trust the router is boring:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DHCP must just work&lt;/li&gt;
&lt;li&gt;DNS must just work&lt;/li&gt;
&lt;li&gt;Squid must just work&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If these things fail, then nobody cares how clever the rest is.&lt;/p&gt;
&lt;p&gt;So my goal with the 486 is not elegance. The goal is: one by one make the LAN services boring.&lt;/p&gt;
&lt;h2 id=&#34;dhcpd-the-service-which-becomes-annoying-because-the-old-router-is-still-alive&#34;&gt;dhcpd: the service which becomes annoying because the old router is still alive&lt;/h2&gt;
&lt;p&gt;I install &lt;code&gt;dhcpd&lt;/code&gt; from the Potato package set, which means ISC DHCP 2.0 generation. The config itself is not very exotic. One subnet, one range, one gateway, one resolver.&lt;/p&gt;
&lt;p&gt;Something small like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-lease-time 600;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;max-lease-time 7200;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;subnet 192.168.42.0 netmask 255.255.255.0 {
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  range 192.168.42.100 192.168.42.140;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  option routers 192.168.42.254;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  option domain-name-servers 192.168.42.254;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  option domain-name &amp;#34;home.lan&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nothing special. The problem is not the syntax. The problem is that there is already another &lt;code&gt;dhcpd&lt;/code&gt; on the network: the one on the current production router.&lt;/p&gt;
&lt;p&gt;So now I have the classic transition-phase nonsense:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the new router should answer&lt;/li&gt;
&lt;li&gt;the old router must keep serving the LAN&lt;/li&gt;
&lt;li&gt;but if both answer, testing becomes stupid&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At first I try to be clever. I think maybe I can just test with one client and time it right. That is not nice. Sometimes the old one answers first, sometimes the new one, and then the result is unclear and I get angry at the wrong machine.&lt;/p&gt;
&lt;p&gt;After that I stop pretending and just do it properly. For a test window I disable &lt;code&gt;dhcpd&lt;/code&gt; on the old router, then I bring up &lt;code&gt;dhcpd&lt;/code&gt; on the 486 and check one client cleanly. That is much better. The client gets:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;address&lt;/li&gt;
&lt;li&gt;gateway&lt;/li&gt;
&lt;li&gt;resolver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;and then I know at least that the DHCP part itself is correct.&lt;/p&gt;
&lt;p&gt;This was a little more hassle than I expected, but it also showed me again that migration work is very often not about software difficulty. It is about two valid systems existing at the same time.&lt;/p&gt;
&lt;h2 id=&#34;bind8-keep-it-boring-and-forwarding&#34;&gt;bind8: keep it boring and forwarding&lt;/h2&gt;
&lt;p&gt;For DNS I use &lt;code&gt;bind8&lt;/code&gt;, which in Potato is BIND 8.2.3. I do not want to make anything fancy from it.&lt;/p&gt;
&lt;p&gt;No authoritative zones.&lt;br&gt;
No big internal DNS kingdom.&lt;br&gt;
No strange split-horizon ideas.&lt;/p&gt;
&lt;p&gt;I only want:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;clients ask the router&lt;/li&gt;
&lt;li&gt;the router forwards to upstream resolvers&lt;/li&gt;
&lt;li&gt;answers get cached&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That is enough.&lt;/p&gt;
&lt;p&gt;The config is small and I like that. A router which serves the LAN should do small things very reliably before it does big things very impressively.&lt;/p&gt;
&lt;p&gt;The practical effect is immediately visible. When I move a test client to the 486 as resolver and start doing repeated lookups, the difference is small but nice. The first lookup goes out, the later ones are local and faster. More important than the speed is the centralization: now the router is the one place where I can see DNS behavior.&lt;/p&gt;
&lt;p&gt;And debugging becomes simpler when one machine owns one concern.&lt;/p&gt;
&lt;p&gt;That is maybe the general theme of this whole router story now. I keep moving functions into the router not because I want one giant monster box, but because I want one place where the edge behavior is visible and manageable.&lt;/p&gt;
&lt;h2 id=&#34;squid-comes-back-but-cleaner&#34;&gt;Squid comes back, but cleaner&lt;/h2&gt;
&lt;p&gt;Squid was already a good idea in the ISDN phase. On ISDN it was almost impossible to dislike the idea of caching. If one image or one stupid page element comes a second time through the line, then I want it local.&lt;/p&gt;
&lt;p&gt;On DSL the pressure is smaller, but I still want the proxy. Partly for cache, partly for control, partly because I just like the idea that the router can shape traffic a little bit instead of only forwarding it.&lt;/p&gt;
&lt;p&gt;Potato gives me Squid 2.2 and that is fine.&lt;/p&gt;
&lt;p&gt;The basic proxy setup is not the hard part. The hard part is always the tiny things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;browser config on test clients&lt;/li&gt;
&lt;li&gt;access rules&lt;/li&gt;
&lt;li&gt;cache directory init&lt;/li&gt;
&lt;li&gt;making sure the daemon really starts on boot and not only when I am standing next to it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After some tries it works. Pages load through the proxy and repeated fetches feel good. Then the funny extra comes back.&lt;/p&gt;
&lt;h2 id=&#34;adzapper-is-still-one-of-my-favourite-things&#34;&gt;Adzapper is still one of my favourite things&lt;/h2&gt;
&lt;p&gt;I know Adzapper is not some deep engineering masterpiece, but I still like it a lot.&lt;/p&gt;
&lt;p&gt;It does exactly the kind of practical thing I enjoy:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one small tool&lt;/li&gt;
&lt;li&gt;put in the right place&lt;/li&gt;
&lt;li&gt;removes a lot of stupid traffic and ugly banners&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When it works, the browser gets the page, but where there used to be a banner or other useless graphic, there is now a placeholder image saying &amp;ldquo;This ad zapped&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Perfect.&lt;/p&gt;
&lt;p&gt;This is useful in three ways at the same time:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;less traffic&lt;/li&gt;
&lt;li&gt;cleaner pages&lt;/li&gt;
&lt;li&gt;a visible sign that the proxy is really doing something&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And honestly the third point is maybe the one I enjoy most. A cache is invisible most of the time. Adzapper is visible. It says: yes, the router is not only passing traffic, it is protecting me from some nonsense too.&lt;/p&gt;
&lt;p&gt;I install it and immediately like the result again. On ISDN it directly saved connection time and almost directly money. On DSL it still saves bandwidth and makes browsing less ugly.&lt;/p&gt;
&lt;p&gt;The web is not getting better by itself, so I do not feel guilty doing this at all.&lt;/p&gt;
&lt;h2 id=&#34;testing-order-matters&#34;&gt;Testing order matters&lt;/h2&gt;
&lt;p&gt;At some point I write a checklist because without one I start jumping between services and then I lose the clear state.&lt;/p&gt;
&lt;p&gt;My testing order becomes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;DSL up after reboot&lt;/li&gt;
&lt;li&gt;local interface up&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dhcpd&lt;/code&gt; lease works&lt;/li&gt;
&lt;li&gt;DNS forward/cache works&lt;/li&gt;
&lt;li&gt;Squid proxy works&lt;/li&gt;
&lt;li&gt;Adzapper visibly works&lt;/li&gt;
&lt;li&gt;second reboot&lt;/li&gt;
&lt;li&gt;test again&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The second reboot is important. Too many things work once because the admin is standing there. I want it to work when nobody is standing there.&lt;/p&gt;
&lt;p&gt;That is maybe the difference between &amp;ldquo;nice evening success&amp;rdquo; and &amp;ldquo;router success&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;the-486-as-preparation-table&#34;&gt;The 486 as preparation table&lt;/h2&gt;
&lt;p&gt;By now I am completely convinced that the 486 is the right preparation machine for this migration.&lt;/p&gt;
&lt;p&gt;If I had tried to do all this directly on the production router, I would already hate myself by now.&lt;/p&gt;
&lt;p&gt;Because then every DHCP mistake means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;no client gets a lease&lt;/li&gt;
&lt;li&gt;DNS becomes unclear&lt;/li&gt;
&lt;li&gt;web breaks&lt;/li&gt;
&lt;li&gt;and the whole flat knows about my learning curve&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the 486 it is different. The mistakes are still annoying, but they are private mistakes first. That is much better.&lt;/p&gt;
&lt;p&gt;Also, it gives me the nice psychological effect that the new router already exists before the swap. The disk already has a personality. The services already exist. The machine already behaves like the new router. The final swap is then more hardware logistics than system creation.&lt;/p&gt;
&lt;h2 id=&#34;what-is-still-missing-before-the-swap&#34;&gt;What is still missing before the swap&lt;/h2&gt;
&lt;p&gt;Even now I do not want to rush it.&lt;/p&gt;
&lt;p&gt;Before I move the disk to the Cyrix box, I still want:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one more cold boot test&lt;/li&gt;
&lt;li&gt;one clean DHCP test with the old router quiet&lt;/li&gt;
&lt;li&gt;one browser test with Squid and Adzapper on more than one client&lt;/li&gt;
&lt;li&gt;one simple long-running check that nothing stupid dies after two hours&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Only then I will trust it enough.&lt;/p&gt;
&lt;p&gt;The migration itself is actually the smaller dramatic action. The bigger question is whether all these little LAN services are really boring enough.&lt;/p&gt;
&lt;p&gt;And I think that is where the real router quality lives.&lt;/p&gt;
&lt;p&gt;The syslog hack was more exciting.&lt;br&gt;
The first ISDN dial was more exciting.&lt;br&gt;
The first stable DSL sync was more exciting.&lt;/p&gt;
&lt;p&gt;But this part is maybe more important.&lt;/p&gt;
&lt;p&gt;Because when the disk finally goes from the 486 into the Cyrix box, I do not want a nice Debian install. I want a real replacement for the old router.&lt;/p&gt;
&lt;p&gt;That is now very close.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
