Kabel Deutschland + PFSense + neue IP nach Neustart oder "Renew"



  • Hey liebes forum

    also ich war auf der Suche wie ich bei Kabel Deutschland meine IP Adresse wechseln kann ohne dass ich das Modem immer über Nacht vom Strom nehmen musste damit ich eine neue IP bekahm, hier meine Lösung dank eines genialen Tip's http://forum.pfsense.org/index.php/topic,21523.0.html aus dem PFSense Forum.

    mein Equitment sieht wie folgt aus:

    Thompson THG540K Kabel Modem
    LaptopRouter Pfsense v. 1.2.3  1xLAN 1xWAN 1xWLAN
    Komputer + DAU der eine neue IP möchte

    los gehts:

    erstmal gehen wir im Menu von der Sense auf DIAGNOSTICS->EDIT FILE

    bei Save/Load from path:

    /etc/inc/interfaces.inc

    einfügen  und auf "LOAD" klicken

    jetzt suchen wir die stelle wo das LAN Interface behandelt wird:

    
    /* MAC spoofing? */
       if ($lancfg['spoofmac']) {
          mwexec("/sbin/ifconfig " . escapeshellarg($lancfg['if']) .
             " link " . escapeshellarg($lancfg['spoofmac']));
       } else {
          $mac = get_interface_mac_address($lancfg['if']);
          if($mac == "ff:ff:ff:ff:ff:ff") {
             /*   this is not a valid mac address.  generate a
              *   temporary mac address so the machine can get online.
              */
             echo "Generating new MAC address.";
             $random_mac = generate_random_mac_address();
             mwexec("/sbin/ifconfig " . escapeshellarg($lancfg['if']) .
                " link " . escapeshellarg($random_mac));
             $lancfg['spoofmac'] = $random_mac;
             write_config();
             file_notice("MAC Address altered", "The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface {$lancfg['if']} has been automatically replaced with {$random_mac}", "Interfaces");
          }
       }
    
    

    dort wo die MAC adresse des LAN interfaces eingetragen ist wie in diesem Beispiel, also:
    ff:ff:ff:ff:ff:ff durch die MAC ersetzten:

    if($mac == "00:2a:e8:aa:11:5b") {
    

    und

    file_notice("MAC Address altered", "The INVALID MAC address (00:2a:e8:aa:11:5b) on interface {$lancfg['if']} has been automatically replaced with
    

    und schreiben dort die MAC des LAN Interfaces rein , (die MAC bekommt man über STATUS->INTERFACES des sensen menu's)

    so damit hätten wir schon mal das LAN Interface ready was nun bei jedem Neustart der Sense eine neue zufällige MAC Adresse bekommt.
    Das gleiche wollen wir auch mit dem WAN Interface machen also weiter gehts mit dem WAN Interface :D

    nun suchen wir weiter unten im Script nach:

    	/* wireless configuration? */
    	if (is_array($wancfg['wireless']))
    		interfaces_wireless_configure($wancfg['if'], $wancfg['wireless']);
    
    	if ($wancfg['spoofmac']) {
    		mwexec("/sbin/ifconfig " . escapeshellarg($wancfg['if']) .
    			" link " . escapeshellarg($wancfg['spoofmac']));
    	}  else {
    		$mac = get_interface_mac_address($wancfg['if']);
    		if($mac == "ff:ff:ff:ff:ff:ff") {
    			/*   this is not a valid mac address.  generate a
    			 *   temporary mac address so the machine can get online.
    			 */
    			echo "Generating new MAC address.";
    			$random_mac = generate_random_mac_address();
    			mwexec("/sbin/ifconfig " . escapeshellarg($wancfg['if']) .
    				" link " . escapeshellarg($random_mac));
    			$wancfg['spoofmac'] = $random_mac;
    			write_config();
    			file_notice("MAC Address altered", "The INVALID MAC address (ff:ff:ff:ff:ff:ff) on interface {$wancfg['if']} has been automatically replaced with {$random_mac}", "Interfaces");
    		}
    	}
    
    

    und ersetzen dort die beiden MAC Adressen ff:ff:ff:ff:ff:ff mit der MAC Adresse des WAN Interfaces

    if($mac == "01:1c:b6:ea:14:9c") {
    

    und

    file_notice("MAC Address altered", "The INVALID MAC address (01:1c:b6:ea:14:9c) on interface {$wancfg['if']} has been automatically
    

    danach speichern wir das ganz mit einem Klick auf 
    Save/Load from path: /etc/inc/interfaces.inc "SAVE"

    Das wär erstmal soweit der erste Schritt, damit das LAN und WAN Interface bei jedem Neustart der Sense eine neue MAC bekommt. …wunderbar :D

    Blöder Weise bekomme ich keine IP Adresse mehr am WAN Interface zugewiesen, nach dem neustart der Sense ..hhm, erst wenn ich das Modem neustarte scheint es zu gehen... also brauchen wir noch eine kleine Lösung das die Sense auch das Modem neustartet wenn ich die Sense neustarte.
    Denke das sollte curl erledigen für uns, dafür müssen wir aber noch die /usr/local/www/reboot.php modifizieren

    wir gehen wieder ins Webinterface der Sense, klicken auf DIAGNOSTICS->EDIT FILE

    geben bei
    Save/Load from path: /usr/local/www/reboot.php
    ein und klicken auf "LOAD" , suchen uns fast am ende der Datei folgende stelle:

    $rebootmsg = "The system is rebooting now. This may take one minute.";
    

    und schreiben darunter unter dieser zeile:

    $output = shell_exec('curl -b cookies.txt -c cookies.txt -m 10 -d "mCmInfoDsFreq1=xx&mCmInfoUsId1=xx" "http://192.168.100.1/goform/InitialScan"');
    

    was dann fertig so aussehen sollte:

    
    if ($_POST) {
    	if ($_POST['Submit'] == " Yes ") {
    		echo "";
    		system_reboot();
    		$rebootmsg = "The system is rebooting now. This may take one minute.";
                    $output = shell_exec('route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.1.1');
                    $output = shell_exec('curl -b cookies.txt -c cookies.txt -m 10 -d "mCmInfoDsFreq1=xx&mCmInfoUsId1=xx" "http://192.168.100.1/goform/InitialScan"');
    
    	} else {
    		exit;
    	}
    }
    ?>
    
    

    Bloss zu doof das standarmaßig gar kein curl verfügbar ist :( also müssen wir es noch schnell nachinstallieren freu

    im Webinterface klicken auf DIAGNOSTICS->COMMAND
    dann geben wir folgendes ein unter:

    Execute Shell command
        Command:  pkg_add -r curl

    und klicken auf "EXECUTE" , einmal tief Luft hohlen und curl sollte dann installiert sein :D

    Wenn wir jetzt auf DIAGNOSTICS->REBOOT SYSTEM klicken und dann noch auf YES sollte sich das Modem neustarten und die Sense auch, danach sollte man eine neue IP-Adresse haben

    vielleich ist ja jemand so gut/hat das wissen ein kleines package zu basteln :D

    gruss ren22



  • PART II

    mir war das rebooten immer zu lästig und wollte am besten ne neue IP bekommen wenn ich unter STATUS>INTERFACES [Release]  button klicke, also hab ich mir gedacht ich probiert das mal anders und beiraus kahm nun folgende Konstallation:

    ich gehe davon aus das alles wie bereits oben beschrieben sich vorfindet.

    wir gehen wieder ins Webinterface der Sense, klicken auf DIAGNOSTICS->EDIT FILE
    udn geben bei
    Save/Load from path: /usr/local/www/status_interfaces.php
    ein und klicken auf "LOAD" , suchen uns folgende stelle:

    und navigieren zu zeile 39:

    und ersetzen folgengen code mit dem alten von zeile 39 bis 73

    if ($_POST) {
    	$interface = $_POST['interface'];
    	$ifcfg = &$config['interfaces'][$interface];
    	if ($_POST['submit'] == "Disconnect" || $_POST['submit'] == "Release") {
    $output = shell_exec('curl -b cookies.txt -c cookies.txt -m 10 -d "mCmInfoDsFreq1=xx&mCmInfoUsId1=xx" "http://192.168.100.1/goform/InitialScan"');		
    function warten(){
    echo "  Bitte warten ";
    $text = ".";
    for ($i=0; $i<120; $i++) {
         echo $text."\n";
         usleep(500000);
        }
    }
    if ($ifcfg['ipaddr'] == "dhcp")
    			interfaces_dhcp_down($interface);
    		if ($ifcfg['ipaddr'] == "dhcp")
                warten();
    		else if ($ifcfg['ipaddr'] == "pppoe")
    			interfaces_wan_pppoe_down(); // FIXME: when we support multi-pppoe
    		else if ($ifcfg['ipaddr'] == "pptp")
    			interfaces_wan_pptp_down(); // FIXME: when we support multi-pptp
    	} else if ($_POST['submit'] == "Connect" || $_POST['submit'] == "Renew") {
    		if ($ifcfg['ipaddr'] == "dhcp")
                interfaces_wan_configure();
            else if ($ifcfg['ipaddr'] == "dhcp")
    			interfaces_dhcp_up($interface);
    		else if ($ifcfg['ipaddr'] == "pppoe")
    			interfaces_wan_pppoe_up(); // FIXME: when we support multi-pppoe
    		else if ($ifcfg['ipaddr'] == "pptp")
    			interfaces_wan_pptp_up(); // FIXME: when we support multi-pptp
    	} else {
    		header("Location: index.php");
    		exit;
    	}
    }
    
    

    dann speichern nicht vergessen.

    damit hätten wir erstmal, dass wenn wir auf den button [Release] unter STATUS>INTERFACES klicken das sich das
    (1)modem neustartet
    (2)das WAN Interface …

    ... "down" , also wir schalten hier WAN ab
    ... "warten"  wir warten ca 45 sekunden bis die "Web-Interface" Seite neugeladen wird, da ungefähr auch solange das Modem braucht bis es fertig ist.

    wenn wir dann auf [Renew] klicken bekommen wir:
    … "configure", wir konfigurieren das interface neu durch die funktion interfaces_wan_configure()  was in der datei /etc/inc/interfaces.inc definiert wird

    so nun weiter mit dem editieren der datei /etc/inc/interfaces.inc

    also wieder unter:
    wir gehen wieder ins Webinterface der Sense, klicken auf DIAGNOSTICS->EDIT FILE
    udn geben bei
    Save/Load from path: /etc/inc/interfaces.inc
    ein und klicken auf "LOAD" , suchen uns fast am ende der Datei folgende stelle:

    und gehn zu zeile  bei mir ist es 813

    vor zeile 813 wird die MAC des WAN interfaces ermittelt
    $mac = get_interface_mac_address($wancfg['if']);

    und ersetzen die zeile mit

    if($mac == $mac) {
    

    sollte fertig so ausssehn

    	if ($wancfg['spoofmac']) {
    		mwexec("/sbin/ifconfig " . escapeshellarg($wancfg['if']) .
    			" link " . escapeshellarg($wancfg['spoofmac']));
    	}  else {
    
                    $mac = get_interface_mac_address($wancfg['if']);
    		if($mac == $mac) {
    			/*   this is not a valid mac address.  generate a
    			 *   temporary mac address so the machine can get online.
    			 */
    			echo "Generating new MAC address.";
    			$random_mac = generate_random_mac_address();
    			mwexec("/sbin/ifconfig " . escapeshellarg($wancfg['if']) .
    				" link " . escapeshellarg($random_mac));
    			$wancfg['spoofmac'] = $random_mac;
    			write_config();
    			file_notice("MAC Address altered", "The INVALID MAC address (33:22:11:cc:bb:aa) on interface {$wancfg['if']} has been automatically replaced with {$random_mac}", "Interfaces");
    		}
    	}
    

    ebenfalls speichern nicht vergessen.

    so fertig!
    das hat mich jetzt den ganzen nachmittag gekostet :P

    gruss ren22



  • Vielen Dank  :D hast mir viel Mühe erspart  ;)



  • so da ich immer zu faul bin alles von hand zu machen nachdem ich mal wieder die sense neu aufgesetzt habe, habe ich mir ein script gebastelt was die arbeit für mich erledigt ,

    ihr müsste lediglich eure echte MAC des WAN interfaces in dem script eintragen unter zeile 19
    und ausführen.

    #!/bin/sh
    ## ren22 08.07.11  ..NO WARRANTY OF USAGE!!! USAGE AT YOUR OWN RISK!!! 
    ## die original MAC des WAN Interfaces eintragen bei Zeile 19 !!!
    ##getested unter pfSense 2.0-RC3 1g nanobsd "embebbed"
    ##2.0-RC3 (i386) 
    ##built on Tue Jun 21 18:21:10 EDT 2011 
    ##nanobsd (1g) 
    ##
    ##erstelle WAN MAC patch datei
    /bin/echo 'erstelle WAN MAC patch datei'
    #
    echo '--- /etc/inc/interfaces.inc	2011-07-06 20:52:28.000000000 +0000'> /tmp/wanif.patch
    echo '+++ /etc/inc/interfaces.inc.gepatched	2011-07-06 19:54:25.000000000 +0000'>> /tmp/wanif.patch
    echo '@@ -2596,7 +2596,7 @@'>> /tmp/wanif.patch
    echo '                 }'>> /tmp/wanif.patch
    echo ' 	}  else {'>> /tmp/wanif.patch
    echo ' 		$mac = get_interface_mac($realhwif);'>> /tmp/wanif.patch
    echo '-		if ($mac == "ff:ff:ff:ff:ff:ff") {'>> /tmp/wanif.patch
    echo '+		if ($mac == "nn:hh:tt:xx:yy:zz") {'>> /tmp/wanif.patch
    echo ' 			/*   this is not a valid mac address.  generate a'>> /tmp/wanif.patch
    echo ' 			 *   temporary mac address so the machine can get online.'>> /tmp/wanif.patch
    echo ' 			 */'>> /tmp/wanif.patch
    echo "patche interfaces.inc"
    patch < /tmp/wanif.patch /etc/inc/interfaces.inc
    ##
    ##erstelle phpreboot patch datei
    /bin/echo 'erstelle REBOOT PHP patch datei'
    echo '--- /usr/local/www/reboot.php	2011-07-06 19:51:50.000000000 +0000'> /tmp/rebootphp.patch
    echo '+++ /usr/local/www/reboot.php.gepatched	2011-07-06 19:53:39.000000000 +0000'>> /tmp/rebootphp.patch
    echo '@@ -67,6 +67,9 @@'>> /tmp/rebootphp.patch
    echo ' 		echo "";'>> /tmp/rebootphp.patch
    echo ' 		system_reboot();'>> /tmp/rebootphp.patch
    echo ' 		$rebootmsg = gettext("The system is rebooting now. This may take one minute.");'>> /tmp/rebootphp.patch
    echo '+                $output = shell_exec('\'route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.1.1\'');'>> /tmp/rebootphp.patch
    echo '+                $output = shell_exec('\'curl -b cookies.txt -c cookies.txt -m 10 -d \"mCmInfoDsFreq1=xx\&mCmInfoUsId1=xx\" \"http\:\/\/192.168.100.1/goform/InitialScan\"\'');'>> /tmp/rebootphp.patch
    echo '+'>> /tmp/rebootphp.patch
    echo ' 	} else {'>> /tmp/rebootphp.patch
    echo ' 		exit;'>> /tmp/rebootphp.patch
    echo ' 	}'>> /tmp/rebootphp.patch
    echo "patche reboot.php"
    patch < /tmp/rebootphp.patch /usr/local/www/reboot.php
    #echo "Fertig."
    
    if [ -z "`pkg_info | grep '^curl'`" ]; then
        echo "    installing curl"
        pkg_add -r curl
    else
        echo "curl bereits installiert!"
    fi
    
    echo "Fertig! :)"
    

    das ganze pack ihr in eine .sh "shell" datei und geht im web interface menu auf "DIAGNOSTICS->COMMAND PROMPT" ,
    dort unter "UPLOAD" das script uploaden, was nach /tmp geuploaded wird.
    jetzt führen wir was ganze aus unter "EXECUTE SHELL COMMAND" , dor tippen wir ein:

    sh /tmp/meindatei.sh

    und dann auf "EXECUTE" klicken…

    warten wir ein wenig falls curl nicht installiert ist bis wir eine rückmeldung bekommen "Fertig :)"  sollte wenn alles orgnungsgemäß ablief erscheinen.
    nun können wir wie oben beschrieben unter reboot das modem neustarten und die sense im eine neue ip bei dem kabel deutschland provider zubekommen.

    grüsse ren22

    rndwan.sh.txt


Locked