[v2] Add package fff-layer3-ipv4snat #79

Closed
ChristianD wants to merge 2 commits from ChristianD/firmware:ipv4snatV2 into master
Member

With this package it is possible to make SNAT with IPv4 on the router

The user must set a peer_ip setting in gateway.meta.peer_ip to get a single ip for peering interfaces.
At ipaddr the user must set a ip that not use in babel (e.g. 192.168.0.1/16) for the clients

With this package the ipaddr address is SNAT to the peer_ip and every router need only one
freifunk ip and can use the same ipaddr on every router.

It is a system like cgnat from big provider

Signed-off-by: Christian Dresel freifunk@dresel.systems

With this package it is possible to make SNAT with IPv4 on the router The user must set a peer_ip setting in gateway.meta.peer_ip to get a single ip for peering interfaces. At ipaddr the user must set a ip that not use in babel (e.g. 192.168.0.1/16) for the clients With this package the ipaddr address is SNAT to the peer_ip and every router need only one freifunk ip and can use the same ipaddr on every router. It is a system like cgnat from big provider Signed-off-by: Christian Dresel <freifunk@dresel.systems>
rohammer requested changes 2021-01-16 13:00:19 +01:00
@ -0,0 +17,4 @@
# We set the snat rule
uci set snat.@client[0].ipaddr=$ipaddr
uci set snat.@client[0].nat=$peer_ip
Member

Hi, das ist ja richtig uebersichtlich geworden.
Ich hatte da auch einen kleinen Denkfehler drin. Alles in uci gateway ist ja fest.
Eigentlich geht es doch nur um den Schalter snat.@client[0].nat . Also ob bei dem client-netz nat gemacht werden soll oder nicht. Die $ipaddr und $peer_ip stehen ja irgendwo. Da koennte man doch einfach in network.@client[0].nat=1 machen. Unbkannte Optionen werden vom netifd ignoriert und nat gibt es noch nicht. Man koennte die Option z.B auch fffnat nennen. Die Option wird es "offiziell" nie geben. Das spart die neue config snat. Und man kann das dann auch sehr einfach ohne configuregateway einschalten.

Hi, das ist ja richtig uebersichtlich geworden. Ich hatte da auch einen kleinen Denkfehler drin. Alles in uci gateway ist ja fest. Eigentlich geht es doch nur um den Schalter snat.@client[0].nat . Also ob bei dem client-netz nat gemacht werden soll oder nicht. Die $ipaddr und $peer_ip stehen ja irgendwo. Da koennte man doch einfach in network.@client[0].nat=1 machen. Unbkannte Optionen werden vom netifd ignoriert und nat gibt es noch nicht. Man koennte die Option z.B auch fffnat nennen. Die Option wird es "offiziell" nie geben. Das spart die neue config snat. Und man kann das dann auch sehr einfach ohne configuregateway einschalten.
Author
Member

Keine schlechte Idee, ich habs mal eben dahingehend überarbeitet.

Keine schlechte Idee, ich habs mal eben dahingehend überarbeitet.
ChristianD marked this conversation as resolved
ChristianD force-pushed ipv4snatV2 from 0e9a94401a to 4b5d2f2b82 2021-01-16 13:11:23 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from 4b5d2f2b82 to bbe7510d0e 2021-01-16 13:12:23 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from bbe7510d0e to 89ad973122 2021-01-16 13:15:05 +01:00 Compare
rohammer reviewed 2021-01-16 20:36:03 +01:00
@ -0,0 +1,7 @@
if uci -q get network.client.nat; then
Member

Hier muss man auf network.client.nat=1 pruefen. Ein network.client.nat=0 ist hier auch true.

