I need basic PPPoE startup help. adsl-start DID bring up my PPPoE link (ppp0) to my ISP over eth0 via the DSL modem/bridge. My IPv4 CIDR block is routing and Shorewall is doing the firewalling. But shorewall has to be started after ppp0 is up and working. For now this means running shorewall restart (or start?). Shorewall 4.2 will have a way to restart shorewall without recompiling, I learned on the their list. In /etc/sysconfig/network-scripts/ifcfg-ppp0 I have: BOOTPROTO=dialup NAME=DSLppp0 DEVICE=ppp0 TYPE=xDSL ONBOOT=no Should ONBOOT be changed to yes, or is there some startup script that I should add the /sbin/adsl-start ppp0 command line followed with the shorewall restart command? I am away at IEEE 802 plenary meeting next week, and I need this to be automated in case of system glitches. Also sometimes the Speedstream just stops forwarding datagrams. Supposedly if it overheats. This requires a power recycle for the speedstream (and my ISP will not use anything else for the modem services). I suspect this will glich the PPPoE connection as well, so I will need some sort of watchdog and a restart of ppp0 and Shorewall. Attached is a rather large script of a user that I picked up on the Shorewall list for some Linux distro. I am NOT a script reader, let alone writer. Should I use this (how would I modify it for Centos and a ppp0 interface) and where would I place it to run as needed? ======================================================= #!/usr/bin/perl -w #THIS SCRIPT CREATED BY EJM (alias Erik Mundall) IN ORDER TO MAINTAIN A CONSTANT CONNECTION WITH THE TWO #PPPOE ADSL LINES WHICH HAVE PROVEN TO BE UNRELIABLE/UNSTABLE. 15 APRIL 2008 # #THIS PROGRAM NEEDS TO FOLLOW THE FOLLOWING ROUTINE IN ORDER TO MAINTAIN CONNECTIVITY OF THE TWO PPPOE LINES #AND TO SHARE THE INTERNET LOAD ACROSS THOSE AND ACROSS THE STATIC LINE # #THE STATIC SHOULD NEVER FAIL. THIS SCRIPT IS INTENDED TO ADDRESS ONLY THE INSTABILITY OF THE TWO PPPOE #LINES, AND WILL DO NOTHING FOR THE STATIC LINE IF IT SHOULD FAIL. # # #STEP ONE: THE PROGRAM SHOULD IDENTIFY THE LINE(S) THAT ARE DOWN, IF ANY, AND ISOLATE THEM. #STEP TWO: THE PROGRAM SHOULD RECONFIGURE AND RESTART SHOREWALL TO MATCH THE LINES THAT ARE UP. #STEP THREE: THE PROGRAM SHOULD FOCUS ON RESTORING THE DROPPED PPPOE LINE(S). #STEP FOUR: THE PROGRAM MUST REPEAT STEP TWO ONCE STEP THREE HAS SUCCEEDED. ############################################### # REQUIRED VARIABLES. THESE MUST BE SET PROPERLY!!! our $admin_email =q`your_email_address at your_domain_name.com`; our $domain_name = "your_domain_name.com"; our $GATEWAY_1 = 'x.x.x.x'; #GATEWAY OF PPP0 LINE our $GATEWAY_2 = 'x.x.x.x'; #GATEWAY OF PPP1 LINE our $IPADDRESS_1 = 'x.x.x.x'; #STATIC IP ADDRESS OF PPP0 LINE (ASSIGNED BY ISP) our $IPADDRESS_2 = 'x.x.x.x'; #STATIC IP ADDRESS OF PPP1 LINE (ASSIGNED BY ISP) our $DEBUG=1; #SET THIS TO 1 FOR DEBUGGING, 0 TO TURN DEBUGGING OFF our $DEBFILE='/var/log/ppp/debug.log'; #THE /var/log/ppp DIRECTORY MUST EXIST FOR THE DEBUG FILE our $logfile='/var/log/ppp/maint.log'; #THE /var/log/ppp DIRECTORY MUST EXIST FOR LOGGING. ############################################### # BELOW THIS LINE, NOTHING MORE SHOULD NEED TO BE CONFIGURED. our @ifconf = (); our @iprout = `/sbin/ip route`; our $p1; our $p2; our $ppp0=0; our $ppp1=0; our $FAILED='FALSE'; our $FAIL='TRUE'; our $attempt=0; our $date=''; our @data=(); our @updata=(); our @log=(); our @total_log=(); our $cur_day=0; our $cur_month=0; our $cur_year=0; our $late_day=0; our $late_month=0; our $late_year=0; our %months=(Jan,1,Feb,2,Mar,3,Apr,4,May,5,Jun,6,Jul,7,Aug,8,Sep,9,Oct,10,Nov,11,Dec,12); our $start_time=`/bin/date`; our $stop_time; ############################################# ### SAFEGUARD AGAINST MULTIPLE PROCESSES! ### ############################################# our @pslist = `/bin/ps auxw`; our $line=''; our $scripts=0; foreach $line(@pslist) { if ($line=~s/(ppp-line-maintenance\.pl)/$1/) { #THIS SCRIPT MUST NOT BE RENAMED, OR IF IT IS, THIS LINE MUST BE ADJUSTED ACCORDINGLY!!!! $scripts++; if ($DEBUG==1) {print "Line:$line\nScripts:$scripts\n" }; }; }; if ($scripts<=2) { #CONTINUE THIS SCRIPT IF ONLY ONE OCCURRENCE (THIS ONE) OF THIS SCRIPT IN CURRENT PROCESS LIST ############# ### BEGIN ### ############# if ($DEBUG==1) {open DLOG, ">$DEBFILE" or die "Cannot open debugging file!\n"}; &ping1; &ping2; &checkdowned; &trimlog; if ($DEBUG==1) {close DLOG}; } #END 'CONTINUE SCRIPT' sleep 2; exit; ###################################################################################################### ### SUBROUTINES ### ################### sub ping1 { $p1=`/bin/ping -c 3 $GATEWAY_1`; if ($p1=~s/100\%\spacket\sloss//) {$p1='DOWN'}; if ($p1=~s/unreachable//) {$p1='DOWN'}; if ($DEBUG==1) {print DLOG "p1:$p1\n"}; return $p1; }; sub ping2 { $p2=`/bin/ping -c 3 $GATEWAY_2`; if ($p2=~s/100\%\spacket\sloss//) {$p2='DOWN'}; if ($p2=~s/unreachable//) {$p2='DOWN'}; if ($DEBUG==1) {print DLOG "p2:$p2\n"}; return $p2; }; sub trimlog { ################ ### TRIM LOG ### ################ # THIS PRUNES THE LOG FILE TO JUST THE PREVIOUS THREE MONTH PERIOD. open DATA, "<$logfile" or die "Cannot read PPP maint log file!\n"; @data = <DATA>; close DATA; $date = `/bin/date`; #$cur_month = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[(localtime)[4]]; $cur_month = (localtime)[4]; $cur_year = (localtime)[5]; $cur_year+=1900; $cur_day = (localtime)[3]; #PPP Check: Wed Jan 30 09:20:01 CST 2008 [sample from log] foreach $line(@data) { if ($line=~m/PPP\sCheck:\s\w{3}\s(\w{3})\s(\d{2}).{14}(\d{4})/) { $late_month=$months{$1}; $late_day=$2; $late_year=$3; if ( ($late_year==$cur_year) && ( (($cur_month-$late_month)>=3) && ($late_day<=$cur_day) ) ) {@updata=()} elsif ( ($late_year<$cur_year) && ( (($late_month-$cur_month)<=9) && ($late_day<=$cur_day) ) ) {@updata=()} else { push @updata, $line } } else { push @updata, $line }; } open DATA, ">$logfile" or die "Cannot write PPP maint log file!\n"; print DATA @updata; close DATA; ################### END TRIM LOG }; ############################## ### Check for Downed Lines ### ############################## sub checkdowned { while ($FAIL eq 'TRUE') { @ifconf=(); @ifconf = `/sbin/ifconfig`; $FAIL='FALSE'; while (@ifconf) { $line=shift @ifconf; if ($line=~m/ppp0/) { if ($DEBUG==1) {print DLOG "PPPO:$ppp0 "}; $ppp0=1; if ($DEBUG==1) {print DLOG "PPPO:$ppp0 "}; $line=shift @ifconf; if ($line=~m/$IPADDRESS_1/) {$ppp0+=2}; if ($DEBUG==1) {print DLOG "PPPO:$ppp0 "}; $line=shift @ifconf; if ($line=~m/UP /) {$ppp0+=4}; if ($DEBUG==1) {print DLOG "PPPO:$ppp0\n"}; }; if ($line=~m/ppp1/) { if ($DEBUG==1) {print DLOG "PPP1:$ppp1 "}; $ppp1=1; if ($DEBUG==1) {print DLOG "PPP1:$ppp1 "}; $line=shift @ifconf; if ($line=~m/$IPADDRESS_2/) {$ppp1+=2}; if ($DEBUG==1) {print DLOG "PPP1:$ppp1 "}; $line=shift @ifconf; if ($line=~m/UP /) {$ppp1+=4}; if ($DEBUG==1) {print DLOG "PPP1:$ppp1\n"}; print $line }; } $attempt++; if ($DEBUG==1) {print "ATTEMPT: $attempt\n"}; if ($FAILED eq 'TRUE') {push @log, "Attempt#:$attempt > PPP0:$ppp0 PPP1:$ppp1\n"}; if ($ppp0<7) { if ($DEBUG==1) {print "$ppp0: Restarting ppp0 line by ifdown/ifup commands...\n"}; system("/sbin/ifdown ppp0"); sleep 3; system("/sbin/ifup ppp0"); }; if ($ppp1<7) { if ($DEBUG==1) {print "$ppp1: Restarting ppp1 line by ifdown/ifup commands...\n"}; system("/sbin/ifdown ppp1"); sleep 3; system("/sbin/ifup ppp1"); }; if ($FAILED eq 'TRUE') { push @log, `/bin/date`."\n"; push @log, @iprout."\n\n"; open LOG, ">>$logfile"; print LOG @log; close LOG; } push @total_log, @log; @log=(); my $testppp0=ping0; my $testppp1=ping1; if ($DEBUG==1) {print "testppp0: $testppp0 testppp1:$testppp1\n"}; if (($testppp0 eq 'DOWN') || ($testppp1 eq 'DOWN')) { $FAIL='TRUE' }; if ($FAIL eq 'TRUE') {$FAILED='TRUE'}; if ($DEBUG==1) {print DLOG "FAIL:$FAIL\n"}; if ($FAILED eq 'TRUE') { system("/etc/init.d/shorewall", "restart"); system("/etc/init.d/snmpd restart"); open LOG, ">>$logfile" or die "Cannot open PPP maint log file!\n"; print LOG @log; close LOG; push @total_log, @log; $stop_time=`/bin/date`; ######################################################################################################### #NOW, SEND AN EMAIL OR CAUSE AN ERROR SO THAT CRON WILL EMAIL THE SYSADMIN A NOTICE OF THIS NECESSITY!!! system("/bin/mail -t <<EOF To: $admin_email From: pppoe-maintenance\@$domain_name Subject: PPPoE Dropped Connection Restored!\n\n A PPPoE Connection was dropped or was lost. It should now be restored. The restoration of the line began at: $start_time -- and finished at -- $stop_time. Here is the log from this process: @total_log END OF REPORT. EOF "); ############################################################################################################ } else { open LOG, ">>$logfile" or die "Cannot open PPP maint log file!\n"; print LOG "PPP Check: ".`/bin/date`; close LOG; }; #END IF FAILED } #END WHILE FAIL print "SUCCEEDED AFTER $attempt ATTEMPTS!\n"; } #END SUB CHECKDOWNED