Firmware .88: Portforwarding 80 auf 192.168.179.1 geht nicht

johnyt11

Neuer User
Mitglied seit
27 Aug 2004
Beiträge
120
Punkte für Reaktionen
0
Punkte
16
Portforwarding 80 auf 192.168.179.1 geht nicht mehr nach update.
Also wieder keine möglichkeit der Fernsteuerung ohne zusätzlichen Router hinter derFB.
Oder kennt jemand noch eine IP Adresse der FB auf die die Box selbst routet ohne Fehlermeldung?

Edit dm41: abgetrennt aus diesem Thread.
 
@johnyt11:
1. Bitte neuen Thread dafür.
2. Route doch Port 12345 auf IP 192.168.179.1 Port 80.
Bei Dir im Browser gib in die Adresszeile ein: http://Deindyndnsname.dyndns.org:12345.
Das sollte Wunder bewirken ;)
 
*Gebetsmühle anwerf* Neue Frage, neuer Thread...

Aber dennoch: Probier mal, den Port 8080 auf die IP der Box, Port 80, umzuleiten und dann von extern über http://externe.IP:8080 auf die Box zuzugreifen. Ansonsten könnte ein Eingriff in die ar7.cfg erforderlich sein.

Edit: Nach wie vor (siehe Thread 7058) gilt natürlich immer noch, daß dieser Weg nicht der wirklich sicherste ist - lieber per SSH auf die Box tunneln...
Edit 2: Der hoch gewählte Port vom Novizen hat natürlich seine Vorteile, daß dieser Bereich idR nicht von den sogenannten Skriptkiddies gescant wird - also lieber einen Port > 10000 (>65335 (?)) wählen und NICHT die 8080, welche ja der Standardport für einen HTTP-Proxy ist.
 
Danke für den Hinweis! Das Einspielen vom mod4.27a auf dei .88 war problemlos. Aber dann habe ich ebenfalls probiert, ein bestehendes Portforwarding auf 192.168.179.1 zu aktivieren. Ging nicht mehr! Da ich dieses Forwarding aber dringlich benotige, habe ich die Box wieder auf die .86 incl. mod4.27a zurückgeflashed.
Gruß Jens



johnyt11 schrieb:
Portforwarding 80 auf 192.168.179.1 geht nicht mehr nach update.
Also wieder keine möglichkeit der Fernsteuerung ohne zusätzlichen Router hinter derFB.
Oder kennt jemand noch eine IP Adresse der FB auf die die Box selbst routet ohne Fehlermeldung?
 
sehr seltsam, hoffentlich hat das irgendwas mit der neuen Firmware für "normale" FritzBoxFon (WLAN) zutun
 
Es liegt nicht am Port 80, sondern an der 192.168.179.1, welche jetzt leider nicht mehr akzeptiert wird.
Gruß Jens


Novize schrieb:
@johnyt11:
1. Bitte neuen Thread dafür.
2. Route doch Port 12345 auf IP 192.168.179.1 Port 80.
Bei Dir im Browser gib in die Adresszeile ein: http://Deindyndnsname.dyndns.org:12345.
Das sollte Wunder bewirken ;)
 
JensemannWF schrieb:
Es liegt nicht am Port 80, sondern an der 192.168.179.1, welche jetzt leider nicht mehr akzeptiert wird.
Dann sollte eine kleine Anpassung in der ar7.cfg dennoch helfen, und zwar müsste dann im Abschnitt "forwardrules" eine Zeile hinzugefügt werden:
Code:
"tcp 0.0.0.0:12345 0.0.0.0:80 #Freigabe für HTTP extern",
(Bitte Syntax genau beachten: Komma ans Ende einer Zeile, am Ende der letzen Zeile ein Semikolon - sonst fährt die Box nicht mehr (sauber) hoch... Alle Anpassungen daher wie immer auf eigene Gefahr!)

Und nach wie vor gilt noch:
Novize schrieb:
1. Bitte neuen Thread dafür.

Edit:
dm41 schrieb:
Edit dm41: abgetrennt aus diesem Thread.
Danke! ;)

HTH,
Wichard
 
Verzeih mir bitte, daß ich doch direkt antworte und keine neuen Thread aufmache:
Ich benötige einen Eintrag in der Gui, welche ich scriptgesteuert aktivieren und deaktivieren kann; das ging vorher mit dem Forwarding von tcp 443 auf die 192.168.179.1 port 22 prima.
Wenn ich den von Dir vorgeschlagenen Eintrag mache, kann ich den wohl über die Gui nicht toggeln, nehme ich an. Doch darauf kommt es mir speziell an. (script sesam)
Gruß Jens

wichard schrieb:
JensemannWF schrieb:
Es liegt nicht am Port 80, sondern an der 192.168.179.1, welche jetzt leider nicht mehr akzeptiert wird.
Dann sollte eine kleine Anpassung in der ar7.cfg dennoch helfen, und zwar müsste dann im Abschnitt "forwardrules" eine Zeile hinzugefügt werden:
Code:
"tcp 0.0.0.0:12345 0.0.0.0:80 #Freigabe für HTTP extern",
(Bitte Syntax genau beachten: Komma ans Ende einer Zeile, am Ende der letzen Zeile ein Semikolon - sonst fährt die Box nicht mehr (sauber) hoch... Alle Anpassungen daher wie immer auf eigene Gefahr!)

Und nach wie vor gilt noch:
Novize schrieb:
1. Bitte neuen Thread dafür.


HTH,
Wichard
 
