OPNsense-API - Gateway erstellen/löschen

blurrrr

Well-known member
Mahlzeit!

Irgendwie kann man ja alles mögliche über die OPNsense-API machen, nur irgendwie keine Gateways erstellen/bearbeiten/löschen, lediglich die Stati kann man "einsehen". Weiss da zufällig wer, "warum" das so ist? Ich mein, Firewall-Regeln, Interfaces, sonstwas, geht alles, nur die Gateway-Dinge kann man irgendwie völlig knicken... Muss ja irgendwo eine "Design"-Entscheidung gewesen sein ("vergessen" hat man das sicherlich nicht 😄), vielleicht weiss hier ja jemand mehr? 🙃
 
Ich melde hier auch mal Interesse an!

Das Thema hat mich vor Jahren auch mal beschäftigt, als ich IaC Code zur automatisierten erstellen von komplexen Testumgebungen mit jeweils eigenen Subnetzen basteln musste. Das war so gegen Ende 2020. Es muss wohl einen Grund geben, warum es bis heute nicht implementiert wurde... aber welchen?!
 
Also auf die Schnelle sind keine ADR's für OPNsense zu finden. Auch in den Issues des Github-Projekts findet sich nichts zu dem Thema. Nur das Issue mit dem Feature-Request für die Erweiterung der API um den Status der Gateways abzufragen: https://github.com/opnsense/core/issues/4261.

Vermutlich bekommt man hier am schnellsten Klarheit, wenn man einfach ein Issue im Github-Projekt anlegt und es dort als Fehler bezeichnet, dass die API keine CRUD-Funktionalität für Gateways anbietet.
 
Ja, ich hatte da auch schon alles mögliche durchwühlt, aber speziell zu diesem Thema auch nix gefunden (abgesehen von den Stati der Gateways). Schon mal besten Dank vorab @tiermutter :)
 
Hier die Antwort:

Hi xxx,

Einzelne Gateways geht jetzt ab 24.1. Gateway Gruppen kommt dann "bald" nach. Ob das 24.7 oder 25.1 ist kann ich aber noch nicht sagen.

Prinzipiell ist es aber so dass nur noch 30% PHP Restposten ohne API im Core sind. Sind auch die grössten Brocken, aber in 2 Jahren sollte wir (fast) durch sein. Die Hoffnung stirbt zuletzt. :D


Grüsse
Franco


Fraglich also, warum das bei dem letzten Versuch immer noch nicht ging...
Weitere Fragen? ;)
 
In der Doku stand jedenfalls nix und im Repo hab ich derlei auch nicht gefunden :unsure:

EDIT: Wann wird denn die API-Doku entsprechend aktualisiert? 😅
 
Zuletzt bearbeitet:
Das hier muss dann wohl das Model dazu sein: https://github.com/opnsense/core/bl.../mvc/app/models/OPNsense/Routing/Gateways.xml

Aber wie man das ganze jetzt in einen API-Aufruf überführt?

Code:
  curl --silent -k -u "${REST_API_USERNAME}":"${REST_API_PASSWORD}" \
      -H "Content-Type: application/json" \
      -d @payload_gateway.json \
      -X POST \
      "${REST_API_URI}/api/routing/settings/addGateway" | jq

Keine Ahnung wie die payload_gateway.json Datei aussehen muss, aber da kann man sich ja rantasten unter Einsicht des Gateways Models :)
 
Zuletzt bearbeitet:
Naja, also ich bin definitiv kein Programmierer und das was ich mir so zusammengereimt habe... wäre:

Das was Du da rausgesucht hast, das liegt in einem Ordner "MVC"....
-> https://docs.opnsense.org/development/components.html
-> https://en.wikipedia.org/wiki/Model–view–controller

Im Webinterface HAT sich auch diesbezüglich was verändert, deswegen bin ich erstmal davon ausgegangen, dass sich diese MVC-Geschichten strikt auf das Webinterface beziehen. In den Release-Notes stand halt was von MVC/API, als dann nix in der Doku zu finden war, bin ich da halt auch erstmal davon ausgegangen, dass es da vllt noch irgendwas "rein internes" gibt, oder so, daher ja auch die initiale Frage, da ich da insgesamt doch etwas verwundert bin.... Auf der anderen Seite habe ich aber auch überhaupt keine Ahnung, also von daher... 😅😄
 
Wenn ich franco das vorschlage, dann fragt er wieder ob ich das übernehmen möchte... Kann ich aber nicht weil keine Ahnung :D
Einer von euch vielleicht? ;)
 
Erfahrungsgemäß ergibt es am meisten Sinn, dass derjenige es dokumentiert, der es implementiert hat :) Die Commits sind vom Github-User swhite2.
Es ergibt weniger Sinn das andere mit der API herumspielen und alles selbst herausfinden müssen (was im Zweifel immer noch lückenhaft sein kann) und das dann niederschreiben...
 
Ich bin erstmal generell froh, dass sich da jetzt was getan hat, ein paar Tage auf die Doku warten ist zwar lästig (und selber fummeln auch, dafür braucht man wieder Zeit), aber ich sag mal so: "Drin ist drin!". Damit kann ich erstmal leben und muss nicht auf Konkurrenz-Produkte umschwenken 🫣🤭
 
So, grade nochmal das Upgrade gemacht...

1707145584603.png

... dann warten wir mal ab, bis die API-Doku aktualisiert wird 😅
 
Wäre dann wohl richtig, Gateway aber zu Testzwecken deaktiviert (disabled: 1) und hier auch nur für IPv6:

Bash:
curl -XPOST -k -u "xxxxxxxxx":"xxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"gateway_item":{"disabled":"1","name":"xxxxxxxxx","interface":"xxxx","ipprotocol":"inet6","gateway":"x:x:x:x:x:x:x:x","defaultgw":"0","fargw":"0","monitor_disable":"1"}}' \
https://X.X.X.X/api/routing/settings/addGateway

Unter Windows funktioniert das so übrigens nicht (api exception), unter Linux läuft das so einwandfrei.

Als nächstes steht dann Gateway löschen an und dann nochmal die vollständige Kombi in Form von Gateway anlegen und danach die Route 😅
 
Gateway löschen dann wie folgt...

Gateway-UUID besorgen:
Bash:
curl --silent -k -u "xxxxxxxxx":"xxxxxxxxx" \
https://X.X.X.X/api/routing/settings/searchGateway \
| jq -r '.rows[] | select(.gateway=="x:x:x:x:x:x:x:x") | .uuid'
(unter Angabe der Gateway-IP)

Gateway löschen:
Bash:
curl -XPOST -k -u "xxxxxxxxx":"xxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"uuid":"xxxxxxxxxxxxxxxxxxxxxx"}' \
https://X.X.X.X/api/routing/settings/delGateway/xxxxxxxxxxxxxxxxxxxxxx
(UUID muss nochmal hinten an die URL)

Ich glaub, ich reich das nochmal als Anleitung für die Hauptseite ein... 😅 Dann direkt noch das Thema mit den Routen dazu (ggf. als extra Anleitung), dann ist das "hier" wenigstens vernünftig dokumentiert :devilish:😇😄
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.574
Beiträge
46.829
Mitglieder
4.208
Neuestes Mitglied
ramfresser
Zurück
Oben