NAT'ing on the firewall versus host routes for public IPs

In a comment on my entry on solving the hairpin NAT problem withpolicy based routing ,Arnaud Gomes suggested an alternative approach:

Since you are adding an IP address to the server anyway, why notsimply add the public address to a loopback interface, add a route onthe firewall and forgo the DNAT completely? In most situations thisleads to a much simpler configuration.

This got me to thinking about using this approach as a general wayto expose internal servers on internal networks ,as an alternative to NAT'ing them


GNU Autoconf is not replaceable in any practical sense

In the wake of the XZ Utils backdoor , which involved GNU Autoconf ,it's been somewhat popular to call for Autoconf to go away. Overon the Fediverse I said something about that :

Hot take: autoconf going away would be a significant net loss to OSS,perhaps as bad as the net loss of the Python 2 to Python 3 transition,and for much the same reason. There are a lot of projects out therethat use autoconf/configure today and it works, and they would allhave to


Solving the hairpin NAT problem with policy based routing and plain NAT

One use of Network Address Translation (NAT) is tolet servers on your internal networks be reached by clients on thepublic internet. You publish public IP addresses for your serversin DNS, and then have your firewall translate those public IPs totheir internal IPs as the traffic passes through. If you do thiswith straightforward NAT rules, someone on the same internal networkas those servers may show up with a report that they can't talk tothose public servers. This is because you've run into what


Why I think you shouldn't digitally sign things casually

Over on the Fediverse, I said :

My standard attitude on digital signatures for anything, Git commitsincluded, is that you should not sign anything unless you understandwhat you're committing to when you do so. This usually includes "whatpeople expect from you when you sign things". Signing things createssocial and/or legal liability. Do not blindly assume that liabilitywithout thought, especially if people want you to.

In re: (a Fediverse post encouraging signing Git commits)

If people are asking you


GNU Emacs and the case of special space characters

One of the things I've had to wrestle with due to my move toreading my email with MH-E in GNU Emacs is that any number of Emacsmodes involved in this like to be helpful by reformatting andannotating your email messages in various ways. Often it's notobvious to an outsider what mode (or code) is involved. For what Ibelieve are historical reasons, a lot of MIME handling code haswound up in GNUS ( also ),which was originally a news reader; some


What Prometheus Alertmanager's group_interval setting means

One of the configuration settings in Prometheus Alertmanager for'routes' is the alert group interval, the ' group_interval 'setting. The Alertmanager configuration describesthe setting this way:

How long to wait before sending a notification about new alerts thatare added to a group of alerts for which an initial notification hasalready been sent.

As has come up before more thanonce, this is not actually accurate. The group interval is not a(minimum) delay; it is instead a timer that ticks every so often


An issue with Alertmanager inhibitions and resolved alerts

Prometheus Alertmanager has afeature called inhibitions ,where one alert can inhibit other alerts. We use this in a numberof situations, such as our special 'there is a large scale problem'alert inhibiting other alerts and some others . Recently I realizedthat there is a complication in how inhibitions interact with beingnotified about resolved alerts (due to this mailing list thread ).

Suppose that you have an inhibition rule to the effect that alertA ('this host is down') inhibits alert B ('this special


The power of being able to query your servers for unpredictable things

Today, for reasons beyond the scope of this entry, we wanted tofind out how much disk space /var/log/amanda was using on all of our servers. We have a quitecapable metrics system that captures the amount of space filesystemsare using (among many other things), but /var/log/amanda wasn'tcovered by this because it wasn't a separate filesystem; insteadit was just one directory tree in either the root filesystem (onmost servers) or the /var


Some thoughts on switching daemons to be socket activated via systemd

Socket activation is a systemd featurefor network daemons where systemd is responsible for opening andmonitoring the Internet or local socket for a daemon, and it onlystarts the actual daemon when a client connects. This behaviormimics the venerable inetd but with rather more sophistication and features. A number of Linuxdistributions are a little bit in love with switching various daemonsover to being socket activated this way, from the traditionalapproach where the daemon handles listening for connections itself(along with the sockets involved). Sometimes this goes well,


The Prometheus scrape interval mistake people keep making

Prometheus gathers metrics by scraping metrics exporters every so often, which means that it has a conceptof the scrape interval , how frequently it should scrape a metricssource (a target ). Prometheus also has recording rules and alerting rules ,both of which have to be evaluated every so often; these also havean evaluation interval . Every so often, someone shows up on thePrometheus mailing list to say, more or less, 'I have a source ofmetrics that only updates every half hour, so I set my