[Wien] portforwarding wifi/wan
Markus Gschwendt
(spam-protected)
Do Jul 16 22:13:54 CEST 2009
On Thu, 2009-07-16 at 21:41 +0200, Wolfgang Vanek wrote:
> ... Für "portfw.html" und "local.fw-portfw" habe ich Änderungsvorschläge gemacht, siehe "aenderungsvorschlaege.txt".
ich glaube dass das auch einfacher geht.
statt einer eigenen chain könnte das in der PREROUTING chain passieren,
z.b.:
iptables -A PREROUTING -t nat -p tcp -d $LOCALIP --dport $DPORT -j DNAT
--to $DESTIP:$DPORT
iptables -A PREROUTING -t nat -p udp -d $LOCALIP --dport $DPORT -j DNAT
--to $DESTIP:$DPORT
gibt es einen grund das in einer eigenen chain zu machen?
gibt es einen grund warum im script ein "case stop" vorgesehen ist? bei
änderungen wird 'eh' rebootet.
falls "case stop" notwendig, gibt es einen trick die rules zu löschen?
sonst muss ma halt eigene chain machen.
markus
das komplette script, vlt. kanns wer testen, ich hab grad wenig zeit:
#!/bin/sh
# /usr/bin/netparam is executed in /etc/init.d/S45firewall, we may just
use this
# variables here
FWTARGETS=$(nvram get ff_portfw)
if [ "$(nvram get ff_portfw_wan)" = "1" ]; then
LOCALIP=$WANADR
else
LOCALIP=$WIFIADR
fi
# Struktur von ff_portfw:
# IP:Port/Protokoll,[Port/Protokoll,...]
[IP:Port/Protokoll,[Port/Protokoll,...]] ...
# IP: IP-Adresse, an die geforwarded werden soll
# Port: einzelner Port oder Portrange im Format Port-Port (Bindestrich
der besseren Lesbarkeit wegen)
# Protokoll: t steht für tcp, u für udp, tu f tcp+udp
# Daten werden nicht geprüft,weil hier sowieso nicht mehr eingegriffen
werden kann. Daher Prüfung in der Weboberfläche (Work in Progress).
portfw_rules() {
for FWTARGET in $FWTARGETS; do
DESTIP=${FWTARGET%%:*} # IP-Adresse am Anfang des Blocks
DPORTS=${FWTARGET#*:} # alle zu forwardenden Ports am Ende des
Blocks
while [ ${#DPORTS} != "0" ]; do # Länge des Blocks der Ports ist
nicht 0
PORTPROTO=${DPORTS%%,*} # Der 1. Port im Block wird bearbeitet"
DPORT=`echo ${PORTPROTO%/*} | sed -e s/-/:/` # Aus dem
Port/Protokollblock wird der Zielport ermittelt
PROTO=${PORTPROTO#*/} # Aus dem Port/Protokollblock wird das
Protokoll ermittelt
case $PROTO in (*t*)
iptables -A PREROUTING -t nat -p tcp -d $LOCALIP --dport $DPORT
-j DNAT --to $DESTIP:$DPORT
esac
case $PROTO in (*u*)
iptables -A PREROUTING -t nat -p tcp -d $LOCALIP --dport $DPORT -j
DNAT --to $DESTIP:$DPORT
esac
DPORTS=${DPORTS#*,} # Schleife mit restlichen Ports wiederholen
done
done
}
case $1 in
start)
portfw_rules
;;
stop)
;;
esac
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : smime.p7s
Dateityp : application/x-pkcs7-signature
Dateigröße : 1832 bytes
Beschreibung: nicht verfügbar
URL : <http://lists.funkfeuer.at/pipermail/wien/attachments/20090716/d30918c9/attachment.bin>
Mehr Informationen über die Mailingliste Wien