Der Nameserver als Interfaceadresse

ifconfig ist bei FreeBSD das zentrale Werkzeug zur Interfacekonfiguration. Man kann sich damit aber mächtig in den Fuß schießen.

Mal eben schnell

Jede Änderung an der Netzkonfiguration gemäß Handbuch durch Eintragen in /etc/rc.conf und anschließendem Reboot umzusetzen, ist nett gemeint aber praxisfern. Selbstverständlich muß der Reboot den Abschluß der Arbeiten bilden. Aber herauszubekommen, ob eine bestimmte Konstellation funktioniert, geht manuell halt schneller.

In dem heutigen Fall sollte ein neues VLAN einem Server zugeführt und verbunden werden. Soweit so einfach:

# ifconfig vlan10 clone
# ifconfig vlan10 up vlan 10 vlandev lagg1
# ifconfig vlan10 198.51.100.3/28

Nein! Stop! Das ist die falsche Netzmaske. Also Adresse wieder wegnehmen.

# ifconfig vlan10 del 198.51.100.3/28
Can't parse "/28"
# ifconfig vlan10 del 198.51.100.3
# ifconfig vlan10 add 198.51.100.3/27

Stimmt's?

# ifconfig vlan10
...
        inet 203.0.113.53 netmask 0xfffffff0 broadcast 198.51.100.15
...

Wie bitte? Die Netzmaske ist immer noch falsch, die Broadcastadresse ebenfalls und was ist das für eine IP? Das ist doch die IP von meinem rekursiven Nameserver hier!

Ursachenforschung

In der Manpage steht der seltsame Satz für "-alias" oder "del":

Remove the network address specified.  This would be used if you
incorrectly specified an alias, or it was no longer needed.  If
you have incorrectly set an NS address having the side effect of
specifying the host portion, removing all NS addresses will allow
you to respecify the host portion.

Was hat der Nameserver mit der IP-Adresse zu tun? Warum sollte der Nameserver falsch eingetragen sein? Warum ist es tatsächlich die IP Adresse des aktiven Nameservers, die hier eingetragen wird?

Die Beschreibung in der Manpage legt nahe, daß die IP Adresse eines Nameserver fälschlich die Hostanteile von Interface-IPs überschreiben kann. So sieht es auch aus.

Aber was hat die Interfacekondiguration mit der Nameservereinstellung zu tun? Das ist doch hier kein Windows!

Die Erklärung ist so einfach wie erschreckend:

  • Die Argumentreihenfolge von ifconfig hängt vom Kommando ab: Mal kommt erst das Kommando, dann der Wert (description). Mal kommt erst der Wert und dann das Kommando (alias).
  • ifconfig schlägt unparsbare Parameter still und heimlich im DNS nach: Und tatsächlich, ich habe einen Wildcard in der Zone, der auf den zentralen Server hier zeigt (den der DNS macht).
  • Werden widersprüchliche Angaben gemacht, so überschreibt der eine Wert den anderen ohne Fehlermeldung.

Im Ergebnis hat ifconfig einfach folgendes verstanden:

# ifconfig vlan140 add 198.51.100.3/27
# ifconfig vlan140 $(dig +short A add) 198.51.100.3/27
# ifconfig vlan140 203.0.113.53 198.51.100.3/27
# ifconfig vlan140 203.0.113.53

Also: Ändere den Hostanteil der aktuellen Interface-IP auf 203.0.113.53.

Ohne den Wildcard wäre es wohl nicht passiert.

Post a comment

Related content