Slave DNS verwalten

Für Modifikationen in und um KeyHelp.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

Heute mal eine Fehlermeldung :-)

Code: Select all

[2] % ./vendor/bin/phpunit tests/App/Repository/DomainRepositoryTest.php
PHPUnit 9.5.13 by Sebastian Bergmann and contributors.

F                                                                   1 / 1 (100%)

Time: 00:00.051, Memory: 6.00 MB

There was 1 failure:

1) App\Repository\DomainRepositoryTest::testInsert
Failed asserting that 'include "/etc/bind/zones/aussempott.de";\n
include "/etc/bind/zones/xxxxxxoni.de";\n
include "/etc/bind/zones/cdw.one";\n
include "/etc/bind/zones/crowddataworker.de";\n
include "/etc/bind/zones/fairdns.de";\n
include "/etc/bind/zones/test.de";\n
include "/etc/bind/zones/tzazicke.de";\n
' contains "inserttest.org".

/home/users/tfunix/www/tests/App/Repository/DomainRepositoryTest.php:93

FAILURES!
Tests: 1, Assertions: 5, Failures: 1.
Die wichtigste Unit ist zu 50% fertig.

Ich habe den Code noch nicht commited, muss erst den Fehler finden und den test für delete() machen.

Aber dann bin ich so langsam fertig, fehlt nur noch ne Dokumentation …

Code: Select all

<?php

namespace App\Repository;

use App\Controller\DatabaseConnection;
use App\Entity\Domain;
use DI\Container;
use DI\ContainerBuilder;
use PHPUnit\Framework\TestCase;
use function DI\autowire;

/**
 *
 */
class DomainRepositoryTest extends TestCase
{
	private Container $container;
	private DomainRepository $domainRepository;
	private string $localZoneFile;
	private string $localZonesDir;
	private string $namedConfLocalFile;
	
	/**
	 * @param int|string $dataName
	 *
	 * @throws \Exception
	 * @internal This method is not covered by the backward compatibility promise for PHPUnit
	 */
	public function __construct(?string $name = null, array $data = [], $dataName = '')
	{
		parent::__construct(name: $name, data: $data, dataName: $dataName);
		
		$this->localZoneFile = '/etc/bind/local.zones';
		$this->localZonesDir = '/etc/bind/zones/';
		$this->namedConfLocalFile = '/etc/bind/named.conf.local';
		//$this->zoneCachePath = '/var/cache/bind/';
		
		// read config TODO use .env file instead?
		$configFile = dirname(path: __DIR__, levels: 3) . "/config.json";
		$configJSON = file_get_contents(filename: $configFile);
		$config = json_decode(json: $configJSON, associative: true);
		
		$containerBuilder = new ContainerBuilder();
		$containerBuilder->addDefinitions([
			DatabaseConnection::class => autowire()->constructorParameter(parameter: 'config', value: $config),
		]);
		$this->container = $containerBuilder->build();
		
		$this->domainRepository = $this->container->get(name: DomainRepository::class);
		
	}
	
	
	/**
	 * @throws \DI\NotFoundException
	 * @throws \DI\DependencyException
	 */
	public function testInsert()
	{
		$domain = new Domain(name: 'inserttest.org', a: '1.2.3.4', aaaa: '1bad::babe');
		$this->domainRepository->insert(domain: $domain);
		
		$domainTest = $this->domainRepository->findByName(name: 'inserttest.org');
		$this->assertIsNotBool(actual: $domainTest);
		$this->assertEquals(expected: 'inserttest.org', actual: $domainTest->getName());
		
		
		if ($namedConfLocal = file_get_contents(filename: $this->namedConfLocalFile)) {
			$this->assertStringContainsString(needle: $this->localZoneFile, haystack: $namedConfLocal);
		} else {
			$this->fail(message: 'No permissions: ' . $this->namedConfLocalFile);
		}
		
		$this->assertNotFalse(condition: fileperms(filename: $this->localZoneFile));
		
		$localZones = file_get_contents(filename: $this->localZoneFile);
		$this->assertStringContainsString(needle: $domainTest->getName(), haystack: $localZones);

		$zoneFile = $this->localZonesDir . $domain['name'];
		
		$this->assertFileExists(filename: $zoneFile);
		
		
		// clean up
		$this->domainRepository->delete(id: $domainTest->getId());
	}
	
}
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

So mal das Update zum WE.

