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