Hier muss man auf network.client.nat=1 pruefen. Ein network.client.nat=0 ist hier auch true.
ChristianD marked this conversation as resolved
rohammer reviewed 2021-01-16 20:39:34 +01:00
@ -0,0 +1,29 @@
configure() {
uci del network.client.nat
if uci -q get gateway.@client[0].nat; then
Member

Hier auch gateway.@client[0].nat=1. Ein =0 sollte ausschalten.

Hier auch gateway.@client[0].nat=1. Ein =0 sollte ausschalten.
ChristianD marked this conversation as resolved
ChristianD force-pushed ipv4snatV2 from 89ad973122 to ad5cd5eea7 2021-01-16 22:23:06 +01:00 Compare
rohammer reviewed 2021-01-16 22:48:52 +01:00
@ -0,0 +1,29 @@
configure() {
uci del network.client.nat
if [ "$(uci -q get gateway.@client[0].nat 2> /dev/null)" = '1' ]; then
Member

uci -q unterdrueckt die Ausgabe auf stderr. Das 2> /dev/null braucht man dann nicht mehr.

uci -q unterdrueckt die Ausgabe auf stderr. Das 2> /dev/null braucht man dann nicht mehr.
ChristianD marked this conversation as resolved
ChristianD force-pushed ipv4snatV2 from ad5cd5eea7 to 9fd6807612 2021-01-17 08:19:44 +01:00 Compare
Author
Member

alles mal überarbeitet. Einen Punkt überlege ich noch:

		# read ipaddr but we need no warning
		# the warning come from 30-network-client if this not set
		ipaddr=$(uci get gateway.@client[0].ipaddr)

brauchen wir hier wirklich kein warning oder brechen wir da lieber mit einen ERROR ab weil die Konfiguration so nicht komplett ist? Ich bin ja fast für abbrechen.

alles mal überarbeitet. Einen Punkt überlege ich noch: ``` # read ipaddr but we need no warning # the warning come from 30-network-client if this not set ipaddr=$(uci get gateway.@client[0].ipaddr) ``` brauchen wir hier wirklich kein warning oder brechen wir da lieber mit einen ERROR ab weil die Konfiguration so nicht komplett ist? Ich bin ja fast für abbrechen.
adschm added the
feature
RFC
packages/fff
layer3
labels 2021-01-19 16:38:05 +01:00
Member

alles mal überarbeitet. Einen Punkt überlege ich noch:

		# read ipaddr but we need no warning
		# the warning come from 30-network-client if this not set
		ipaddr=$(uci get gateway.@client[0].ipaddr)

brauchen wir hier wirklich kein warning oder brechen wir da lieber mit einen ERROR ab weil die Konfiguration so nicht komplett ist? Ich bin ja fast für abbrechen.

Stimmt, eigentlich Abbruch. Ohne ipaddr geht es nicht. Es passiert zwar nix, aber ich finde es auch besser hier raus zu gehen.

> alles mal überarbeitet. Einen Punkt überlege ich noch: > > ``` > # read ipaddr but we need no warning > # the warning come from 30-network-client if this not set > ipaddr=$(uci get gateway.@client[0].ipaddr) > ``` > > brauchen wir hier wirklich kein warning oder brechen wir da lieber mit einen ERROR ab weil die Konfiguration so nicht komplett ist? Ich bin ja fast für abbrechen. Stimmt, eigentlich Abbruch. Ohne ipaddr geht es nicht. Es passiert zwar nix, aber ich finde es auch besser hier raus zu gehen.
ChristianD force-pushed ipv4snatV2 from 9fd6807612 to 1efc6b3d41 2021-01-27 23:01:23 +01:00 Compare
Author
Member

alles mal überarbeitet. Einen Punkt überlege ich noch:

		# read ipaddr but we need no warning
		# the warning come from 30-network-client if this not set
		ipaddr=$(uci get gateway.@client[0].ipaddr)

brauchen wir hier wirklich kein warning oder brechen wir da lieber mit einen ERROR ab weil die Konfiguration so nicht komplett ist? Ich bin ja fast für abbrechen.

Stimmt, eigentlich Abbruch. Ohne ipaddr geht es nicht. Es passiert zwar nix, aber ich finde es auch besser hier raus zu gehen.

Da ich es mittlerweile auch als sehr sinnvoll ansehe, habe ich es dahingehend mal geändert. Ich werde das jetzt nochmal testen und dann das RFC entfernen. Mir gefällt die Lösung einfach viel viel besser.

> > alles mal überarbeitet. Einen Punkt überlege ich noch: > > > > ``` > > # read ipaddr but we need no warning > > # the warning come from 30-network-client if this not set > > ipaddr=$(uci get gateway.@client[0].ipaddr) > > ``` > > > > brauchen wir hier wirklich kein warning oder brechen wir da lieber mit einen ERROR ab weil die Konfiguration so nicht komplett ist? Ich bin ja fast für abbrechen. > > Stimmt, eigentlich Abbruch. Ohne ipaddr geht es nicht. Es passiert zwar nix, aber ich finde es auch besser hier raus zu gehen. Da ich es mittlerweile auch als sehr sinnvoll ansehe, habe ich es dahingehend mal geändert. Ich werde das jetzt nochmal testen und dann das RFC entfernen. Mir gefällt die Lösung einfach viel viel besser.
ChristianD force-pushed ipv4snatV2 from 1efc6b3d41 to 737fde2e56 2021-01-28 08:55:16 +01:00 Compare
Author
Member

So ich hab das ganze mal getestet und eben noch 2 Fehler behoben:

/etc/init.d/firewall start ==> /etc/init.d/fff-firewall start

Die -t nat table wurde von fff-firewall nicht geflust, deshalb hab ich in

src/packages/fff/fff-firewall/files/usr/lib/firewall.d/00-prepare

noch ein

iptables -t nat -F

eingebaut. Ich weiß nicht genau ob das so korrekt ist aber so geht es. Ein reines iptables -F fasst die nat table anscheinend nicht an. Bin mir da unsicher wie man das richtig macht, falls da noch Änderungen gewünscht sind bitte bescheid geben

So ich hab das ganze mal getestet und eben noch 2 Fehler behoben: 1) /etc/init.d/firewall start ==> /etc/init.d/fff-firewall start 2) Die -t nat table wurde von fff-firewall nicht geflust, deshalb hab ich in src/packages/fff/fff-firewall/files/usr/lib/firewall.d/00-prepare noch ein `iptables -t nat -F ` eingebaut. Ich weiß nicht genau ob das so korrekt ist aber so geht es. Ein reines iptables -F fasst die nat table anscheinend nicht an. Bin mir da unsicher wie man das richtig macht, falls da noch Änderungen gewünscht sind bitte bescheid geben
ChristianD force-pushed ipv4snatV2 from 737fde2e56 to dc88fafe8e 2021-01-28 08:58:39 +01:00 Compare
ChristianD changed title from [v2] RFC: Add package fff-layer3-ipv4snat to [v2] Add package fff-layer3-ipv4snat 2021-01-28 09:04:39 +01:00
ChristianD force-pushed ipv4snatV2 from dc88fafe8e to 37e7b24747 2021-01-28 09:47:52 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from 37e7b24747 to cafec286db 2021-01-28 09:48:16 +01:00 Compare
Author
Member