in der tat auch bei mir ging das portforwarding nach dem firmwareupdate nicht mehr, leider...
 
wo kann ich modifizierte firmware herbekommen? Also, das ich dann noch die möglichkeit habe ports freizugeben usw.

Weiterhin geht das mit den ports freigeben bei mir überhaupt nicht mehr, seit dem ich halt die neue firmware drauf habe. Habe aber wie gesagt mein gesicherte fritz.box einstellungen eingespielt dort ist die portfreigabe auf 192.168.179.1 aktiviert, vermute das es daran liegt.
 
mcjazzman schrieb:
wo kann ich modifizierte firmware herbekommen? Also, das ich dann noch die möglichkeit habe ports freizugeben usw.
Ich habe die .88 nicht, da ich "nur" eine ATA besitze, daher kann ich zur 7050 nichts konkretes sagen. Aber: Mittels des FBEditors von olistudent kannst Du ohne Modifikationen an der Firmware einige Einstellungen durch das Bearbeiten der Datei ar7.cfg ändern - unter anderem auch die Portfreigaben.
ABER VORSICHT: Hier genau auf die Syntax der Portfreigaben achten, sonst kann es passieren, daß die Box nicht mehr (sauber) hochfährt! (Ja, ich spreche aus eigener Erfahrung...) Wenn Du nicht genau weißt, was zu tun ist, vorher zunächst noch mal im Forum suchen und dann bei Unklarheiten lieber noch einmal nachfragen.

mcjazzman schrieb:
Weiterhin geht das mit den ports freigeben bei mir überhaupt nicht mehr, seit dem ich halt die neue firmware drauf habe. Habe aber wie gesagt mein gesicherte fritz.box einstellungen eingespielt dort ist die portfreigabe auf 192.168.179.1 aktiviert, vermute das es daran liegt.
Das vermute ich auch. Diese Freigabe, die ja eigentlich gar nicht erlaubt ist, führt wahrscheinlich dazu, daß beim Abspeichern neuer Freigabendie Prüfroutine, die eben dies abfangen soll, anschlägt.

Frage an olistudent oder Mazdermind: Könnte man die entsprechende HTML-Datei (oder .js?) nicht einfach ändern, um die Abfrage auszuschalten?


Gruß,
Wichard

Edit: Die Abfrage, ob eine Regel "konform" ist, scheint in der Datei /usr/www/all/html/de/internet/portrule.js zu erfolgen. (Das ist zumindest das, was ich jetzt mit meinem gepflegten Halbwissen vermute...)
 
wichard schrieb:
Das vermute ich auch. Diese Freigabe, die ja eigentlich gar nicht erlaubt ist, führt wahrscheinlich dazu, daß beim Abspeichern neuer Freigabendie Prüfroutine, die eben dies abfangen soll, anschlägt.

Frage an olistudent oder Mazdermind: Könnte man die entsprechende HTML-Datei (oder .js?) nicht einfach ändern, um die Abfrage auszuschalten?


Gruß,
Wichard

Edit: Die Abfrage, ob eine Regel "konform" ist, scheint in der Datei /usr/www/all/html/de/internet/portrule.js zu erfolgen. (Das ist zumindest das, was ich jetzt mit meinem gepflegten Halbwissen vermute...)


Ich vermute, daß diese Funktion valDoValidateBoxIp() in dem von Dir beschriebenen portrule.js (hier in der .86er Version) jetzt anders aussieht. In dieser ist die Prüfung auf die 192.168.179.1 nicht so strikt, daß es als Fehler verworfen wird.
Code:
function valDoValidateBoxIp (Address) {
var address = Address.match("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
if (address == null) return g_mldIpAdr;
var digits = address[0].split(".");
var i;
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 *.*.*.255 verbieten
if (Number(digits[3]) == 255) return g_mldIpAdr255;
var error=null;
return error;
}

Kann bitte jemand so nett sein, die entsprechende Funktion der .88 zu posten, damit wir das mal vergleichen können?

Gruß Jens
 
Hi!

Hier das .88er Pendant:

Code:
function valDoValidateBoxIp (Address) {
        var address = Address.match("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$");
        if (address == null) return g_mldIpAdr;
        var digits = address[0].split(".");
        var i;
        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 *.*.*.255 verbieten
        if (Number(digits[3]) == 255) return g_mldIpAdr255;
        var error=null;
        return error;
}

Sehe auf die Schnelle keinen Unterschied. Wenn keiner da ist, kann ich das Code Attachment wieder löschen, um Platz zu sparen.
 
Ich sehe in dem Schnipsel auch keine Überprüfung auf die eigene Adresse, sondern nur auf Gültigkeit (zwischen 0 und 255) sowie auf die 0.0.0.0 sowie .0 und .255. Muß also doch noch woanders sein...
 
wichard schrieb:
Ich sehe in dem Schnipsel auch keine Überprüfung auf die eigene Adresse, sondern nur auf Gültigkeit (zwischen 0 und 255) sowie auf die 0.0.0.0 sowie .0 und .255. Muß also doch noch woanders sein...

Mhh.. mal weiter suchen... ich sehe leider auch keinen Unterschied. Ich werde nochmal intensiv im Folder /var/html/html/de/internet danach Ausschau halten.
Dank Euch für das Mitsuchen und posten der v.88 Schnipsel :)

Gruß Jens

EDIT:
Möglicherweise in dieser: /usr/www/all/html/de/system/netipadr.js

