Port-Freigabe auf die Box ist so möglich! Virtual-IP überflüssig?!?

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Moin zusammen,

ich möchte euch mal bitten, den folgenden Vorschlag zu prüfen:

Code:
--- usr/www/all/html/de/internet/portrule.js.ori        2008-02-05 09:52:26.000000000 +0100
+++ usr/www/all/html/de/internet/portrule.js    2008-02-05 10:12:04.000000000 +0100
@@ -35,10 +35,8 @@
        for (i=0; i < 4; i++) {
                if ((Number(digits[i]) > 255 ) || (Number(digits[i]) < 0 )) return g_mldIpAdr;
        }
-       // IP-Adresse 0.0.0.0 verbieten
-       if ((Number(digits[0]) == 0) && (Number(digits[1]) == 0) && (Number(digits[2]) == 0) && (Number(digits[3]) == 0)) return g_mldIpAdr0000;
-       // IP-Adresse *.*.*.0 verbieten
-       if (Number(digits[3]) == 0) return g_mldIpAdr0;
+       // IP-Adresse *.*.*.0 verbieten ... aber 0.0.0.0 erlauben ;-)
+       if (Number(digits[3]) == 0 && address[0] != "0.0.0.0") return g_mldIpAdr0;
        // IP-Adresse *.*.*.255 verbieten
        if (Number(digits[3]) == 255) return g_mldIpAdr255;
        // IP-Adresse 169.254.*.* verbieten
Damit kann man in der "normalen" Oberfläche als Ziel die "0.0.0.0" also die Box selbst angeben. Damit geht dann z.B. folgendes, ohne Eingriffe in die ar7.cfg:

"tcp 0.0.0.0:22 0.0.0.0:22 0 # SSH auf FBOX",
"udp 0.0.0.0:1194 0.0.0.0:1194 0 # OVPN";


Jörg


EDIT 20080406: Nachtrag einer "Minianleitung"

Um das ganze ohne Patches zu nutzen, kann man das oben genannte auch per Telnet auf der Box direkt eingeben. Die "kurze" Variante ermöglicht es, Portfreigaben auf "0.0.0.0" zu setzen, die zwar im Flash abgespeicert werden, nach einem Reboot aber nicht mehr in der GUI sichtbar sind. Die "längere" Variante zeigt auch in der GUI alle Weiterleitungen auf 0.0.0.0 an und ermöglicht deren Änderung (Ausnahme ist die Standard-AVM-Regel für VOIP auf Port 5060).

Für die "Mini-Lösung" per telnet auf die Box und dann das folgende ausführen:

Code:
pr=`find /var/html/ -name portrule.js`
sed  's/return g_mldIpAdr0000/return null/'  $pr > /var/tmp/portrule.js
mount -o bind  /var/tmp/portrule.js  $pr
Wie gesagt: Damit kann man bis zu einem Neustart 0.0.0.0 als Ziel eintragen und diese Einträge (nicht schon existierende) "sehen". Nach einem Neustart bleiben diese Einträge zwar erhalten, sind aber nicht sichtbar in der GUI.


Die "lange" Version ermöglicht auch die Anzeige der Einträge in der GUI:
Code:
pr=`find /var/html/ -name portrule.js`
sed  's/return g_mldIpAdr0000/return null/'  $pr > /var/tmp/portrule.js
mount -o bind  /var/tmp/portrule.js  $pr

cat > /var/tmp/unhiderules << 'EOF'
#! /bin/sh

# Die VOIP-Regel "ausblenden"
EXCLUDE="0\.0\.0\.0\:5060"