Ich hab das flushen der Regeln jetzt mal in ein extra Patch ausgelagert und dort auch gleich richtig alles (nat und mangle) geflusht.

Ich hab das flushen der Regeln jetzt mal in ein extra Patch ausgelagert und dort auch gleich richtig alles (nat und mangle) geflusht.
fbl added this to the next-feature milestone 2021-02-12 19:43:20 +01:00
ChristianD force-pushed ipv4snatV2 from cafec286db to 0b585e5273 2021-02-13 17:45:37 +01:00 Compare
Author
Member

uci del network.client.nat

durch

uci -q del network.client.nat

ersetzt um Fehlerausgabe zu unterdrücken bei configure-layer3 -c

uci del network.client.nat durch uci -q del network.client.nat ersetzt um Fehlerausgabe zu unterdrücken bei configure-layer3 -c
fbl reviewed 2021-03-02 00:40:55 +01:00
fbl left a comment
Owner

Ich hab noch einige Anmerkungen/Fragen, bevor das in die Firmware kann..

Ich hab noch einige Anmerkungen/Fragen, bevor das in die Firmware kann..
@ -8,0 +9,4 @@
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
Owner

An dieser table wird mit diesem Patchset überhaupt nichts geändert. Entweder nur die nat table flushen oder analog für ip6tables ebenfalls hinzufügen.

An dieser table wird mit diesem Patchset überhaupt nichts geändert. Entweder nur die nat table flushen oder analog für ip6tables ebenfalls hinzufügen.
Author
Member

Ich hab die hier einfach mit reingenommen damit es drinnen ist und endlich "komplett" ist sonst stolpert der nächste der dann was mit mangle macht wieder drüber. Aber du hast recht, ip6tables sollte dann auch noch mit dazu.

Ich hab die hier einfach mit reingenommen damit es drinnen ist und endlich "komplett" ist sonst stolpert der nächste der dann was mit mangle macht wieder drüber. Aber du hast recht, ip6tables sollte dann auch noch mit dazu.
ChristianD marked this conversation as resolved
@ -0,0 +1,32 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fff-layer3-ipv4snat
Owner

