<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Router on TurboVision</title>
    <link>https://turbovision.in6-addr.net/tags/router/</link>
    <description>Recent content in Router 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/router/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>
    
    <item>
      <title>My D-Channel Syslog Hack and DynDNS Update for the Home Router</title>
      <link>https://turbovision.in6-addr.net/linux/home-router/dchannel-syslog-hack-and-dyndns-for-my-home-router/</link>
      <pubDate>Sun, 09 Apr 2000 00:00:00 +0000</pubDate>
      <lastBuildDate>Sun, 09 Apr 2000 00:00:00 +0000</lastBuildDate>
      <guid>https://turbovision.in6-addr.net/linux/home-router/dchannel-syslog-hack-and-dyndns-for-my-home-router/</guid>
      <description>&lt;p&gt;Now I have one of my favourite hacks on this router.&lt;/p&gt;
&lt;p&gt;The problem was simple: when I am not at home and the line is down, I still want a way to make the box go online. I do not want to call home, let somebody pick up, log in somewhere, and then maybe start the connection. I want a stupid simple trick. If I call the home number, the box should see that and bring the line up.&lt;/p&gt;
&lt;p&gt;But I do not want the caller to pay for the call. That was important for me. The whole trick should work before the call is really answered.&lt;/p&gt;
&lt;h2 id=&#34;what-the-d-channel-gives-me&#34;&gt;What the D-channel gives me&lt;/h2&gt;
&lt;p&gt;With ISDN the D-channel signal comes before the B-channel is really used for the actual call. isdn4linux logs things about incoming calls into syslog. When I noticed that, I got the idea that maybe I do not need some big elegant callback solution. Maybe I can just watch the logs.&lt;/p&gt;
&lt;p&gt;This is exactly what I do.&lt;/p&gt;
&lt;p&gt;I write a small bash script. I am not some shell master. My bash is honestly very small. But for this I only need a few things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tail -f&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;a loop&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isdnctrl dial ippp0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;also one &lt;code&gt;wget&lt;/code&gt; call&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That is enough.&lt;/p&gt;
&lt;h2 id=&#34;the-very-small-ugly-core&#34;&gt;The very small ugly core&lt;/h2&gt;
&lt;p&gt;The script watches &lt;code&gt;/var/log/messages&lt;/code&gt; all the time. When an incoming-call line from i4l appears, the script checks if the caller number is one of my allowed numbers. If yes, it triggers the internet connection.&lt;/p&gt;
&lt;p&gt;Something 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;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&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;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ALLOWED&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0301234567 01701234567&amp;#34;&lt;/span&gt;
&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;tail -f /var/log/messages &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; line&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -q &lt;span class=&#34;s2&#34;&gt;&amp;#34;i4l.*incoming\|isdn.*INCOMING&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;caller&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$line&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -o &lt;span class=&#34;s1&#34;&gt;&amp;#39;[0-9]\{6,11\}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -1&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; a in &lt;span class=&#34;nv&#34;&gt;$ALLOWED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$caller&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ok&lt;/span&gt; -eq &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  /usr/sbin/isdnctrl dial ippp0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sleep &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  /usr/bin/wget -q -O - &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://example-dyns.invalid/update?host=myrouter&amp;amp;pass=secret&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&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;This is not art. This is not software engineering beauty. But it works.&lt;/p&gt;
&lt;p&gt;When I call the home number from my mobile or from somewhere else, the phone rings, but nobody answers. So the caller does not get charged. The router already sees enough from the D-channel and starts the dial. Then after a few seconds it uses &lt;code&gt;wget&lt;/code&gt; to push the fresh public IP to a small web server and to a dyns provider. The dyns name now points to the current address.&lt;/p&gt;
&lt;p&gt;For me this is so good because it is made from almost nothing. Just log file watching and a few commands.&lt;/p&gt;
&lt;h2 id=&#34;why-the-dyns-update-matters&#34;&gt;Why the dyns update matters&lt;/h2&gt;
&lt;p&gt;The line does not have a permanent public IP. So it is not enough to only bring the connection up. I also need to know what the new address is or have some name that points to it.&lt;/p&gt;
&lt;p&gt;The second part of the hack is therefore the &lt;code&gt;wget&lt;/code&gt; update.&lt;/p&gt;
&lt;p&gt;I push the address to two places:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one tiny helper page on a web server I have access to&lt;/li&gt;
&lt;li&gt;one dyns provider with a made-up service name and simple update URL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The dyns side is the practical one. If it updates correctly, then I can use the hostname from outside and I do not care what IP I got this time.&lt;/p&gt;
&lt;p&gt;The helper page is more for me. I can look there and check if the update happened and which address was sent.&lt;/p&gt;
&lt;h2 id=&#34;small-problems-with-this-solution&#34;&gt;Small problems with this solution&lt;/h2&gt;
&lt;p&gt;Of course it is not all perfect.&lt;/p&gt;
&lt;p&gt;First, the exact i4l log format is not always the same. One version writes a line slightly different than another one. So I try a few grep patterns until it catches the right thing and not random noise.&lt;/p&gt;
&lt;p&gt;Second, if the syslog watcher dies, then the trick is dead. So I put it in a small restart loop. Primitive, but enough.&lt;/p&gt;
&lt;p&gt;Third, timing is a bit ugly. If I call and hang up too fast, sometimes the script catches it, sometimes not. If I let it ring a bit longer, it is more reliable. So I learn how long I need to let it ring.&lt;/p&gt;
&lt;p&gt;Fourth, &lt;code&gt;wget&lt;/code&gt; should not run too early. First the line must be really up. So I just sleep some seconds before the update call. This is exactly the kind of ugly timing thing which I do not love, but it is still better than no solution.&lt;/p&gt;
&lt;h2 id=&#34;why-i-like-this-hack-so-much&#34;&gt;Why I like this hack so much&lt;/h2&gt;
&lt;p&gt;I think the reason is: this is one of the first times I make the machine do something clever only with things I already have.&lt;/p&gt;
&lt;p&gt;No new hardware.
No expensive software.
No giant daemon.
No telephony box.&lt;/p&gt;
&lt;p&gt;Only:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;li&gt;syslog&lt;/li&gt;
&lt;li&gt;bash&lt;/li&gt;
&lt;li&gt;i4l log messages&lt;/li&gt;
&lt;li&gt;one &lt;code&gt;wget&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the style of solution I really enjoy. It feels a bit improvised, yes, but it is also very direct. The machine says what happens in the log, I listen to it, and I react.&lt;/p&gt;
&lt;p&gt;Also it makes the router suddenly feel more &amp;ldquo;alive&amp;rdquo;. It is not only a passive box anymore. It reacts to the outside world in a small smart way.&lt;/p&gt;
&lt;h2 id=&#34;other-changes-around-this-time&#34;&gt;Other changes around this time&lt;/h2&gt;
&lt;p&gt;I also moved the router from SuSE 5.3 to SuSE 6.4 by now. That means kernel 2.2 and &lt;code&gt;ipchains&lt;/code&gt; instead of &lt;code&gt;ipfwadm&lt;/code&gt;. This is good for the LAN side because helpers like &lt;code&gt;ip_masq_ftp&lt;/code&gt; are there and some ugly protocol stuff becomes less ugly.&lt;/p&gt;
&lt;p&gt;So the box now looks already more grown-up than in the first phase:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SuSE 6.4&lt;/li&gt;
&lt;li&gt;kernel 2.2&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ipchains&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;ISDN dial on demand&lt;/li&gt;
&lt;li&gt;syslog trigger hack&lt;/li&gt;
&lt;li&gt;dyns update with &lt;code&gt;wget&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And still the DSL modem LED is blinking.&lt;/p&gt;
&lt;p&gt;I think this is the most absurd thing: the software side gets more and more finished while the modem still sits there and says &amp;ldquo;not yet&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;next-things-i-want&#34;&gt;Next things I want&lt;/h2&gt;
&lt;p&gt;The next obvious step is more local services.&lt;/p&gt;
&lt;p&gt;I want:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;local DNS caching&lt;/li&gt;
&lt;li&gt;maybe DHCP from the router&lt;/li&gt;
&lt;li&gt;maybe a web proxy because the line is still not exactly fast&lt;/li&gt;
&lt;li&gt;some ad filtering because web pages are getting more annoying and bigger&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Especially the proxy idea is attractive. If the same stupid banner loads ten times, then I pay for the same stupidity ten times. This is not acceptable.&lt;/p&gt;
&lt;p&gt;So probably the next article is about making the LAN side more comfortable and maybe a bit less wasteful.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Making ISDN Dial-On-Demand Work with SuSE and ipfwadm</title>
      <link>https://turbovision.in6-addr.net/linux/home-router/making-isdn-dial-on-demand-work-with-suse-and-ipfwadm/</link>
      <pubDate>Sun, 14 Feb 1999 00:00:00 +0000</pubDate>
      <lastBuildDate>Sun, 14 Feb 1999 00:00:00 +0000</lastBuildDate>
      <guid>https://turbovision.in6-addr.net/linux/home-router/making-isdn-dial-on-demand-work-with-suse-and-ipfwadm/</guid>
      <description>&lt;p&gt;Now the box is not only booting, it is doing useful work.&lt;/p&gt;
