NAT in layer3

Christian Dresel fff at chrisi01.de
So Apr 5 15:16:35 CEST 2020


Hallo zusammen

Nachdem xlat464 bei OpenWRT wohl kaputt ist weil netifd kaputt ist,
wollte ich es mal mit normalen v4 NAT probieren.

Ich hab direkt festgestellt das man br-mesh eine andere Adresse als den
Peeringinterfaces geben kann, indem man hier peer_ip setzt:

https://wiki.freifunk-franken.de/w/Layer3Firmware_Config#gateway

Danach kann man hier mit ipaddr

https://wiki.freifunk-franken.de/w/Layer3Firmware_Config#client

eine andere IP als für die Peeringinterfaces setzen. Danach braucht man
eigentlich nur ein SNAT in der Art von:

iptables -t nat -A POSTROUTING -s <BR-MESH-SUBNETZ/xx> -j SNAT
--to-source <peer_ip>

Das ganze hat hier auch auf anhieb ohne Probleme funktioniert.

Ich überlege nun wo man dieses iptables sinnigerweise unterbekommt. Will
man das mit uci machen braucht man wohl leider das OpenWRT Firewallpaket
das wir nicht drin haben... doof

https://openwrt.org/docs/guide-user/firewall/fw3_configurations/fw3_nat

Wir haben aber z.b. ein eigenes firewall Paket und könnte dort die Regel
in eine neue File ablegen:

https://github.com/FreifunkFranken/firmware/tree/master/src/packages/fff/fff-firewall/files/usr/lib/firewall.d

Das Problem dabei, man bekommt das nicht "schön" in /etc/gateway.d mit
rein, da ein uci commit / uci revert damit nicht geht und somit man das
auch nicht in configuregateway -t mit rein bekommt :(
Da unsere firewall auch keinen restart o.ä. vorsieht, würde vermutlich
selbst folgendes nicht funktionieren

apply() {
	echo "iptables -t nat -A POSTROUTING -s <BR-MESH-ADRESSEN/xx> -j SNAT
--to-source <peer_ip>" > /usr/lib/firewall.d/30-NAT
	/etc/init.d/fff-firewall restart
}

revert() {
	rm /usr/lib/firewall.d/30-NAT
	/etc/init.d/fff-firewall restart
}

Theoretisch könnte man natürlich auch folgendes machen in /etc/gateway.d:

apply() {
	iptables -t nat -A POSTROUTING -s <BR-MESH-ADRESSEN/xx> -j SNAT
--to-source <peer_ip>

}

revert() {
	iptables -t nat -D POSTROUTING -s <BR-MESH-ADRESSEN/xx> -j SNAT
--to-source <peer_ip>
}

wobei das natürlich auch wieder nicht rebootfest ist und dafür auch noch
was her müsste

Find ich aber auch alles andere als schön.

Jemand ne schlaue Idee?

Als weiteres noch, welche /etc/gateway.d file nimmt man da? Ich bin ja
fast dafür ne neue File anzulegen. Ideen?

Gruß

Christian


Mehr Informationen über die Mailingliste franken-dev