Warum nicht fff-layer3-snat?
Wenn einer vor hat, das für IPv6 zu implementieren (was hoffentlich nicht der Fall ist), dann braucht das ja kein eigenes Paket..)

Warum nicht fff-layer3-snat? Wenn einer vor hat, das für IPv6 zu implementieren (was hoffentlich nicht der Fall ist), dann braucht das ja kein eigenes Paket..)
ChristianD marked this conversation as resolved
@ -0,0 +9,4 @@
return 1
fi
if ! ipaddr=$(uci get gateway.@client[0].ipaddr); then
echo "ERROR: No ipaddr set! For SNAT use you must set ipaddr"
Owner

Hier und im Satz davor fehlt ein '.' am Ende.

Außerdem würde ich schreiben "No peer_ip set, which is required for SNAT!" und beim anderen analog.

Warum heißt die Option nat, im Fehler steht dann aber SNAT? Ich würde mich hier für eines von beiden entscheiden und dann entweder client.snat oder "which is required for client interface NAT!" schreiben.

Hier und im Satz davor fehlt ein '.' am Ende. Außerdem würde ich schreiben "No peer_ip set, which is required for SNAT!" und beim anderen analog. Warum heißt die Option nat, im Fehler steht dann aber SNAT? Ich würde mich hier für eines von beiden entscheiden und dann entweder client.snat oder "which is required for client interface NAT!" schreiben.
ChristianD marked this conversation as resolved
@ -0,0 +14,4 @@
fi
# We set the snat config
uci set network.client.nat=1
Owner

network.client.nat für unser eigenes Zeug zu verwenden finde ich gefährlich. Sollte wenigstens network.client.fff-nat o.ä. sein