#PW extrahieren
local PWD=$(/bin/allcfgconv -C ar7 -c -o - | sed -ne '/^webui[[:space:]]*{/,/^}/{
/=/{s/[[:space:]]*=[[:space:]]*/=/;s/^[[:space:]]*//;p}
}' | grep '^password=' | cut -d '"' -f2)
    ret=$?
    if [ $ret != 0 ]; then
      echo "ERROR: Unhide_local_PFWD (exit code $ret)" >&2
      exit $ret
    fi

# 0.0.0.0:xx 0.0.0.0:yy ersetzen durch 0.0.0.0:xx 127.0.0.1:yy
cat /var/flash/ar7.cfg | sed  "/dslifaces/,/} {/ {/forward/,/}/ {/$EXCLUDE/! s/\(.*0\.0\.0\.0.*\)\(0\.0\.0\.0\)\(.*\)/\1127\.0\.0\.1\3/}}" > /var/tmp/tmpar7.cfg
cat /var/tmp/tmpar7.cfg > /var/flash/ar7.cfg

# Die "neuen" Regeln einlesen lassen, so dass sie per GUI erreichbar sind (die 0.0.0.0-er Regeln sind nicht "ansprechbar":
killall -9 ctlmgr && sleep 1 && /usr/bin/ctlmgr
sleep 5

# ... und nun das Aendern auf 0.0.0.0 per GUI "emulieren"
#
TESTSTRING="127.0.0.1"
NEUEIP="0.0.0.0"
# Die Rules finden ... 
rules="`wget -q -O - "http://127.0.0.1/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=portfw&var%3Amenu=internet&var%3Apagemaster=" | grep -v $EXCLUDE |grep -A 6 $TESTSTRING | grep "uiDoEdit" | sed "s/.*uiDoEdit('\(.*\)').*/\1/"`"

if [ "$rules" != "" ]; then
  # ... POST_DATA String "basteln" 
  PDATA="getpage=/usr/www/all/html/query.txt&login:command/password=$pw&id=uiPostForm&name=uiPostForm&var:pagename=portrule&var:menu=internet"
  for myrule in `echo "$rules" | tr '\n' ' '`; do
    PDATA="${PDATA}&var:rule=${myrule}&var:isnew=0&var:isexp=0&forwardrules:settings/${myrule}/fwip=$NEUEIP"
  done
  echo -n "$PDATA" | REQUEST_METHOD="POST" REMOTE_ADDR="127.0.0.1" CONTENT_TYPE="application/x-www-form-urlencoded" CONTENT_LENGTH=${#PDATA} /usr/www/html/cgi-bin/webcm > /dev/null
fi
# ... fertig
EOF
sh /var/tmp/unhiderules
 

Anhänge

Zuletzt bearbeitet:

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
sorry...habe deinen patch schon für dich im ticketing hinterlassen...
wohl daher 2 doofe ein gedanke...

aber gut das wir das jetzt ahben...denn die 7270 firm version 50 und grösser machen kein virtual ip mehr...
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
Kleiner hacken an der sache gefunden...
Die portfreigaben gehen zwar damit wunderbar, aber die werden ausgeblendet nach dem nächsten neustart der box...
sicherlich das selbe verhalten das zum nicht anzeigne der voip freigaben angewendet wird...
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Kleiner Haken ist gut. Das heißt, dass man diese Freigaben also nicht mehr löschen kann?

MfG Oliver
 

lord-of-linux

Mitglied
Mitglied seit
3 Dez 2005
Beiträge
568
Punkte für Reaktionen
1
Punkte
0
Interessante Lösung, vielleicht lässt sich die Anzeige ja noch so patchen, dass es möglich ist, die Freigaben trotzdem zu sehen.

Löschen wird wohl kein Problem darstellen:
Einfach per nvi /var/flash/ar7.cfg die betroffenen Zeilen löschen, wenn man weiß was man macht. (Habe die Box so schon einmal zerschossen)
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
ich mach es noch etwas anders...
Code:
cat /var/flash/ar7.cfg > /var/media/ftp/uStor01/ar7.cfg
dann mit nem editor der an dieser datei geht editieren, speichern und 
cat /var/media/ftp/uStor01/ar7.cfg > /var/flash/ar7.cfg
so muss man erstmal nicht vi nutzen...
 

wichard

IPPF-Promi
Mitglied seit
16 Jun 2005
Beiträge
6,954
Punkte für Reaktionen
0
Punkte
36
Wer die ar7.cfg direkt bearbeitet, braucht sowieso weder ein Pseudo-Interface noch einen Patch des Webinterfaces... ;) Das Ziel des OP war ja doch ein etwas anderes.
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
erstellen tu ich die dann schon über das avm webif...ich gebe je eher dauerhaft frei und mann muss ja nicht oft da wieder ran
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Ich überlege gerade einen "ugly workaround" beim Starten der Box:
  • Per "sed" die ar7.cfg verändern z.B. die "Ziel 0.0.0.0" auf 127.0.0.1 (nein, die hat bei mir leider nicht funktioniert :-()
  • ctlmgr killen und neu starten -> Regeln wären mit "127.0.0.1" sichtbar
  • per Script die GUI-CGI-Änderung von 127.0.0.1 auf 0.0.0.0 veranlassen
  • fertig

Sieht da einer einen Haken an dem Vorgehen?

Jörg
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
wenn es denn funktioniert?
 

han-solo

Mitglied
Mitglied seit
28 Jul 2005
Beiträge
451
Punkte für Reaktionen
0
Punkte
0
Gibt es denn keine Möglichkeit die Mekker-Abfrage auf die IP des Interfaces (z.B. eth0 = 192.168.178.1) zu unterbinden?

Das wäre doch die beste Lösung.

Gruß
HS
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
... leider ist diese Abfrage im Binary (ich meine ctlmgr(?)) mit drin...

Bei mir klappt es hiermit, damit werde alle Rules wieder angezeigt:
Code:
#! /bin/sh

# Die VOIP-Regel "ausblenden"
EXCLUDE="0\.0\.0\.0\:5060"

#PW extrahieren
local PWD=$(/bin/allcfgconv -C ar7 -c -o - | sed -ne '/^webui[[:space:]]*{/,/^}/{
/=/{s/[[:space:]]*=[[:space:]]*/=/;s/^[[:space:]]*//;p}
}' | grep '^password=' | cut -d '"' -f2)
    ret=$?
    if [ $ret != 0 ]; then
      echo "ERROR: Unhide_local_PFWD (exit code $ret)" >&2
      exit $ret
    fi

# 0.0.0.0:xx 0.0.0.0:yy ersetzen durch 0.0.0.0:xx 127.0.0.1:yy
cat /var/flash/ar7.cfg | sed  "/dslifaces/,/} {/ {/forward/,/}/ {/$EXCLUDE/! s/\(.*0\.0\.0\.0.*\)\(0\.0\.0\.0\)\(.*\)/\1127\.0\.0\.1\3/}}" > /var/tmp/tmpar7.cfg
cat /var/tmp/tmpar7.cfg > /var/flash/ar7.cfg

# Die "neuen" Regeln einlesen lassen, so dass sie per GUI erreichbar sind (die 0.0.0.0-er Regeln sind nicht "ansprechbar":
killall -9 ctlmgr && sleep 1 && /usr/bin/ctlmgr
sleep 5

# ... und nun das Aendern auf 0.0.0.0 per GUI "emulieren"
#
TESTSTRING="127.0.0.1"
NEUEIP="0.0.0.0"
# Die Rules finden ... 
rules="`wget -q -O - "http://127.0.0.1/cgi-bin/webcm?getpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&errorpage=..%2Fhtml%2Fde%2Fmenus%2Fmenu2.html&var%3Alang=de&var%3Apagename=portfw&var%3Amenu=internet&var%3Apagemaster=" | grep -v $EXCLUDE |grep -A 6 $TESTSTRING | grep "uiDoEdit" | sed "s/.*uiDoEdit('\(.*\)').*/\1/"`"

if [ "$rules" != "" ]; then
  # ... POST_DATA String "basteln" 
  PDATA="getpage=/usr/www/all/html/query.txt&login:command/password=$pw&id=uiPostForm&name=uiPostForm&var:pagename=portrule&var:menu=internet"
  for myrule in `echo "$rules" | tr '\n' ' '`; do
    PDATA="${PDATA}&var:rule=${myrule}&var:isnew=0&var:isexp=0&forwardrules:settings/${myrule}/fwip=$NEUEIP"
  done
  echo -n "$PDATA" | REQUEST_METHOD="POST" REMOTE_ADDR="127.0.0.1" CONTENT_TYPE="application/x-www-form-urlencoded" CONTENT_LENGTH=${#PDATA} /usr/www/html/cgi-bin/webcm > /dev/null
fi
# ... fertig
Jörg
 

Darkyputz

Aktives Mitglied
Mitglied seit
27 Jul 2005
Beiträge
2,324
Punkte für Reaktionen
0
Punkte
36
wo hast du das denn stehen??
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Erstmal nur als Skript abgespeichert und händisch gestartet, dann "sind sie alle wieder da" ;-)

Jörg
 

RalfFriedl

IPPF-Urgestein
Mitglied seit
22 Apr 2007
Beiträge
12,343
Punkte für Reaktionen
1
Punkte
0
Geht es hierbei denn darum, daß Virtual-IP nicht mehr funktioniert und eine Alternative gebraucht wird, oder ging es darum, das Ganze einfacher zu machen?

Wenn Virtual-IP noch funktioniert, dann würde ich es dabei belassen. Der Ansatz hier wäre eleganter gewesen, aber nicht, wenn man dafür etliche andere Klimmzüge machen muß.
 

MaxMuster

IPPF-Promi
Mitglied seit
1 Feb 2005
Beiträge
6,932
Punkte für Reaktionen
1
Punkte
36
Wenn ich das oben richtig gelesen hatte, sollte Virtual-IP ab der 50-er FW nicht mehr gehen, das war aber nicht die ursprüngliche Intention...

Eine Virtuelle IP über die debug.cfg ist vermutlichwegen der Probleme noch immer die beste Methode: "Sofort" beim Starten da und ohne weitere Klimmzüge....

Jörg
 

matze1985

Aktives Mitglied
Mitglied seit
17 Feb 2007
Beiträge
1,537
Punkte für Reaktionen
0
Punkte
0
Warum soll denn VirtualIP nicht mehr funktionieren?
Hab ne 7141 und ne 50er FW und VirtualIP startet ganz normal:
Code:
/var/log/mod.log

rc.mod version ds26-pre16
Starting crond...done.
telnetd is disabled
Starting webinterface...done.
Setting up virtual network interface ... done.
...
 

olistudent

IPPF-Urgestein
Mitglied seit
19 Okt 2004
Beiträge
14,779
Punkte für Reaktionen
10
Punkte
38
Virtual IP geht natürlich immer noch. Aber angeblich sollen die Portweiterleitungen nicht funktionieren. Ich habs aber auch noch nicht ausprobiert.

MfG Oliver
 

MBoehme

Neuer User
Mitglied seit
1 Okt 2005
Beiträge
6
Punkte für Reaktionen
0
Punkte
0
Virtual IP geht natürlich immer noch. Aber angeblich sollen die Portweiterleitungen nicht funktionieren. Ich habs aber auch noch nicht ausprobiert.
Hi,

ich habe seit 4 Tagen auf meine Box die aktuelle Labor-FW Gaming mit Freetz laufen, sie läuft stabil, aber die Portweiterleitungen gehen nicht mehr. Virtual IP läuft, intern ist die Box auch über die zusätzliche IP erreichbar, aber von außen leider nicht mehr. :-(
Wahrscheinlich möchte AVM nun, dass man Ihren VPN-Client nutzt, leider weiß ich noch nicht, wie ich ihn einrichten muss. Die Hilfe habe ich dummerweise entfernt. ;-)

MfG Michael