So wie die Struktur dieses Scripts aussieht (zumindest in der .86) enthält die Funktion sehr viele Terminierer, welche entsprechend des Patterns ein false liefern.
Beispiel:
if (jslGetValue("uiViewIpaddrA").substr(0,11)=="192.168.180" && jslGetValue("uiViewNetmaskA")=="255.255.255.0" ) {alert(g_mld192168180); return false;}

Daher scheint die Chance zu bestehen, lediglich eine Zeile in dieser neuen .88er Version zu löschen und "gut ist"

Könnt Ihr das so nachvollziehen bzw. bestätigen?

Gruß Jens
 
JensemannWF schrieb:
Möglicherweise in dieser: /usr/www/all/html/de/system/netipadr.js
Da ich aufgrund des noch nicht erschienenen Updates noch auf einer "ganz alten" FW-Version .65 unterwegs bin, kann ich im Moment nicht mehr machen, als einfach mal meine netipadr.js zum Vergleich zu posten. Vielleicht hilft das ja auch schon wem weiter...
Code:
<style type="text/css">
<!--
#Content {width: 520px; margin: auto;}
.Dhcpcheck {padding-top:8px;}
.pText25 {padding-left: 25px;}
.pCheck25 {
text-indent: -25px;
padding-left: 25px;
margin-bottom: 10px;
}
-->
</style>
<script type="text/JavaScript">
//-----------------------------------------------------------------------------
<? include ../html/$var:lang/js/val.js ?>
<? include ../html/$var:lang/js/jsl.js ?>
//-----------------------------------------------------------------------------
var g_mldIpaddrFormatPre        = "Fehler im Feld ";
var g_mldIpaddrFormatPost       = " : die Eingabe ist keine gültige IP-Adresse.";
var g_mldNetmaskPost            = " : die eingegebene Subnetzmaske ist ungültig.";
var g_mldIpaddrTheNet           = " : dieser Wert stellt das Subnetz an sich dar und kann nicht verwendet werden.";
var g_mldIpaddrBroadcast        = " : dieser Wert stellt die Broadcast-Adresse in Ihrem Subnetz dar und kann nicht verwendet werden.";
var g_mldIpaddrDiffNet          = " : diese Adresse befindet sich in einem anderen Subnetz, als das durch die IP-Adresse und Netzmaske definierte.";
var g_mldNetmask0000            = "0.0.0.0 ist keine zulässige Subnetzmaske.";
var g_mldNetmask24                      = "Die kleinste zulässige Subnetzmaske ist 255.255.255.0.";
var g_mldNetwork                                = "Die Netzwerke dürfen sich nicht überschneiden.";
var g_isFon = "<? echo $var:isFon ?>";
var g_isWlan = "<? echo $var:isWlan ?>";
var g_isFBoxSL = "<? echo $var:isFBoxSL ?>";
var g_ProduktName = "<? echo $var:ProduktName ?>";
var g_secondWindow      = "Zweitfenster";
//-----------------------------------------------------------------------------
function uiDoOnLoad() {
jslCopyValue("uiViewIpaddr", "uiPostIpaddr0");
jslCopyValue("uiViewNetmask", "uiPostNetmask0");
jslSetChecked("uiViewDhcp", jslGetValue("uiPostDhcp0") == "1");
// FRITZBox hat zwei LAN Schnittstellen -> Aufteilen in LAN A (eth0) und LAN B (eth1)
jslDisplay("uiViewLANB", true);
SetSpanText("uiViewLabelA", "LAN A:");
SetSpanText("uiViewDhcpLabelA", "DHCP-Server an der Schnittstelle LAN A aktivieren");
jslCopyValue("uiViewIpaddrA", "uiPostIpaddr0");
jslCopyValue("uiViewNetmaskA", "uiPostNetmask0");
jslSetChecked("uiViewDhcpA", jslGetValue("uiPostDhcp0") == "1");
jslCopyValue("uiViewIpaddrB", "uiPostIpaddr1");
jslCopyValue("uiViewNetmaskB", "uiPostNetmask1");
jslSetChecked("uiViewDhcpB", jslGetValue("uiPostDhcp1") == "1");
jslCopyValue("uiViewIpaddrUSB", "uiPostIpaddrUSB");
jslCopyValue("uiViewNetmaskUSB", "uiPostNetmaskUSB");
jslSetChecked("uiViewDhcpUSB", jslGetValue("uiPostDhcpUSB") == "1");
<? if eq $var:isWlan 1 `
jslCopyValue("uiViewIpaddrWLAN", "uiPostIpaddrWLAN");
jslCopyValue("uiViewNetmaskWLAN", "uiPostNetmaskWLAN");
jslSetChecked("uiViewDhcpWLAN", jslGetValue("uiPostDhcpWLAN") == "1");
` ?>
OnChangeLanBridge()
}
//-----------------------------------------------------------------------------
function OnChangeLanBridge () {
var b = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
jslDisplay("uiViewGetrennt", !b);
jslDisplay("uiViewAlle", b);
}
//-----------------------------------------------------------------------------
function uiDoSave() {
if (DoValidate()==true) {
var AlleImNetz = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
if (AlleImNetz == true) {
jslCopyValue("uiPostIpaddr0","uiViewIpaddr");
jslCopyValue("uiPostNetmask0","uiViewNetmask");
SetFromChecked("uiPostDhcp0", "uiViewDhcp");
} else {
jslEnable("uiPostIpaddr1");
jslEnable("uiPostNetmask1");
jslEnable("uiPostDhcp1");
jslCopyValue("uiPostIpaddr0","uiViewIpaddrA");
jslCopyValue("uiPostNetmask0","uiViewNetmaskA");
SetFromChecked("uiPostDhcp0", "uiViewDhcpA");
jslCopyValue("uiPostIpaddr1","uiViewIpaddrB");
jslCopyValue("uiPostNetmask1","uiViewNetmaskB");
SetFromChecked("uiPostDhcp1", "uiViewDhcpB");
jslEnable("uiPostIpaddrUSB");
jslEnable("uiPostNetmaskUSB");
jslEnable("uiPostDhcpUSB");
jslCopyValue("uiPostIpaddrUSB","uiViewIpaddrUSB");
jslCopyValue("uiPostNetmaskUSB","uiViewNetmaskUSB");
SetFromChecked("uiPostDhcpUSB", "uiViewDhcpUSB");
<? if eq $var:isWlan 1 `
jslEnable("uiPostIpaddrWLAN");
jslEnable("uiPostNetmaskWLAN");
jslEnable("uiPostDhcpWLAN");
jslCopyValue("uiPostIpaddrWLAN","uiViewIpaddrWLAN");
jslCopyValue("uiPostNetmaskWLAN","uiViewNetmaskWLAN");
SetFromChecked("uiPostDhcpWLAN", "uiViewDhcpWLAN");
` ?>
}
doPopWindow();
jslSetValue("uiPostMenu", "system");
jslSetValue("uiPostPageName", "net");
jslSetValue("uiPostErrorPageName", "netipadr");
jslSetValue("uiPostPageTitle", "Netzwerkeinstellungen");
jslFormSubmit("uiPostForm");
}
}
//-----------------------------------------------------------------------------
function SetFromChecked (id, checkid) {
jslSetValue(id, jslGetChecked(checkid) ? "1":"0");
}
//-----------------------------------------------------------------------------
function uiDoCancel() {
jslGoTo("system", "net");
}
//-----------------------------------------------------------------------------
function uiDoHelp() {
jslGoTo("help", "hilfe_ipsetting");
}
//-----------------------------------------------------------------------------
function valIpadrFormatId (id) {
var addr = jslGetValue(id);
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
if (addr.match(pattern) == null) return false;
pattern.exec(addr);
if (RegExp.$1>255) return false;
if (RegExp.$2>255) return false;
if (RegExp.$3>255) return false;
if (RegExp.$4>255) return false;
return true;
}
//-----------------------------------------------------------------------------
var g_ErrIpOk           = 0;
var g_ErrIpDiffNet      = 1;
var g_ErrIpTheNet       = 2;
var g_ErrIpBroadcast    = 3;
//-----------------------------------------------------------------------------
function DecToBin(num) {
var ret = '';
for (var i=7; i>=0; i--) {
if (((1<<i)&num)!=0) ret+='1';
else ret+='0';
}
return ret;
}
//-----------------------------------------------------------------------------
function IpToBitstring(mask) {
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
var str = '';
pattern.exec(mask);
str+=DecToBin(RegExp.$1);
str+=DecToBin(RegExp.$2);
str+=DecToBin(RegExp.$3);
str+=DecToBin(RegExp.$4);
return str;
}
//-----------------------------------------------------------------------------
function valNetmaskId (id) {
var mask = jslGetValue(id);
var str = IpToBitstring(mask);
if (str.match(/^1+0+0$/) == null) return false;
return true;
}
//-----------------------------------------------------------------------------
function valNetmaskId_0000 (id) {
var mask = jslGetValue(id);
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
pattern.exec(mask);
return RegExp.$1 != 0 || RegExp.$2 != 0 || RegExp.$3 != 0 || RegExp.$4 != 0;
}
//-----------------------------------------------------------------------------
function valNetmaskId_24 (id) {
var mask = jslGetValue(id);
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
pattern.exec(mask);
return RegExp.$4 == 0;
}
//-----------------------------------------------------------------------------
function GetNetBits(addr,mask) {
var netstr = IpToBitstring(addr);
var maskstr = IpToBitstring(mask);
var len = maskstr.indexOf('0');
return netstr.substr(0,len);
}
//-----------------------------------------------------------------------------
function pppDoValidateIpaddr(addr,netbits) {
var addrstr = IpToBitstring(addr);
var netpart = addrstr.substr(0,netbits.length);
var mypart = addrstr.slice(netbits.length);
if (netpart!=netbits) return g_ErrIpDiffNet;
if (mypart.indexOf('1')==-1) return g_ErrIpTheNet;
if (mypart.indexOf('0')==-1) return g_ErrIpBroadcast;
return g_ErrIpOk;
}
//-----------------------------------------------------------------------------
function CheckNetworksId(ip1,mask1,ip2,mask2) {
return CheckNetworks(jslGetValue(ip1), jslGetValue(mask1), jslGetValue(ip2), jslGetValue(mask2));
}
//-----------------------------------------------------------------------------
function CheckNetworks(ip1,mask1,ip2,mask2) {
var net1 = GetNetBits(ip1,mask1);
var net2 = GetNetBits(ip2,mask2);
var len = Math.min(net1.length,net2.length);
return (net1.substr(0,len)!=net2.substr(0,len));
}
//-----------------------------------------------------------------------------
function DoValidate () {
var netbits = '';
var ret = g_ErrIpOk;
var AlleImNetz = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
if (AlleImNetz == true) {
if (valIpadrFormatId("uiViewIpaddr") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmask") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmask") == false) {alert(jslGetValue("uiViewNetmask")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmask") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmask") == false) {alert(g_mldNetmask24); return false;}
} else {
if (valIpadrFormatId("uiViewIpaddrA") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (LAN A)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskA") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (LAN A)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskA") == false) {alert(jslGetValue("uiViewNetmaskA")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskA") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskA") == false) {alert(g_mldNetmask24); return false;}
if (valIpadrFormatId("uiViewIpaddrB") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (LAN B)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskB") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (LAN B)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskB") == false) {alert(jslGetValue("uiViewNetmaskB")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskB") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskB") == false) {alert(g_mldNetmask24); return false;}
if (valIpadrFormatId("uiViewIpaddrUSB") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (USB)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskUSB") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (USB)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskUSB") == false) {alert(jslGetValue("uiViewNetmaskUSB")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskUSB") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskUSB") == false) {alert(g_mldNetmask24); return false;}
<? if eq $var:isWlan 1 `
if (valIpadrFormatId("uiViewIpaddrWLAN") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (WLAN)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskWLAN") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (WLAN)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskWLAN") == false) {alert(jslGetValue("uiViewNetmaskWLAN")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskWLAN") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskWLAN") == false) {alert(g_mldNetmask24); return false;}
` ?>
if (!CheckNetworksId("uiViewIpaddrA", "uiViewNetmaskA", "uiViewIpaddrB", "uiViewNetmaskB")) {alert(g_mldNetwork); return false;}
if (!CheckNetworksId("uiViewIpaddrA", "uiViewNetmaskA", "uiViewIpaddrUSB", "uiViewNetmaskUSB")) {alert(g_mldNetwork); return false;}
if (!CheckNetworksId("uiViewIpaddrB", "uiViewNetmaskB", "uiViewIpaddrUSB", "uiViewNetmaskUSB")) {alert(g_mldNetwork); return false;}
<? if eq $var:isWlan 1 `
if (!CheckNetworksId("uiViewIpaddrA", "uiViewNetmaskA", "uiViewIpaddrWLAN", "uiViewNetmaskWLAN")) {alert(g_mldNetwork); return false;}
if (!CheckNetworksId("uiViewIpaddrB", "uiViewNetmaskB", "uiViewIpaddrWLAN", "uiViewNetmaskWLAN")) {alert(g_mldNetwork); return false;}
` ?>
<? if eq $var:isWlan 1 `
if (!CheckNetworksId("uiViewIpaddrUSB", "uiViewNetmaskUSB", "uiViewIpaddrWLAN", "uiViewNetmaskWLAN")) {alert(g_mldNetwork); return false;}
` ?>
}
return true;
}
//-----------------------------------------------------------------------------
function doPopWindow() {
var params;
var AlleImNetz = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
if (AlleImNetz == true) {
params = "var:oneip=1&var:ipa="+jslGetValue("uiViewIpaddr")+"&var:maska="+jslGetValue("uiViewNetmask")+"&var:dhcpa="+jslGetValue("uiPostDhcp0");
} else {
params = "var:oneip=0&var:ipa="+jslGetValue("uiViewIpaddrA")+"&var:maska="+jslGetValue("uiViewNetmaskA")+"&var:dhcpa="+jslGetValue("uiPostDhcp0");
params += "&var:ipb="+jslGetValue("uiViewIpaddrB")+"&var:maskb="+jslGetValue("uiViewNetmaskB")+"&var:dhcpb="+jslGetValue("uiPostDhcp1");
params += "&var:ipusb="+jslGetValue("uiViewIpaddrUSB")+"&var:maskusb="+jslGetValue("uiViewNetmaskUSB")+"&var:dhcpusb="+jslGetValue("uiPostDhcpUSB");
<? if eq $var:isWlan 1 `
params += "&var:ipwlan="+jslGetValue("uiViewIpaddrWLAN")+"&var:maskwlan="+jslGetValue("uiViewNetmaskWLAN")+"&var:dhcpwlan="+jslGetValue("uiPostDhcpWLAN");
` ?>
}
var url = "../cgi-bin/webcm?getpage=../html/<?echo $var:lang ?>/system/pp_netipadr.html&"+params;
var ppWindow = window.open(url, g_secondWindow, "width=450,height=400,statusbar,resizable=yes");
ppWindow.focus();
}
//-----------------------------------------------------------------------------
</script>
 