&lt;p&gt;I still have the DSL hardware connected, but the modem LED is still blinking and not stable. So this means: the real life is still ISDN. But because of the T-Online/DSL package I can already use ISDN for internet without this old fear of counting every minute too hard. That makes it much more realistic to really use the Linux router every day and not only as some weekend test setup.&lt;/p&gt;
&lt;p&gt;The main thing I wanted was dial on demand. I do not want the machine online all the time if nobody uses it. Also I do not want manual dial each time. The right thing is: local machine sends packet, router notices it, line goes up, internet works. Later, when no traffic is there anymore, the line goes down again.&lt;/p&gt;
&lt;p&gt;In theory this sounds very logical. In practice it takes me enough evenings.&lt;/p&gt;
&lt;h2 id=&#34;ipppd-and-the-general-direction&#34;&gt;ipppd and the general direction&lt;/h2&gt;
&lt;p&gt;The important parts for me are &lt;code&gt;isdn4linux&lt;/code&gt; and &lt;code&gt;ipppd&lt;/code&gt;. isdn4linux does the low-level ISDN side and &lt;code&gt;ipppd&lt;/code&gt; does the PPP part. After reading enough HOWTO text and trying enough wrong settings I end up with a setup that is at least understandable.&lt;/p&gt;
&lt;p&gt;The main config is not beautiful, but it is mine:&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;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&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;# /etc/ppp/options.ippp0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;asyncmap 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noauth
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crtscts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;modem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxyarp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;defaultroute
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;noipdefault
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usepeerdns
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;persist
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;idle 300
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;holdoff 5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;maxfail 3&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;The important line for me here is &lt;code&gt;idle 300&lt;/code&gt;. Five minutes. That means if there is no traffic for five minutes, the line goes down again. This feels practical. Long enough that browsing is not annoying. Short enough that the box is not just hanging online forever.&lt;/p&gt;
&lt;p&gt;The actual dial and hangup I bind to &lt;code&gt;isdnctrl&lt;/code&gt;:&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;/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;/usr/sbin/ipppd file /etc/ppp/options.ippp0   connect &lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/sbin/isdnctrl dial ippp0&amp;#39;&lt;/span&gt;   disconnect &lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/sbin/isdnctrl hangup ippp0&amp;#39;&lt;/span&gt;   ippp0&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;When it works the result is nice. First request is a bit slow. The line comes up. Then surfing feels normal enough for that time. Mail works. IRC works. FTP works if it behaves.&lt;/p&gt;
&lt;h2 id=&#34;the-first-click-effect&#34;&gt;The first-click effect&lt;/h2&gt;
&lt;p&gt;One thing is always there and I think everybody who does this knows it: the first click is special.&lt;/p&gt;
&lt;p&gt;If the line is down and a browser tries to fetch a page, sometimes the first request times out before the line is really ready. Then the user clicks reload and now it works because the link is already up. So I keep telling people in the flat: if the page does not come on first try, just click again, the router is maybe still dialing.&lt;/p&gt;
&lt;p&gt;This sounds stupid, but after a week everybody knows it and then it is just normal life.&lt;/p&gt;
&lt;h2 id=&#34;lan-sharing-with-ipfwadm&#34;&gt;LAN sharing with ipfwadm&lt;/h2&gt;
&lt;p&gt;Kernel 2.0 means &lt;code&gt;ipfwadm&lt;/code&gt;. I already heard about &lt;code&gt;ipchains&lt;/code&gt; and I would like to try it, but on this box I am still on SuSE 5.3 with the 2.0 kernel, so for now it is &lt;code&gt;ipfwadm&lt;/code&gt;. The syntax is not exactly poetry, but it works.&lt;/p&gt;
&lt;p&gt;I use masquerading so the local machines can share the one connection. Internal side is private addresses, router has the public side via ISDN, and packets get masked on the way out.&lt;/p&gt;
&lt;p&gt;Minimal direction looks 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;/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;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &amp;gt; /proc/sys/net/ipv4/ip_forward
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ipfwadm -F -p deny
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ipfwadm -F -a m -S 192.168.42.0/24 -D 0.0.0.0/0&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;That is not the full ruleset, only the basic idea. I keep the real script in &lt;code&gt;/etc/rc.d/&lt;/code&gt; and comment it because otherwise I forget the arguments in one week.&lt;/p&gt;
&lt;p&gt;I like that with Linux 2.0 one can still see the whole moving pieces without too much abstraction. On the other hand, things like FTP quickly show where the limits are.&lt;/p&gt;
&lt;h2 id=&#34;ftp-and-the-small-pain-of-old-protocols&#34;&gt;FTP and the small pain of old protocols&lt;/h2&gt;
&lt;p&gt;Passive FTP is mostly okay. Active FTP is not so nice. With &lt;code&gt;ipfwadm&lt;/code&gt; and this generation there is no good helper for it. So active FTP can fail in stupid ways and then you start thinking maybe you broke the router, but in fact the protocol is just doing protocol things.&lt;/p&gt;
&lt;p&gt;After some evenings I decide the simple rule is this: use passive FTP when possible and do not lose time with trying to make old protocol design look smart.&lt;/p&gt;
&lt;p&gt;That is maybe the first moment where running a router teaches me something bigger than command syntax. Many network problems are not Linux problems. They are protocol problems, software expectations problems, or user expectation problems.&lt;/p&gt;
&lt;h2 id=&#34;t-online-and-general-line-feeling&#34;&gt;T-Online and general line feeling&lt;/h2&gt;
&lt;p&gt;The provider side is okay most of the time. Sometimes the line drops for no reason I can see. Sometimes authentication fails once and works on the next try. I keep notes because otherwise every error starts to feel mystical.&lt;/p&gt;
&lt;p&gt;I think this is one important habit I get from this box: write down what happened. Time, symptom, what I changed, what worked. Without this, three evenings of problem solving become one big confused memory.&lt;/p&gt;
&lt;h2 id=&#34;the-machine-itself&#34;&gt;The machine itself&lt;/h2&gt;
&lt;p&gt;The Cyrix Cx133 is doing fine. I already moved it to 16 MB and this helps a lot. 8 MB was really not much. Right now the box is still in the lean stage. No big extra services. Just enough to route and share the line.&lt;/p&gt;
&lt;p&gt;The Teles card still needs respect. If something goes weird, I first check cable and card state before I start blaming PPP. This saves me time.&lt;/p&gt;
&lt;h2 id=&#34;what-already-feels-good&#34;&gt;What already feels good&lt;/h2&gt;
&lt;p&gt;Even now, before DSL is really there, the setup already feels worth it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;one box for the internet edge&lt;/li&gt;
&lt;li&gt;shared connection for local machines&lt;/li&gt;
&lt;li&gt;line comes up only when needed&lt;/li&gt;
&lt;li&gt;config files which I can read and change&lt;/li&gt;
&lt;li&gt;no dependency on one desktop machine being on&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is already much more &amp;ldquo;real systems&amp;rdquo; feeling than just installing Linux on a PC for trying around.&lt;/p&gt;
&lt;p&gt;I still want more from the box. I want DNS cache. I want maybe a proxy. I want some cleaner way to wake the line from outside. Right now if I am not at home and the line is down, then it is down. That is the next problem I want to solve.&lt;/p&gt;
&lt;p&gt;Also the DSL modem is still blinking. It is almost becoming decoration.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>My First Linux Router: SuSE 5.3, Teles ISDN and the Blinking DSL Modem</title>
      <link>https://turbovision.in6-addr.net/linux/home-router/first-linux-router-suse53-teles-and-the-blinking-dsl-modem/</link>
      <pubDate>Sat, 03 Oct 1998 00:00:00 +0000</pubDate>
      <lastBuildDate>Sat, 03 Oct 1998 00:00:00 +0000</lastBuildDate>
      <guid>https://turbovision.in6-addr.net/linux/home-router/first-linux-router-suse53-teles-and-the-blinking-dsl-modem/</guid>
      <description>&lt;p&gt;I wanted to start with Linux already earlier, but I did not. One reason was VFAT. I had too much DOS and Windows stuff on the disk and I did not want to make a big break just for trying Linux. Now SuSE 5.3 comes with kernel 2.0.35 and VFAT support is there in a way that feels usable for me, so now I finally do it.&lt;/p&gt;
