Changeset 5221 in /cluster/svnroot


Ignore:
Timestamp:
Jul 10, 2015 11:33:16 AM (5 years ago)
Author:
skylar
Message:

DHCP should only listen on the configured NIC re #950

Location:
bccd-ng/branches/skylar/bccd-3.4.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • bccd-ng/branches/skylar/bccd-3.4.0/bin/build_bootable_USB.sh

    r5212 r5221  
    7777
    7878SVN_URL=http://bccd-ng.cluster.earlham.edu/svn/bccd-ng/trunk
    79 MIN_SIZE=1105306368
     79MIN_SIZE=1305306368
    8080SCRIPT_DIR=$(dirname $0)
    8181pushd ${SCRIPT_DIR}
  • bccd-ng/branches/skylar/bccd-3.4.0/trees/usr/local/lib/site_perl/Bccd.pm

    r5212 r5221  
    21192119                $self->log_and_cont('DEBUG',$sub,"Pushing static $nic onto auto stack");
    21202120            }
    2121             push(@auto,$nic);
    2122             print $INT "iface $nic inet static\n";
     2121
     2122            # Remove alias suffix for new iproute2 multi-IP NIC config (#950)
     2123            my $nic_name = $nic;
     2124            $nic_name =~ s{:1$}{};
     2125
     2126            push(@auto,$nic_name);
     2127            print $INT "iface $nic_name inet static\n";
    21232128            print $INT "\taddress $self->{nic_conf}->{$nic}->{'ipaddr'}\n";
    21242129            print $INT "\tnetmask $self->{nic_conf}->{$nic}->{'mask'}\n";
     
    23282333                print $DCONF "}\n";
    23292334
    2330                 # Generate blank subnet statements for each known subnet
    2331                 foreach my $nic_conf_nic (keys(%{$self->{nic_conf}})) {
    2332             if(defined($self->{nic_conf}->{$nic_conf_nic}->{'mask'})) {
    2333                             # Filter out aliases (DHCP doesn't like them)
    2334                 if($nic_conf_nic !~ m{:\d+$}
    2335                         && defined($self->{nic_conf}->{$nic_conf_nic}->{'ipaddr'})
    2336                         && defined($self->{nic_conf}->{$nic_conf_nic}->{'mask'})) {
    2337                     my $nic_nai
    2338                         = new NetAddr::IP($self->{nic_conf}->{$nic_conf_nic}->{'ipaddr'},
    2339                                 $self->{nic_conf}->{$nic_conf_nic}->{'mask'});
    2340                     $network = $nic_nai->network();
    2341                     $network =~ s{/\d+$}{};
    2342                     print $DCONF "subnet $network ";
    2343                     print $DCONF "netmask $self->{nic_conf}->{$nic_conf_nic}->{'mask'} {\n";
    2344                     print $DCONF "}\n";
    2345                 }
    2346             }           
    2347                 }
     2335                # Generate blank subnet statements for the BCCD network
     2336        if(defined($self->{nic_conf}->{$self->{bccd_nic}}->{'mask'})) {
     2337# Filter out aliases (DHCP doesn't like them)
     2338            if($self->{bccd_nic} !~ m{:\d+$}
     2339                    && defined($self->{nic_conf}->{$self->{bccd_nic}}->{'ipaddr'})
     2340                    && defined($self->{nic_conf}->{$self->{bccd_nic}}->{'mask'})) {
     2341                my $nic_nai
     2342                    = new NetAddr::IP($self->{nic_conf}->{$self->{bccd_nic}}->{'ipaddr'},
     2343                            $self->{nic_conf}->{$self->{bccd_nic}}->{'mask'});
     2344                $network = $nic_nai->network();
     2345                $network =~ s{/\d+$}{};
     2346                print $DCONF "subnet $network ";
     2347                print $DCONF "netmask $self->{nic_conf}->{$self->{bccd_nic}}->{'mask'} {\n";
     2348                print $DCONF "}\n";
     2349            }
     2350        }           
    23482351
    23492352            close($DCONF);
     
    26452648sub config_nic_dialog {
    26462649    my($self,$d,$nic) = @_;
    2647     my($temp,$bccd_nic,$gotpxe,$dhcp_source,$sub,$rc,$msg_string);
     2650    my($temp,$gotpxe,$dhcp_source,$sub,$rc,$msg_string);
    26482651    $sub = 'config_nic_dialog';
    26492652    $self->enter_sub($sub);
     
    26912694                $self->log_and_cont('DEBUG',$sub,"Only one NIC for BCCD");
    26922695            }
    2693             $bccd_nic = $dhcp_nics[0];
     2696            $self->{bccd_nic} = $dhcp_nics[0];
    26942697        }
    26952698        elsif($#dhcp_nics > 0 and not -e '/testmode') {
     
    27042707                );
    27052708            # Set NIC that will have a locked-down DHCP server listening on it
    2706             $bccd_nic = $d->menu(text=>"Choose NIC to have BCCD network.", list => \@dhcp_nics);
     2709            $self->{bccd_nic} = $d->menu(text=>"Choose NIC to have BCCD network.", list => \@dhcp_nics);
    27072710            if($self->is_log($INFO) || $self->is_log($DEBUG)) {
    2708                 $self->log_and_cont('INFO',$sub,"User selected $bccd_nic to be BCCD NIC.");
     2711                $self->log_and_cont('INFO',$sub,"User selected
     2712$self->{bccd_nic} to be BCCD NIC.");
    27092713            }
    27102714            if(!$self->is_dialog_ok($d)) {
     
    27162720            my  @command = grep (/BCCD_NIC/, <TEST>);
    27172721            if ($command[0] =~ m/export BCCD_NIC=(.*)$/){
    2718                 $bccd_nic = $1;
    2719             }
    2720             print STDERR "$bccd_nic selected for BCCD network\n"
     2722                $self->{bccd_nic} = $1;
     2723            }
     2724            print STDERR "$self->{bccd_nic} selected for BCCD network\n"
    27212725        }
    27222726        # Copy iptables template regardless of NAT Status
     
    27342738        }
    27352739        # Setup NAT in iptables on the BCCD NIC
    2736         if(defined($bccd_nic) && !$self->check_bccd_net($self->{nic_conf})) {
     2740        if(defined($self->{bccd_nic}) && !$self->check_bccd_net($self->{nic_conf})) {
    27372741            if($self->is_log($DEBUG)) {
    2738                 $self->log_and_cont('DEBUG',$sub,"Setting $bccd_nic:1 to be BCCD net NIC");
    2739             }
    2740             $self->{nic_conf}->{"$bccd_nic:1"} = $BCCD_NET;
     2742                $self->log_and_cont('DEBUG',$sub,"Setting $self->{bccd_nic}:1 to be BCCD net NIC");
     2743            }
     2744            $self->{nic_conf}->{"$self->{bccd_nic}:1"} = $BCCD_NET;
    27412745            foreach my $LINE (
    27422746                q{*nat},
     
    27512755        close($IPT);
    27522756
     2757        # Ignore NIC aliases
    27532758      NIC_CONF:
    2754         foreach my $nic (sort keys %{$self->{nic_conf}}) {
     2759        foreach my $nic (grep {!/:1$/} sort keys %{$self->{nic_conf}}) {
    27552760            # If $nic has an IP address, and it came from a BCCD DHCP
    27562761            # server
     
    27892794                                && ! $d->yesno(text => $msg_string)) {
    27902795                $self->{nic_conf}->{$nic}->{'dhcp'} = 0;
    2791             }
    2792             # If the user chooses not to assign an address, we need to
    2793             # assign a local IP address to make DHCP happy.
    2794             else {
    2795                 # This reworks around a bug in squeeze DHCP where dhcpd
    2796                 # cannot listen on an interface with an alias
    2797                 # unless the base interface has an IP address
    2798                 # Assign a local IP address if no IP address is present
    2799                 if(defined($bccd_nic) && $nic eq $bccd_nic
    2800                   && !defined($self->{nic_conf}->{$nic}->{'ipaddr'})) {
    2801                     if($self->is_log($INFO)) {
    2802                         $self->log_and_cont('INFO',$sub,"$nic has no address, assigning 127.127.127.127/8");
    2803                     }
    2804                     $self->{nic_conf}->{$nic}->{'ipaddr'} = '127.127.127.127';
    2805                     $self->{nic_conf}->{$nic}->{'mask'} = '255.0.0.0';
    2806                 }
    2807                 next NIC_CONF;
    28082796            }
    28092797            if($self->{nic_conf}->{$nic}->{'dhcp'} == 0) {
     
    30773065
    30783066sub get_boot_flags_from_NIC{
    3079     my %request = @_;
     3067    my ($self,%request) = @_;
    30803068    my @custom_macs;
    30813069    my @custom_nics;
    30823070    my @boot_strings;
    30833071    my $boot_string;
    3084     my $bccd_nic;
    30853072   
    30863073   
     
    31093096            )
    31103097        {
    3111             $bccd_nic = $custom_nics[$i];
     3098            $self->{bccd_nic} = $custom_nics[$i];
    31123099            $boot_string = $boot_strings[$i];
    31133100        }
     
    31153102   
    31163103    # Only process NIC if it has the test flags
    3117     if(defined($bccd_nic)) {
    3118         my $boot_flags = "#!/bin/sh\nexport BCCD_NIC=$bccd_nic\n";     
     3104    if(defined($self->{bccd_nic})) {
     3105        my $boot_flags = "#!/bin/sh\nexport BCCD_NIC=$self->{bccd_nic}\n";     
    31193106       
    31203107        foreach my $key(keys %request){
Note: See TracChangeset for help on using the changeset viewer.