Ich habe grad Zeit gehabt, mir die Sache etwas eindringlicher zu betrachten.
Ergebnis bisher: Ich habe den Eindruck, daß der Plausibilitätscheck nicht etwa durch Scripte, sondern durch den ctlmgr erfolgt. Daher ist es nicht trivial :( (außer, man kann diesem per Parameter gewünschtes beibringen)
Gruß Jens



wichard schrieb:
JensemannWF schrieb:
Möglicherweise in dieser: /usr/www/all/html/de/system/netipadr.js
Da ich aufgrund des noch nicht erschienenen Updates noch auf einer "ganz alten" FW-Version .65 unterwegs bin, kann ich im Moment nicht mehr machen, als einfach mal meine netipadr.js zum Vergleich zu posten. Vielleicht hilft das ja auch schon wem weiter...
Code:
<style type="text/css">
<!--
#Content {width: 520px; margin: auto;}
.Dhcpcheck {padding-top:8px;}
.pText25 {padding-left: 25px;}
.pCheck25 {
text-indent: -25px;
padding-left: 25px;
margin-bottom: 10px;
}
-->
</style>
<script type="text/JavaScript">
//-----------------------------------------------------------------------------
<? include ../html/$var:lang/js/val.js ?>
<? include ../html/$var:lang/js/jsl.js ?>
//-----------------------------------------------------------------------------
var g_mldIpaddrFormatPre        = "Fehler im Feld ";
var g_mldIpaddrFormatPost       = " : die Eingabe ist keine gültige IP-Adresse.";
var g_mldNetmaskPost            = " : die eingegebene Subnetzmaske ist ungültig.";
var g_mldIpaddrTheNet           = " : dieser Wert stellt das Subnetz an sich dar und kann nicht verwendet werden.";
var g_mldIpaddrBroadcast        = " : dieser Wert stellt die Broadcast-Adresse in Ihrem Subnetz dar und kann nicht verwendet werden.";
var g_mldIpaddrDiffNet          = " : diese Adresse befindet sich in einem anderen Subnetz, als das durch die IP-Adresse und Netzmaske definierte.";
var g_mldNetmask0000            = "0.0.0.0 ist keine zulässige Subnetzmaske.";
var g_mldNetmask24                      = "Die kleinste zulässige Subnetzmaske ist 255.255.255.0.";
var g_mldNetwork                                = "Die Netzwerke dürfen sich nicht überschneiden.";
var g_isFon = "<? echo $var:isFon ?>";
var g_isWlan = "<? echo $var:isWlan ?>";
var g_isFBoxSL = "<? echo $var:isFBoxSL ?>";
var g_ProduktName = "<? echo $var:ProduktName ?>";
var g_secondWindow      = "Zweitfenster";
//-----------------------------------------------------------------------------
function uiDoOnLoad() {
jslCopyValue("uiViewIpaddr", "uiPostIpaddr0");
jslCopyValue("uiViewNetmask", "uiPostNetmask0");
jslSetChecked("uiViewDhcp", jslGetValue("uiPostDhcp0") == "1");
// FRITZBox hat zwei LAN Schnittstellen -> Aufteilen in LAN A (eth0) und LAN B (eth1)
jslDisplay("uiViewLANB", true);
SetSpanText("uiViewLabelA", "LAN A:");
SetSpanText("uiViewDhcpLabelA", "DHCP-Server an der Schnittstelle LAN A aktivieren");
jslCopyValue("uiViewIpaddrA", "uiPostIpaddr0");
jslCopyValue("uiViewNetmaskA", "uiPostNetmask0");
jslSetChecked("uiViewDhcpA", jslGetValue("uiPostDhcp0") == "1");
jslCopyValue("uiViewIpaddrB", "uiPostIpaddr1");
jslCopyValue("uiViewNetmaskB", "uiPostNetmask1");
jslSetChecked("uiViewDhcpB", jslGetValue("uiPostDhcp1") == "1");
jslCopyValue("uiViewIpaddrUSB", "uiPostIpaddrUSB");
jslCopyValue("uiViewNetmaskUSB", "uiPostNetmaskUSB");
jslSetChecked("uiViewDhcpUSB", jslGetValue("uiPostDhcpUSB") == "1");
<? if eq $var:isWlan 1 `
jslCopyValue("uiViewIpaddrWLAN", "uiPostIpaddrWLAN");
jslCopyValue("uiViewNetmaskWLAN", "uiPostNetmaskWLAN");
jslSetChecked("uiViewDhcpWLAN", jslGetValue("uiPostDhcpWLAN") == "1");
` ?>
OnChangeLanBridge()
}
//-----------------------------------------------------------------------------
function OnChangeLanBridge () {
var b = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
jslDisplay("uiViewGetrennt", !b);
jslDisplay("uiViewAlle", b);
}
//-----------------------------------------------------------------------------
function uiDoSave() {
if (DoValidate()==true) {
var AlleImNetz = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
if (AlleImNetz == true) {
jslCopyValue("uiPostIpaddr0","uiViewIpaddr");
jslCopyValue("uiPostNetmask0","uiViewNetmask");
SetFromChecked("uiPostDhcp0", "uiViewDhcp");
} else {
jslEnable("uiPostIpaddr1");
jslEnable("uiPostNetmask1");
jslEnable("uiPostDhcp1");
jslCopyValue("uiPostIpaddr0","uiViewIpaddrA");
jslCopyValue("uiPostNetmask0","uiViewNetmaskA");
SetFromChecked("uiPostDhcp0", "uiViewDhcpA");
jslCopyValue("uiPostIpaddr1","uiViewIpaddrB");
jslCopyValue("uiPostNetmask1","uiViewNetmaskB");
SetFromChecked("uiPostDhcp1", "uiViewDhcpB");
jslEnable("uiPostIpaddrUSB");
jslEnable("uiPostNetmaskUSB");
jslEnable("uiPostDhcpUSB");
jslCopyValue("uiPostIpaddrUSB","uiViewIpaddrUSB");
jslCopyValue("uiPostNetmaskUSB","uiViewNetmaskUSB");
SetFromChecked("uiPostDhcpUSB", "uiViewDhcpUSB");
<? if eq $var:isWlan 1 `
jslEnable("uiPostIpaddrWLAN");
jslEnable("uiPostNetmaskWLAN");
jslEnable("uiPostDhcpWLAN");
jslCopyValue("uiPostIpaddrWLAN","uiViewIpaddrWLAN");
jslCopyValue("uiPostNetmaskWLAN","uiViewNetmaskWLAN");
SetFromChecked("uiPostDhcpWLAN", "uiViewDhcpWLAN");
` ?>
}
doPopWindow();
jslSetValue("uiPostMenu", "system");
jslSetValue("uiPostPageName", "net");
jslSetValue("uiPostErrorPageName", "netipadr");
jslSetValue("uiPostPageTitle", "Netzwerkeinstellungen");
jslFormSubmit("uiPostForm");
}
}
//-----------------------------------------------------------------------------
function SetFromChecked (id, checkid) {
jslSetValue(id, jslGetChecked(checkid) ? "1":"0");
}
//-----------------------------------------------------------------------------
function uiDoCancel() {
jslGoTo("system", "net");
}
//-----------------------------------------------------------------------------
function uiDoHelp() {
jslGoTo("help", "hilfe_ipsetting");
}
//-----------------------------------------------------------------------------
function valIpadrFormatId (id) {
var addr = jslGetValue(id);
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
if (addr.match(pattern) == null) return false;
pattern.exec(addr);
if (RegExp.$1>255) return false;
if (RegExp.$2>255) return false;
if (RegExp.$3>255) return false;
if (RegExp.$4>255) return false;
return true;
}
//-----------------------------------------------------------------------------
var g_ErrIpOk           = 0;
var g_ErrIpDiffNet      = 1;
var g_ErrIpTheNet       = 2;
var g_ErrIpBroadcast    = 3;
//-----------------------------------------------------------------------------
function DecToBin(num) {
var ret = '';
for (var i=7; i>=0; i--) {
if (((1<<i)&num)!=0) ret+='1';
else ret+='0';
}
return ret;
}
//-----------------------------------------------------------------------------
function IpToBitstring(mask) {
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
var str = '';
pattern.exec(mask);
str+=DecToBin(RegExp.$1);
str+=DecToBin(RegExp.$2);
str+=DecToBin(RegExp.$3);
str+=DecToBin(RegExp.$4);
return str;
}
//-----------------------------------------------------------------------------
function valNetmaskId (id) {
var mask = jslGetValue(id);
var str = IpToBitstring(mask);
if (str.match(/^1+0+0$/) == null) return false;
return true;
}
//-----------------------------------------------------------------------------
function valNetmaskId_0000 (id) {
var mask = jslGetValue(id);
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
pattern.exec(mask);
return RegExp.$1 != 0 || RegExp.$2 != 0 || RegExp.$3 != 0 || RegExp.$4 != 0;
}
//-----------------------------------------------------------------------------
function valNetmaskId_24 (id) {
var mask = jslGetValue(id);
var pattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
pattern.exec(mask);
return RegExp.$4 == 0;
}
//-----------------------------------------------------------------------------
function GetNetBits(addr,mask) {
var netstr = IpToBitstring(addr);
var maskstr = IpToBitstring(mask);
var len = maskstr.indexOf('0');
return netstr.substr(0,len);
}
//-----------------------------------------------------------------------------
function pppDoValidateIpaddr(addr,netbits) {
var addrstr = IpToBitstring(addr);
var netpart = addrstr.substr(0,netbits.length);
var mypart = addrstr.slice(netbits.length);
if (netpart!=netbits) return g_ErrIpDiffNet;
if (mypart.indexOf('1')==-1) return g_ErrIpTheNet;
if (mypart.indexOf('0')==-1) return g_ErrIpBroadcast;
return g_ErrIpOk;
}
//-----------------------------------------------------------------------------
function CheckNetworksId(ip1,mask1,ip2,mask2) {
return CheckNetworks(jslGetValue(ip1), jslGetValue(mask1), jslGetValue(ip2), jslGetValue(mask2));
}
//-----------------------------------------------------------------------------
function CheckNetworks(ip1,mask1,ip2,mask2) {
var net1 = GetNetBits(ip1,mask1);
var net2 = GetNetBits(ip2,mask2);
var len = Math.min(net1.length,net2.length);
return (net1.substr(0,len)!=net2.substr(0,len));
}
//-----------------------------------------------------------------------------
function DoValidate () {
var netbits = '';
var ret = g_ErrIpOk;
var AlleImNetz = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
if (AlleImNetz == true) {
if (valIpadrFormatId("uiViewIpaddr") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmask") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmask") == false) {alert(jslGetValue("uiViewNetmask")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmask") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmask") == false) {alert(g_mldNetmask24); return false;}
} else {
if (valIpadrFormatId("uiViewIpaddrA") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (LAN A)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskA") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (LAN A)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskA") == false) {alert(jslGetValue("uiViewNetmaskA")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskA") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskA") == false) {alert(g_mldNetmask24); return false;}
if (valIpadrFormatId("uiViewIpaddrB") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (LAN B)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskB") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (LAN B)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskB") == false) {alert(jslGetValue("uiViewNetmaskB")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskB") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskB") == false) {alert(g_mldNetmask24); return false;}
if (valIpadrFormatId("uiViewIpaddrUSB") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (USB)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskUSB") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (USB)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskUSB") == false) {alert(jslGetValue("uiViewNetmaskUSB")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskUSB") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskUSB") == false) {alert(g_mldNetmask24); return false;}
<? if eq $var:isWlan 1 `
if (valIpadrFormatId("uiViewIpaddrWLAN") == false) {alert(g_mldIpaddrFormatPre+"IP-Adresse (WLAN)"+g_mldIpaddrFormatPost); return false;}
if (valIpadrFormatId("uiViewNetmaskWLAN") == false) {alert(g_mldIpaddrFormatPre+"Netzmaske (WLAN)"+g_mldNetmaskPost); return false;}
if (valNetmaskId("uiViewNetmaskWLAN") == false) {alert(jslGetValue("uiViewNetmaskWLAN")+g_mldNetmaskPost); return false;}
if (valNetmaskId_0000("uiViewNetmaskWLAN") == false) {alert(g_mldNetmask0000); return false;}
if (valNetmaskId_24("uiViewNetmaskWLAN") == false) {alert(g_mldNetmask24); return false;}
` ?>
if (!CheckNetworksId("uiViewIpaddrA", "uiViewNetmaskA", "uiViewIpaddrB", "uiViewNetmaskB")) {alert(g_mldNetwork); return false;}
if (!CheckNetworksId("uiViewIpaddrA", "uiViewNetmaskA", "uiViewIpaddrUSB", "uiViewNetmaskUSB")) {alert(g_mldNetwork); return false;}
if (!CheckNetworksId("uiViewIpaddrB", "uiViewNetmaskB", "uiViewIpaddrUSB", "uiViewNetmaskUSB")) {alert(g_mldNetwork); return false;}
<? if eq $var:isWlan 1 `
if (!CheckNetworksId("uiViewIpaddrA", "uiViewNetmaskA", "uiViewIpaddrWLAN", "uiViewNetmaskWLAN")) {alert(g_mldNetwork); return false;}
if (!CheckNetworksId("uiViewIpaddrB", "uiViewNetmaskB", "uiViewIpaddrWLAN", "uiViewNetmaskWLAN")) {alert(g_mldNetwork); return false;}
` ?>
<? if eq $var:isWlan 1 `
if (!CheckNetworksId("uiViewIpaddrUSB", "uiViewNetmaskUSB", "uiViewIpaddrWLAN", "uiViewNetmaskWLAN")) {alert(g_mldNetwork); return false;}
` ?>
}
return true;
}
//-----------------------------------------------------------------------------
function doPopWindow() {
var params;
var AlleImNetz = <? if eq $var:isDsl 1 'jslGetChecked("uiViewLanBridge")' 'true' ?>;
if (AlleImNetz == true) {
params = "var:oneip=1&var:ipa="+jslGetValue("uiViewIpaddr")+"&var:maska="+jslGetValue("uiViewNetmask")+"&var:dhcpa="+jslGetValue("uiPostDhcp0");
} else {
params = "var:oneip=0&var:ipa="+jslGetValue("uiViewIpaddrA")+"&var:maska="+jslGetValue("uiViewNetmaskA")+"&var:dhcpa="+jslGetValue("uiPostDhcp0");
params += "&var:ipb="+jslGetValue("uiViewIpaddrB")+"&var:maskb="+jslGetValue("uiViewNetmaskB")+"&var:dhcpb="+jslGetValue("uiPostDhcp1");
params += "&var:ipusb="+jslGetValue("uiViewIpaddrUSB")+"&var:maskusb="+jslGetValue("uiViewNetmaskUSB")+"&var:dhcpusb="+jslGetValue("uiPostDhcpUSB");
<? if eq $var:isWlan 1 `
params += "&var:ipwlan="+jslGetValue("uiViewIpaddrWLAN")+"&var:maskwlan="+jslGetValue("uiViewNetmaskWLAN")+"&var:dhcpwlan="+jslGetValue("uiPostDhcpWLAN");
` ?>
}
var url = "../cgi-bin/webcm?getpage=../html/<?echo $var:lang ?>/system/pp_netipadr.html&"+params;
var ppWindow = window.open(url, g_secondWindow, "width=450,height=400,statusbar,resizable=yes");
ppWindow.focus();
}
//-----------------------------------------------------------------------------
</script>
 