&lt;p&gt;Also I have enough curiosity to break my evenings with this, and enough little money to make bad hardware decisions and then keep them running because there is no budget for the nice version.&lt;/p&gt;
&lt;p&gt;The machine for the router is a Cyrix Cx133. Not a fancy box. Right now it has 8 MB RAM and a 1.2 GB IDE disk. The case looks like every beige case looks. For a router it is enough. It boots. It stays on. It has one job. If I find cheap RAM later I will put it in, but first I want the basic thing working.&lt;/p&gt;
&lt;p&gt;For ISDN I do not buy AVM because I simply cannot. Everybody says AVM is the good stuff and the drivers are nice and all is more easy. Fine. I buy a cheap Teles 16.3 PnP card. It is not the card of dreams, but it is my card and I can pay it. So the project now is not &amp;ldquo;what is best&amp;rdquo;, it is &amp;ldquo;what can be made to work with Teles and a bit stubbornness&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;At the same time there is already the whole T-DSL story from Telekom. This is maybe the funny part: I already subscribe to the DSL package together with T-Online, but the line is not switched yet. They give us the hardware. The DSL modem is there. The splitter is there. Everything is there. I can look at the modem and I can connect it and the LED is blinking and blinking and blinking. But there is no real DSL sync yet. It is like the future is already on the desk, only the exchange in the street does not care.&lt;/p&gt;
&lt;p&gt;The good thing in this package is: I can already use ISDN with the same flatrate model through T-Online until DSL is finally active. That changes everything. If I had to pay every minute like in the older ISDN situation, I would maybe not do such experiments so relaxed. But with this package I can prepare the whole router now, use it now, put the DSL hardware already in place, and then just wait until someday the blinking LED becomes stable.&lt;/p&gt;
&lt;p&gt;This is maybe a bit absurd, but also very german somehow: contract ready, hardware ready, paperwork ready, technology almost ready, and then the actual line activation takes forever.&lt;/p&gt;
&lt;h2 id=&#34;why-i-want-a-real-router-box&#34;&gt;Why I want a real router box&lt;/h2&gt;
&lt;p&gt;I do not want one Windows machine doing the internet and all other machines depending on that. I also do not want manual dial each time. I want a separate machine which is just there and does the gateway work. If it works good, nobody sees it. If it breaks, everybody sees it. This is exactly the kind of thing I like.&lt;/p&gt;
&lt;p&gt;Also I want to learn Linux not only as desktop. Desktop is nice, but for me the interesting thing is always when one machine does a service for other machines. Then it gets serious. Then configuration is not decoration anymore.&lt;/p&gt;
&lt;p&gt;The first setup is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cyrix Cx133 as the router&lt;/li&gt;
&lt;li&gt;Teles 16.3 for ISDN&lt;/li&gt;
&lt;li&gt;one NE2000 compatible network card for local LAN&lt;/li&gt;
&lt;li&gt;SuSE 5.3&lt;/li&gt;
&lt;li&gt;T-Online account&lt;/li&gt;
&lt;li&gt;DSL hardware already connected, but DSL itself still sleeping somewhere in Telekom land&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The LAN side is &lt;code&gt;eth0&lt;/code&gt;. The ISDN side I will configure through the i4l tools once the login part is really clean.&lt;/p&gt;
&lt;h2 id=&#34;installing-suse-53&#34;&gt;Installing SuSE 5.3&lt;/h2&gt;
&lt;p&gt;SuSE installation feels big for a student machine because there are so many packages and YaST wants to help everywhere. But I must say, for this use case it is really practical. I do not want to compile every tiny thing right now. I want the machine up and then I want to start reading config files.&lt;/p&gt;
&lt;p&gt;The nice thing is that SuSE 5.3 already has what I need for this direction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;kernel 2.0.35&lt;/li&gt;
&lt;li&gt;VFAT support, finally good enough for me to jump in&lt;/li&gt;
&lt;li&gt;isdn4linux pieces&lt;/li&gt;
&lt;li&gt;YaST for basic setup&lt;/li&gt;
&lt;li&gt;normal network tools and PPP stuff&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first days are not so elegant. I reinstall once because I partition stupidly. Then I configure the network wrong and wonder why nothing routes. Then I realize that reading the docs before midnight is much more productive than changing random options after midnight.&lt;/p&gt;
&lt;p&gt;Still, the feeling is strong: this is possible. The machine is not powerful. The card is not luxury. But Linux is not laughing about the hardware. It takes the hardware seriously and tries to use it.&lt;/p&gt;
&lt;h2 id=&#34;the-teles-card-and-the-small-pain-around-it&#34;&gt;The Teles card and the small pain around it&lt;/h2&gt;
&lt;p&gt;The Teles 16.3 works, but not like a nice toy. It works like something you need to deserve first.&lt;/p&gt;
&lt;p&gt;PnP is not really my friend here. Auto-detection is sometimes correct and sometimes not. I get into the usual dance with IRQ and I/O settings, and because the NE2000 clone is also not exactly a model citizen, I must be careful there are no collisions. When it finally stabilizes, I write down the values because I know I will forget them if I do not.&lt;/p&gt;
&lt;p&gt;The card sits on S0 bus with a passive NT. That setup is physically very small. Short cable is important. At first I use a longer cable because it is just the cable I have on the desk. Then I get strange effects. D-channel sync comes, then some weird instability. I shorten the cable and suddenly the whole thing becomes much less dramatic. From this I learn again the old rule: with communication stuff, physical layer problems are always more stupid than the software problems.&lt;/p&gt;
&lt;p&gt;When the ISDN side starts to work the feeling is really good. No modem noise. No analog nonsense. Digital and clean. I know 64 kbit/s is not much in the abstract, but compared to normal modem life it feels fast enough that one can do real things.&lt;/p&gt;
&lt;h2 id=&#34;the-strange-situation-with-the-dsl-modem&#34;&gt;The strange situation with the DSL modem&lt;/h2&gt;
&lt;p&gt;The modem is already on the desk and it is maybe the best symbol for this whole phase. I already have the new thing. I can touch it. I can cable it. I can power it. But it is not mine yet in the practical sense, because the line in the exchange is not enabled.&lt;/p&gt;
&lt;p&gt;So what happens is: I install the splitter, I connect the modem, I look at the LED, and it blinks. Every day it blinks. It is almost funny. It is like the house has a small promise lamp.&lt;/p&gt;
&lt;p&gt;Because we already have the package, I can connect with ISDN under the same general tariff model and prepare everything. This is really useful. It means the whole router is not a waiting project. It is a live project from day one. The DSL modem is there as a future device, but the machine is already useful now through ISDN.&lt;/p&gt;
&lt;p&gt;This also changes my mood when building it. I am not making a theoretical future router. I am making a real working box. If Telekom ever finishes the outside part, then maybe the uplink can change without rebuilding the whole idea from zero.&lt;/p&gt;
&lt;h2 id=&#34;what-i-have-running-now&#34;&gt;What I have running now&lt;/h2&gt;
&lt;p&gt;At this moment I keep it simple. I am still mostly happy that Linux is on the box and the basic line can come up. The stack is not fancy yet. It is more like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SuSE 5.3&lt;/li&gt;
&lt;li&gt;isdn4linux&lt;/li&gt;
&lt;li&gt;T-Online login&lt;/li&gt;
&lt;li&gt;local Ethernet&lt;/li&gt;
&lt;li&gt;a lot of notes on paper&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I already know I want these things later:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dial on demand&lt;/li&gt;
&lt;li&gt;IP masquerading for the LAN&lt;/li&gt;
&lt;li&gt;maybe DNS cache&lt;/li&gt;
&lt;li&gt;maybe Squid if memory allows it&lt;/li&gt;
&lt;li&gt;and if DSL finally comes, then PPPoE and the same box continues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do not know yet which part will be the most annoying. Right now I guess the Teles card. Maybe later I will say PPP is worse. Maybe both.&lt;/p&gt;
&lt;p&gt;For now I am just happy that Linux finally starts for me with a version where VFAT is not a blocker anymore, the cheap ISDN hardware is usable, and the blinking DSL modem already stands on the desk like a small challenge.&lt;/p&gt;
&lt;p&gt;Maybe next I write more when the dial-on-demand part is not so ugly anymore.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
