Page 2 of 6

Re: Slave DNS verwalten

Posted: Fri 4. Feb 2022, 17:33
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());
	}
	
}

Re: Slave DNS verwalten

Posted: Sun 6. Feb 2022, 18:52
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.

Re: Slave DNS verwalten

Posted: Tue 8. Feb 2022, 19:43
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.

Re: Slave DNS verwalten

Posted: Sat 12. Feb 2022, 21:12
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.

Re: Slave DNS verwalten

Posted: Thu 17. Feb 2022, 21:51
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

Re: Slave DNS verwalten

Posted: Sat 19. Feb 2022, 18:31
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.

Re: Slave DNS verwalten

Posted: Sat 19. Feb 2022, 18:38
by Jolinar
24unix wrote: Sat 19. Feb 2022, 18:31 Beim ersten ist es aber weiß.
Kann ich bestätigen.

Re: Slave DNS verwalten

Posted: Sat 19. Feb 2022, 20:46
by MLan
Stylesheet https://ns1.24unix.net/openapi/index.html wurde nicht geladen, weil sein MIME-Typ, "text/html", nicht "text/css" ist.

Re: Slave DNS verwalten

Posted: Sat 19. Feb 2022, 23:45
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.

Re: Slave DNS verwalten

Posted: Sun 20. Feb 2022, 20:20
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

Re: Slave DNS verwalten

Posted: Tue 22. Feb 2022, 11:24
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.

Re: Slave DNS verwalten

Posted: Tue 22. Feb 2022, 19:40
by 24unix

Re: Slave DNS verwalten

Posted: Sun 27. Feb 2022, 00:38
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.

Re: Slave DNS verwalten

Posted: Mon 28. Feb 2022, 15:16
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.

Re: Slave DNS verwalten

Posted: Thu 10. Mar 2022, 20:20
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.