Viel neues zu sehen gibt es nicht, etwas mehr unter der Haube, wer neugierig ist, ich checke alle 1-2 Abende mal aus:

https://git.24unix.net/tracer/bindAPI

Ich habe die Struktur der Api an die von KeyHelp angepasst, über die ID zu gehen ist doch praktischer, einzig eine Domain auslesen geht via {name}
newapi.png
Wäre es wünschenswert, unter Server noch einen Punkt /Server zu haben, der ein paar aktuelle Eckdaten ausgibt?

Edit: So, grande malheur.

Rolle gerade die aktuelle Version auf alle Nameserver aus. Da knallt es, weil die autoinkrement ID nicht synchron sind.

Ich werde das Verfahren ändern, es wird einen Bind-Master geben, nur da können Änderungen an der DB gemacht werden.

Die Slaves holen sich die Config via API, dann brauche ich die DB nicht öffnen.

Muss dann nur überlegen, soll der Master die Slaves per Push über Änderungen benachrichtigen, oder sollen die einfach minütlich eine serial pollen?

Ich lasse mir das heute Abend mal bei 2-3 Bier durch den Kopf gehen.

So, habe eine ganz andere Lösung gefunden.

Ich ignoriere die IDs und mache did Zuordnung über die Namen der NS und Panels, die sind ja eindeutig.
(ALTER TABLE `domains` CHANGE `panel_id` `panel` VARCHAR(255) NULL DEFAULT '0';)

Und die Domains mache ich auch anders, sie haben entweder einen Verweis auf ein Panel, oder sind „custom“, dann haben sie A/AAAA-Einträge und es wird eine lokale Master-zone erstellt.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

Nur mal nen kurzes Update, hier bei mir ist 2-3 Tage Pause.

Mir ging es tierisch auf die Nerven, immer in Browser dict.cc zu öffenen wenn ich ein Wort nachschlagen wollte.

Habe mir Abhilfe geschafft:
TellMe.png
Das ganze wird morgen noch etwas gehübscht, und wandert in die Menüleiste.

Dann geht es hier weiter.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

So, Spielerei nebenbei abgefrühstückt:
imenudict.png
Gestern mal wieder anderweitig Geld verdient, einen Linux-Artikel für ne US-Firma geschrieben.

Heute endlich wieder an der API weitergemacht.

Habe das Setup jetzt live, auf 2 NS, reicht mir für den Moment. Ein paar TODO sind noch im Code, und die Verwaltung von Master-Zones muss ich noch machen (Domains, die nicht auf KeyHelp-Servern liegen). Und Doku.

PS: Bevor jemand fragt: Das hinter den € in der Menüleiste ist der aktuelle BTC-Kurs :)


Edi: Ich überlege, die Unterstützung für Standalone-Nameserver zu kippen.

Der Aufwand ist hoch, und ich habe nur eine Domain, die nicht auf einem Panel läuft.

Edit2: Ich schmeisse die standalone Zonen raus.
Es werden nur domains unterstützt, die auf einem KeyHelp-Panel liegen.

Meinen NS@Home nehme ich auch raus, will die Firewall nicht für die API öffnen, kaufe noch nen vServer bei ionos.

Dann habe ich einen bei Hetzner, einen bei NetCup und einen bei 1&1, das sollte reichen.
Natürlich bleiben die einzelnen WebServer Single-Point of Failure, da mache ich mir noch Gedanken drum …

Installier nachträglich KeyHelp auf der Kiste, die die standalone Domain hatte.
Ist natürlich nicht ganz easy, aber bekomme ich schon hin.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

So mal wieder ein Update, ich fange mit der Dokumentation an.

https://git.24unix.net/tracer/bindAPI

Da ich die Bilder nicht im Repository ablegen wollte, habe ich flugs eine subdomain dafür erstellt:

https://bindapi.24unix.net/#installation

Content ist der gleiche, es wird die README.md von Git ausgegeben.


Ich habe jetzt den dritten Nameserver in der Mache, ein günstiger vServer bei Ionos, und weil ich die Firma so mag hat er den sympathischen Namen JarJar bekommen :)

Anhand des Servers werde ich in den nächsten Tage die Anleitung bauen.


edit: Lese gerade noch mal den thread von vorne, könnte mich nun ziemlich schämen.
24unix wrote: Sat 22. Jan 2022, 16:45

Code: Select all

╰─➤  cat bin/console|head -n 1                                                                                             127 ↵
Der AbuseOfCat geht dieses Jahr wohl an mich …