network.client.nat für unser eigenes Zeug zu verwenden finde ich gefährlich. Sollte wenigstens network.client.fff-nat o.ä. sein
ChristianD marked this conversation as resolved
@ -0,0 +19,4 @@
}
reload() {
/etc/init.d/fff-firewall start
Owner

Stattdessen sollte für das fff-firewall Paket ein passender reload-trigger eingerichtet werden, der die Konfiguration bei Änderungen an entsprechenden Configs neu startet.

Stattdessen sollte für das fff-firewall Paket ein passender reload-trigger eingerichtet werden, der die Konfiguration bei Änderungen an entsprechenden Configs neu startet.
Author
Member

Das haben wir im moment allerdings nicht und hat mMn auch hier erstmal nichts zu suchen. Das kann man gerne mal extra bauen. Issue aufmachen dafür?

Das haben wir im moment allerdings nicht und hat mMn auch hier erstmal nichts zu suchen. Das kann man gerne mal extra bauen. Issue aufmachen dafür?
Owner

Doch natürlich gehört das zu diesem Patchset, wenn dieses Patchset neue Firewall-Features hinzufügt, die einen neuen reload-trigger benötigen.

Aktuell gibt es reload-trigger auf "/etc/config/fff-firewall" und "/etc/config/network".

Doch natürlich gehört das zu diesem Patchset, wenn dieses Patchset neue Firewall-Features hinzufügt, die einen neuen reload-trigger benötigen. Aktuell gibt es reload-trigger auf "/etc/config/fff-firewall" und "/etc/config/network".
Author
Member

Danke für die Erklärumg im IRC, jetzt verstanden und angepasst

Danke für die Erklärumg im IRC, jetzt verstanden und angepasst
ChristianD marked this conversation as resolved
@ -0,0 +2,4 @@
peer_ip=$(uci get gateway.meta.peer_ip)
ipaddr=$(uci get gateway.@client[0].ipaddr)
for ip in $ipaddr; do
iptables -t nat -A POSTROUTING -s $ip -j SNAT --to-source $peer_ip
Owner

peer_ip ist dafür eigentlich nicht da.
Hier gilt also wie bei #87: Eigentlich bräuchte es dafür eine Möglichkeit explizit Router-IP o.ä. zu setzen.

peer_ip ist dafür eigentlich nicht da. Hier gilt also wie bei #87: Eigentlich bräuchte es dafür eine Möglichkeit explizit Router-IP o.ä. zu setzen.
Author
Member

Auch wenn ich das immer noch nicht ganz verstanden habe... Wie weit ist #87 da schon gekommen? @jkimmel hast du da schon was vorbereitet?

Auch wenn ich das immer noch nicht ganz verstanden habe... Wie weit ist #87 da schon gekommen? @jkimmel hast du da schon was vorbereitet?
Owner

#136 hätte dafür einen fix.

#136 hätte dafür einen fix.
ChristianD marked this conversation as resolved
ChristianD force-pushed ipv4snatV2 from 0b585e5273 to 655bee72a9 2021-03-03 18:06:23 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from 655bee72a9 to bedf1a2ccc 2021-03-03 18:08:04 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from bedf1a2ccc to b428fadeb8 2021-03-03 18:08:49 +01:00 Compare
Author
Member
  • Paket in fff-layer3-snat unbenannt und an div. stellen angepasst
  • ERROR Texte überarbeitet
  • mangle und nat table auch bei ipv6 flushen
  • Option network.client.nat unbenannt in network.client.fff-snat
  • Diverse stellen NAT in SNAT unbenannt
* Paket in fff-layer3-snat unbenannt und an div. stellen angepasst * ERROR Texte überarbeitet * mangle und nat table auch bei ipv6 flushen * Option network.client.nat unbenannt in network.client.fff-snat * Diverse stellen NAT in SNAT unbenannt
ChristianD force-pushed ipv4snatV2 from b428fadeb8 to db1b398683 2021-03-03 18:26:21 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from db1b398683 to 2234c7b9cf 2021-03-03 18:41:12 +01:00 Compare
Author
Member
  • reload() aus 33-snat.conf entfernt da dies bereits durch procd_add_reload_trigger "fff-firewall" "network" in der firewall erledigt wird
  • Ordner richtig benannt so wie auch der Paketname heißt
* reload() aus 33-snat.conf entfernt da dies bereits durch procd_add_reload_trigger "fff-firewall" "network" in der firewall erledigt wird * Ordner richtig benannt so wie auch der Paketname heißt
ChristianD force-pushed ipv4snatV2 from 2234c7b9cf to d7994ba8d6 2021-03-03 18:44:42 +01:00 Compare
rohammer reviewed 2021-03-03 21:34:51 +01:00
@ -6,2 +6,4 @@
iptables -X
iptables -F -t nat
iptables -X -t nat
Member

Das wirft Fehler auf der node, da dort das modul nicht da ist.
Ich mach nen Patch, der das unabhaengig flusht. Egal was da ist und was nicht.
Kommt gleich.

Das wirft Fehler auf der node, da dort das modul nicht da ist. Ich mach nen Patch, der das unabhaengig flusht. Egal was da ist und was nicht. Kommt gleich.
ChristianD force-pushed ipv4snatV2 from d7994ba8d6 to c56301fd71 2021-03-05 14:40:09 +01:00 Compare
Author
Member

Bin gestern über noch einen Fehler gestolpert:

in src/packages/fff/fff-layer3-snat/files/etc/layer3.d/33-snat.conf

Zeile 4
if [ "$(uci -q get gateway.@client[0].fff-snat)" = '1' ]; then

ist fehlerhaft, wir müssen das dort natürlich aus network lesen also heißt das jetzt

if [ "$(uci -q get network.client.fff-snat)" = '1' ]; then

Bin gestern über noch einen Fehler gestolpert: in src/packages/fff/fff-layer3-snat/files/etc/layer3.d/33-snat.conf Zeile 4 if [ "$(uci -q get gateway.@client[0].fff-snat)" = '1' ]; then ist fehlerhaft, wir müssen das dort natürlich aus network lesen also heißt das jetzt if [ "$(uci -q get network.client.fff-snat)" = '1' ]; then
ChristianD force-pushed ipv4snatV2 from c56301fd71 to d6acab4d75 2021-08-07 10:27:01 +02:00 Compare
ChristianD force-pushed ipv4snatV2 from d6acab4d75 to 568c92f1db 2021-08-07 10:29:41 +02:00 Compare
Author
Member

rebased und angepasst auf routerip von #136

offen ist jetzt nur noch die Frage wie wir mit dem Firewall Reset umgehen mit dem Problem von @rohammer und #137

rebased und angepasst auf routerip von #136 offen ist jetzt nur noch die Frage wie wir mit dem Firewall Reset umgehen mit dem Problem von @rohammer und #137
Owner

Nochmal zwei Fragen:

  • Warum heißt die Option in der gwconfig 'fff-snat'? Das fff sollte hier denke ich weg.
  • Wie ist sichergestellt, dass die IPv4-Adressen bei aktiviertem snat nicht announced werden?
Nochmal zwei Fragen: - Warum heißt die Option in der gwconfig 'fff-snat'? Das fff sollte hier denke ich weg. - Wie ist sichergestellt, dass die IPv4-Adressen bei aktiviertem snat nicht announced werden?
Owner

Außerdem: UCI kann mit '-' in option-Namen nicht umgehen.

Außerdem: UCI kann mit '-' in option-Namen nicht umgehen.
Author
Member
  • Warum heißt die Option in der gwconfig 'fff-snat'? Das fff sollte hier denke ich weg.

Meine Idee war, es gleich zu haben zur network und nicht mit 2 verschiedenen Namen zu hantieren. Das der "-" nicht geht, ist jetzt dumm... ja muss man ändern darauf hab ich nicht geachtet.

  • Wie ist sichergestellt, dass die IPv4-Adressen bei aktiviertem snat nicht announced werden?

Gar nicht. Da ich bisher dort 192.168/16 Adressen verwende, fallen sie durch den babeld Filter (der nur 10.50/16 und 10.83/16 zulässt) und werden nicht announced.

> - Warum heißt die Option in der gwconfig 'fff-snat'? Das fff sollte hier denke ich weg. Meine Idee war, es gleich zu haben zur network und nicht mit 2 verschiedenen Namen zu hantieren. Das der "-" nicht geht, ist jetzt dumm... ja muss man ändern darauf hab ich nicht geachtet. > - Wie ist sichergestellt, dass die IPv4-Adressen bei aktiviertem snat nicht announced werden? Gar nicht. Da ich bisher dort 192.168/16 Adressen verwende, fallen sie durch den babeld Filter (der nur 10.50/16 und 10.83/16 zulässt) und werden nicht announced.
Owner

Meine Idee war, es gleich zu haben zur network und nicht mit 2 verschiedenen Namen zu hantieren. Das der "-" nicht geht, ist jetzt dumm... ja muss man ändern darauf hab ich nicht geachtet.

Das fff- ist in der Gateway-Config aber redundant und wir haben das auch überall anders nicht so gemacht.
Für die Network-Config ist das ja nur da, um die Gefahr einer Überlappung mit OpenWrt Settings zu minimieren, dort soll ja keiner manuell drin rum hantieren. In so fern sehe ich von zwei verschiedenen Namen jetzt keinen Nachteil. Sogar eher einen Vorteil, weil man nicht aus Versehen das falsche ändert, denn die Optionen verhalten sich ja nicht identisch.

Den '-' würde ich einfach durch ein '_' ersetzen.

Gar nicht. Da ich bisher dort 192.168/16 Adressen verwende, fallen sie durch den babeld Filter (der nur 10.50/16 und 10.83/16 zulässt) und werden nicht announced.

Ok. Das gefällt mir bisher noch gar nicht, denn das lässt sich kaum sinnvoll dokumentieren. Wenn die Option aktiv ist, dann sollten da entweder passende deny-Regeln entstehen, oder schon von vornherein keine allow-Regeln.

Ist dann aber Baustelle für einen anderen Pull-Request.

> Meine Idee war, es gleich zu haben zur network und nicht mit 2 verschiedenen Namen zu hantieren. Das der "-" nicht geht, ist jetzt dumm... ja muss man ändern darauf hab ich nicht geachtet. Das fff- ist in der Gateway-Config aber redundant und wir haben das auch überall anders nicht so gemacht. Für die Network-Config ist das ja nur da, um die Gefahr einer Überlappung mit OpenWrt Settings zu minimieren, dort soll ja keiner manuell drin rum hantieren. In so fern sehe ich von zwei verschiedenen Namen jetzt keinen Nachteil. Sogar eher einen Vorteil, weil man nicht aus Versehen das falsche ändert, denn die Optionen verhalten sich ja nicht identisch. Den '-' würde ich einfach durch ein '_' ersetzen. > Gar nicht. Da ich bisher dort 192.168/16 Adressen verwende, fallen sie durch den babeld Filter (der nur 10.50/16 und 10.83/16 zulässt) und werden nicht announced. Ok. Das gefällt mir bisher noch gar nicht, denn das lässt sich kaum sinnvoll dokumentieren. Wenn die Option aktiv ist, dann sollten da entweder passende deny-Regeln entstehen, oder schon von vornherein keine allow-Regeln. Ist dann aber Baustelle für einen anderen Pull-Request.
Author
Member

Mir ist die Bezeichnung tatsächlich ziemlich egal.
'-' durch '_' ersetzen klingt gut.

Mir ist die Bezeichnung tatsächlich ziemlich egal. '-' durch '_' ersetzen klingt gut.
Owner

Weitere Anmerkungen:

  • Teilweise sind gateway.@client[0] und network.client durcheinander gekommen
  • Beim Anwenden der Firwall werden routerip und ipaddr aus der gateway-config ausgelesen, sind also unter Umständen bereits vor test-Mode bzw. apply aktiv. Diese müssten also - genauso wie die snat-Option an sich - irgendwo zwischengespeichert, oder aus den Stellen ausgelesen werden, wo diese angewendet werden (e.g. network.client.ipaddr)
  • Bei der SNAT-Regel könnte es sinnvoll sein statt (oder zusätzlich zum) expliziten source-matching noch auf das Client-Interface matchen (-i br-client)

Und bissl nitpicking:

  • Bei einigen uci get fehlt das -q, was zu "uci: Entry not found"-Ausgaben führt, wenn configure-layer3 -c ausgeführt wird
  • Der Dateiname der firewall.d Datei könnte man - wie die anderen Dateien auch - klein schreiben
Weitere Anmerkungen: - Teilweise sind gateway.@client[0] und network.client durcheinander gekommen - Beim Anwenden der Firwall werden routerip und ipaddr aus der gateway-config ausgelesen, sind also unter Umständen bereits vor test-Mode bzw. apply aktiv. Diese müssten also - genauso wie die snat-Option an sich - irgendwo zwischengespeichert, oder aus den Stellen ausgelesen werden, wo diese angewendet werden (e.g. `network.client.ipaddr`) - Bei der SNAT-Regel könnte es sinnvoll sein statt (oder zusätzlich zum) expliziten source-matching noch auf das Client-Interface matchen (`-i br-client`) Und bissl nitpicking: - Bei einigen `uci get` fehlt das `-q`, was zu "uci: Entry not found"-Ausgaben führt, wenn `configure-layer3 -c` ausgeführt wird - Der Dateiname der firewall.d Datei könnte man - wie die anderen Dateien auch - klein schreiben
fbl modified the milestone from next-feature to 20220405-beta 2021-12-21 14:48:20 +01:00
Author
Member
  • Beim Anwenden der Firwall werden routerip und ipaddr aus der gateway-config ausgelesen, sind also unter Umständen bereits vor test-Mode bzw. apply aktiv. Diese müssten also - genauso wie die snat-Option an sich - irgendwo zwischengespeichert, oder aus den Stellen ausgelesen werden, wo diese angewendet werden (e.g. network.client.ipaddr)

Zum Verständnis:

Wenn ich die /etc/config/gateway bearbeite und NAT anschalte aber dann nichts weiter mache (kein configure-layer3 -irgendwas), dann aus irgendeinen Grund sich die firewall neu startet, dann kommt es zu einen ungünstigen Zustand weil die Daten aus der gateway kommen für die Firewall. Hab ich dich da richtig verstanden?

Demnach ist aber auch (oder eigentlich nur? oder?) schon das

if [ "$(uci -q get gateway.@client[0].fff-snat)" = '1' ]; then

ein Problem oder? Das if müsste auf die uci network gucken dann sollte alles passen oder verstehe ich dich da falsch?

> - Beim Anwenden der Firwall werden routerip und ipaddr aus der gateway-config ausgelesen, sind also unter Umständen bereits vor test-Mode bzw. apply aktiv. Diese müssten also - genauso wie die snat-Option an sich - irgendwo zwischengespeichert, oder aus den Stellen ausgelesen werden, wo diese angewendet werden (e.g. `network.client.ipaddr`) Zum Verständnis: Wenn ich die /etc/config/gateway bearbeite und NAT anschalte aber dann nichts weiter mache (kein configure-layer3 -irgendwas), dann aus irgendeinen Grund sich die firewall neu startet, dann kommt es zu einen ungünstigen Zustand weil die Daten aus der gateway kommen für die Firewall. Hab ich dich da richtig verstanden? Demnach ist aber auch (oder eigentlich nur? oder?) schon das if [ "$(uci -q get gateway.@client[0].fff-snat)" = '1' ]; then ein Problem oder? Das if müsste auf die uci network gucken dann sollte alles passen oder verstehe ich dich da falsch?
Owner

Exakt. Das ist ja auch der ganze Grund, warum wir das überhaupt in die network config schreiben. Das meinte ich mit:

Teilweise sind gateway.@client[0] und network.client durcheinander gekommen

Exakt. Das ist ja auch der ganze Grund, warum wir das überhaupt in die network config schreiben. Das meinte ich mit: > Teilweise sind gateway.@client[0] und network.client durcheinander gekommen
ChristianD force-pushed ipv4snatV2 from 568c92f1db to 31ebb6b259 2021-12-30 08:31:21 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from 31ebb6b259 to 7573bad3ff 2021-12-30 08:32:56 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from 7573bad3ff to 8152e4156a 2021-12-30 08:34:36 +01:00 Compare
Author
Member
  • Hoffentlich alle gateway / network Verdreher entfernt
  • firewall statt auf ip nun auf das Interface br-client matchen
  • Firewall Dateinamen in Kleinbuchstaben geändert
  • routerip wird nun in network.client.fff-snat-routerip zwischengespeichert damit es zwischenzeitliches editieren der gateway mit neu starten der firewall nicht zu unerwünschten verhalten führt
  • einige vergessene -q in uci get eingefügt
* Hoffentlich alle gateway / network Verdreher entfernt * firewall statt auf ip nun auf das Interface br-client matchen * Firewall Dateinamen in Kleinbuchstaben geändert * routerip wird nun in network.client.fff-snat-routerip zwischengespeichert damit es zwischenzeitliches editieren der gateway mit neu starten der firewall nicht zu unerwünschten verhalten führt * einige vergessene -q in uci get eingefügt
ChristianD force-pushed ipv4snatV2 from 8152e4156a to e9bb70b15b 2021-12-30 08:44:24 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from e9bb70b15b to ff0231ffe9 2021-12-30 08:47:29 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from ff0231ffe9 to ad4d55c826 2021-12-30 08:48:36 +01:00 Compare
ChristianD force-pushed ipv4snatV2 from ad4d55c826 to 6d1c5aaa82 2021-12-30 12:56:59 +01:00 Compare
Owner

Bevor ich jetzt wieder lauter Kleinkram anmerke, hab ich $Zeug mal selbst gefixt:

  • Unify indentation
  • Depend on kmod-ipt-nat instead of unnecessary iptables-mod-nat-extra
  • Fix wrong option names (router_ip, fff_snat_sourceip)
  • Make router_ip check work correctly
  • Use fwmark to identify nat packages (-i does not work in POSTROUTING chain)
  • Hide unnecessary output of uci get [..].ipaddr
  • Commit Message aufgehübscht

Siehe https://git.freifunk-franken.de/fbl/firmware/src/branch/snat

Bevor ich jetzt wieder lauter Kleinkram anmerke, hab ich $Zeug mal selbst gefixt: - Unify indentation - Depend on kmod-ipt-nat instead of unnecessary iptables-mod-nat-extra - Fix wrong option names (router_ip, fff_snat_sourceip) - Make router_ip check work correctly - Use fwmark to identify nat packages (-i does not work in POSTROUTING chain) - Hide unnecessary output of `uci get [..].ipaddr` - Commit Message aufgehübscht Siehe https://git.freifunk-franken.de/fbl/firmware/src/branch/snat
fbl removed the
RFC
label 2021-12-30 15:35:33 +01:00
Author
Member

Danke für das Überarbeiten.

Ich hab gerade deine Version getestet und scheint hier einwandfrei zu tun. Mit den Änderungen bin ich einverstanden, schaut gut aus.

Tested-by: Christian Dresel <freifunk@dresel.systems>
Danke für das Überarbeiten. Ich hab gerade deine Version getestet und scheint hier einwandfrei zu tun. Mit den Änderungen bin ich einverstanden, schaut gut aus. ``` Tested-by: Christian Dresel <freifunk@dresel.systems> ```
Owner

fff-layer3 pkg_release bump entfernt (siehe #202) und applied.

fff-layer3 pkg_release bump entfernt (siehe #202) und applied.
fbl closed this pull request 2022-01-09 23:11:33 +01:00

Pull request closed

Sign in to join this conversation.
No description provided.