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öchtelos 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 :Dnun 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 modifizierenwir 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 curlund 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 wirdso 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 :Pgruss 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