Also, richtig ist es natürlich:

Code: Select all

head -n1 bin/console
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

Jetzt könnte ich gerade mal Hilfe gebrauchen.

https://ns1.24unix.net/openapi/index.html#/

https://ns2.24unix.net/openapi/index.html#/

So sollte es aussehen:
bindAPI_api1.png

Beim ersten ist es aber weiß.

Cache Problem hier, oder reproduzierbar?

Ich frag einfach mal dumm nach, sitze schon wieder zu lange vor der Kiste, übersehe wahrscheinlich ne Kleinigkeit.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
Jolinar
Community Moderator
Posts: 3559
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Slave DNS verwalten

Post by Jolinar »

24unix wrote: Sat 19. Feb 2022, 18:31 Beim ersten ist es aber weiß.
Kann ich bestätigen.
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
MLan
Posts: 466
Joined: Wed 20. Sep 2017, 23:05
Location: @home

Re: Slave DNS verwalten

Post by MLan »

Stylesheet https://ns1.24unix.net/openapi/index.html wurde nicht geladen, weil sein MIME-Typ, "text/html", nicht "text/css" ist.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

MLan wrote: Sat 19. Feb 2022, 20:46 Stylesheet https://ns1.24unix.net/openapi/index.html wurde nicht geladen, weil sein MIME-Typ, "text/html", nicht "text/css" ist.
Vielen Dank, prüfe ich morgen.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

So, die CSS werden jetzt überall geladen.

Doku ist zu 80% fertig, ich denke, im Laufe der Woche kann ich es als 1.0 taggen/releasen.

Wurde doch etwas mehr als ich dachte :-)
git.png
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

So, noch ein kleines Update.

Das CLI hat temporär eine neue Option bekommen:

Code: Select all

% ./bin/console check:showincludes
You need to add these lines to /etc/bind/local.bindapi.options and make sure
that include "/etc/bind/local.bindapi.options"; exists in /etc/bind/named.conf.options.

allow-transfer {
	176.9.165.128;
	2a01:4f8:161:12cd::128;
	37.120.185.117;
	2a03:4000:f:5e2:a80c:2dff:fed1:e109;
	212.227.160.159;
	2001:8d8:1801:701::1;
};
also-notify {
	176.9.165.128;
	2a01:4f8:161:12cd::128;
	37.120.185.117;
	2a03:4000:f:5e2:a80c:2dff:fed1:e109;
	212.227.160.159;
	2001:8d8:1801:701::1;
};
Momentan muss man an jedem Panel Hand anlegen, und diese Schritte manuell ausführen, jedesmal wenn man einen DNS Server hinzufügt oder entfernt.

Mit einem der kommenden Updates wird Keyhelp einen entsprechenden Endpoint in der API haben, so dass der Schritt auch automatisiert werden kann.

Wenn die DB der API also einmal befüllt ist, reicht im Normalbetrieb ein Cron-Eintrag.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

24unix wrote: Tue 22. Feb 2022, 11:24 Mit einem der kommenden Updates wird Keyhelp einen entsprechenden Endpoint in der API haben, so dass der Schritt auch automatisiert werden kann.
Ich denke, ich werde den Wunsch zurückziehen.

Wenn außer mir eh keiner den Kram nutzt ist das verschwendete Zeit.


Ich bin für meinen persönlichen Bedarf mit dem Tool durch. Es läuft.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

Motiviert durch den thread: viewtopic.php?t=215

gibt es einen neuen Endpoint:
dyndns.png
Die API kann einen Host auf dem zuständigem Panel aktualisieren.

Das ganz wird dann entweder per CLI getriggert oder von einem kleinen Script auf der eigenen Domain.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Slave DNS verwalten

Post by 24unix »

Hier mal wieder ein Update:

Das CLI kann nun auch den DynDNS host udaten.

Morgen kommt dann noch eine Tabelle in der die API plotted, welche IP aktuell ist und nur aktualisiert, wenn sich was verändert hat.

Und wenn nicht mal wieder ein Auftrag dazwischen kommt (was auch nicht schlecht wäre :-)) werde ich wohl eine kleine Referenzimplementation für einen eigenen DynDNS-Dienst bauen.

Aber: Man kann jetzt schon vollumfänglich DynDNS nutzen, wenn man KeyHelp als DNS für eine eigene Domain verwendet.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
Post Reply