Ich habe auf meiner F!B noch von einer älteren Firmware her eine Weiterleitung von ext. Port xy auf 192.168.179.1:80. Das funktioniert auch weiterhin!
Deshalb die Frage: ist es für die neue Firmware nicht einfacher, dieses Portforwarding einfach mit dem FBEditor vorzunehmen, anstatt großartig in irgendwelchen Scripten rumzufummeln? Man kann diesen Port zwar weiterhin nicht von der GUI aus bearbeiten, aber das macht man ja sowieso nicht jeden Tag, oder?
 
Im Prinzip schon richtig; ABER nur wenn man über das GUI die jeweilige Regel aktivieren oder deaktivieren kann, ohne daß es zu Fehlermeldungen kommt, kann man dies auch per Script über http-Post Methode.
Sinn der Sache ist, daß nur bei Anruf per z.B. Handy in Verbindung mit dem Callmanger (mod4.27a) kurzfristig (30sec) ein Forwarding (auf dropbear) aktiv ist.

Sonst ist die Box halt schön zu.

Leider scheint die Prüfung des ctlmgr in der .88 sehr streng zu sein, so daß diese Feature nicht mehr klappt. Daher muss ich mich derzeit mit der .86 vergnügen, bis jemand eine Trick gefunden hat ;)

Gruß jens

Novize schrieb:
Ich habe auf meiner F!B noch von einer älteren Firmware her eine Weiterleitung von ext. Port xy auf 192.168.179.1:80. Das funktioniert auch weiterhin!
Deshalb die Frage: ist es für die neue Firmware nicht einfacher, dieses Portforwarding einfach mit dem FBEditor vorzunehmen, anstatt großartig in irgendwelchen Scripten rumzufummeln? Man kann diesen Port zwar weiterhin nicht von der GUI aus bearbeiten, aber das macht man ja sowieso nicht jeden Tag, oder?
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.