рд╕реБрдзрд╛рд░рд┐рдд рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░реВрди рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ IPeE рдиреЗрдЯрд╡рд░реНрдХ

рдирдорд╕реНрдХрд╛рд░. рдпрд╛рдЪрд╛ рдЕрд░реНрде 5k рдХреНрд▓рд╛рдпрдВрдЯрдЪреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╣реЗ. рдЕрд▓реАрдХрдбреЗрдЪ рдПрдХ рдЕрддрд┐рд╢рдп рдЖрдирдВрджрджрд╛рдпреА рдХреНрд╖рдг рдЖрд▓рд╛ рдирд╛рд╣реА - рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдордзреНрдпрднрд╛рдЧреА рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдмреНрд░реЛрдХреЗрдб рдЖрд░рдПрдХреНрд╕ 8 рдЖрд╣реЗ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд╡реНрд╣реЕрд▓рд╛рдиреНрд╕рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реЗ рдЧреЗрд▓реЗ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддреЗ рдмрд░реЗрдЪ рдЕрдЬреНрдЮрд╛рдд-рдпреБрдирд┐рдХрд╛рд╕реНрдЯ рдкреЕрдХреЗрдЯ рдкрд╛рдард╡реВ рд▓рд╛рдЧрд▓реЗ - рд╣реА рдЕрдВрд╢рддрдГ рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА, рдкрд░рдВрддреБ рддреЗрдереЗ рдЖрд╣реЗрдд рдкрд╛рдВрдврд░реНтАНрдпрд╛ рдкрддреНрддреНрдпрд╛рдВрд╕рд╛рдареА рд╡рд┐рд╢реЗрд╖ vlans рдЗ. рдЖрдгрд┐ рддреЗ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рд╕рд░реНрд╡ рджрд┐рд╢реЗрдиреЗ рдкрд╕рд░рд▓реЗрд▓реЗ рдЖрд╣реЗрдд. рддрд░ рдЖрддрд╛ рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рд╕реАрдореЗрд╡рд░реАрд▓ рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдореНрд╣рдгреВрди рд╢рд┐рдХрдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдХреНрд▓рд╛рдпрдВрдЯрдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рд╡рд░ рдпреЗрдгрд╛рд░рд╛ рдкреНрд░рд╡рд╛рд╣ рдЖрдгрд┐ рд╣рд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд╛рд╣реА (рдХрд┐рдВрд╡рд╛ рд╕рд░реНрд╡) рдЧрд╛рд╡рд╛рддреАрд▓ рд░реЗрдбрд┐рдУ рд▓рд┐рдВрдХрдХрдбреЗ рдЙрдбрддреЛ - рдЪреЕрдиреЗрд▓ рдмрдВрдж рдЖрд╣реЗ - рдЧреНрд░рд╛рд╣рдХ рд╕рдВрддрдкреНрдд рдЖрд╣реЗрдд - рджреБрдГрдЦ...

рдмрдЧрд▓рд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдд рдмрджрд▓рдгреЗ рд╣реЗ рдзреНрдпреЗрдп рдЖрд╣реЗ. рдореА рдкреВрд░реНрдг рд╡рд╛рдв рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдХреНрд▓рд╛рдпрдВрдЯ рд╡реНрд▓рд╛рдирд╕рд╣ q-in-q рдЪреНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдд рд╣реЛрддреЛ, рдкрд░рдВрддреБ P3310 рд╕рд╛рд░рдЦреЗ рд╕рд░реНрд╡ рдкреНрд░рдХрд╛рд░рдЪреЗ рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░, рдЬреЗрд╡реНрд╣рд╛ dot1q рд╕рдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ DHCP рд▓рд╛ рдпреЗрдК рджреЗрдгреЗ рдерд╛рдВрдмрд╡рддреЗ, рддреНрдпрд╛рдВрдирд╛ qinq рдХрд╕реЗ рдирд┐рд╡рдбрд╛рдпрдЪреЗ рд╣реЗ рджреЗрдЦреАрд▓ рдорд╛рд╣рд┐рдд рдирд╕рддреЗ рдЖрдгрд┐ рдЕрдиреЗрдХ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░рдЪреЗ рддреЛрдЯреЗ. ip-unnambered рдореНрд╣рдгрдЬреЗ рдХрд╛рдп рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ? рдЕрдЧрджреА рдереЛрдбрдХреНрдпрд╛рдд: рдЧреЗрдЯрд╡реЗ рдкрддреНрддрд╛ + рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░реАрд▓ рдорд╛рд░реНрдЧ. рдЖрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ: рд╢реЗрдкрд░ рдХрдЯ рдХрд░рдгреЗ, рдЧреНрд░рд╛рд╣рдХрд╛рдВрдирд╛ рдкрддреНрддреЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреЗ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░рдлреЗрд╕рджреНрд╡рд╛рд░реЗ рдХреНрд▓рд╛рдпрдВрдЯрд╕рд╛рдареА рдорд╛рд░реНрдЧ рдЬреЛрдбрдгреЗ. рд╣реЗ рд╕рд░реНрд╡ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ? рд╢реЗрдкрд░ - lisg, dhcp - db2dhcp рджреЛрди рд╕реНрд╡рддрдВрддреНрд░ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░, dhcprelay рдНрдХреНрд╕реЗрд╕ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЪрд╛рд▓рддреЗ, ucarp рджреЗрдЦреАрд▓ рдНрдХреНрд╕реЗрд╕ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЪрд╛рд▓рддреЗ - рдмреЕрдХрдЕрдкрд╕рд╛рдареА. рдкрдг рдорд╛рд░реНрдЧ рдХрд╕реЗ рдЬреЛрдбрд╛рдпрдЪреЗ? рдЖрдкрдг рдореЛрдареНрдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕рд╣ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЖрдЧрд╛рдК рдЬреЛрдбреВ рд╢рдХрддрд╛ - рдкрд░рдВрддреБ рд╣реЗ рдЦрд░реЗ рдирд╛рд╣реА. рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдХреНрд░реЕрдЪ рдмрдирд╡реВ.

рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рд╕рдЦреЛрд▓ рд╢реЛрдз рдШреЗрддрд▓реНрдпрд╛рдирдВрддрд░, рдорд▓рд╛ C++ рд╕рд╛рдареА рдПрдХ рдЕрдкреНрд░рддрд┐рдо рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд▓рд╛рдпрдмреНрд░рд░реА рд╕рд╛рдкрдбрд▓реА, рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд╣рджрд╛рд░реАрд▓рд╛ рд╕реБрдВрджрд░рдкрдгреЗ рд╢реЛрдзреВ рджреЗрддреЗ. рдорд╛рд░реНрдЧ рдЬреЛрдбрдгрд╛рд░реНтАНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ - рдЖрдореНрд╣реА рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рдПрдЖрд░рдкреА рд╡рд┐рдирдВрддреНрдпрд╛ рдРрдХрддреЛ, рдЬрд░ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡рд┐рдирдВрддреА рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ lo рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рдкрддреНрддрд╛ рдЕрд╕реЗрд▓ рддрд░ рдЖрдореНрд╣реА рдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рджреНрд╡рд╛рд░реЗ рдорд╛рд░реНрдЧ рдЬреЛрдбрддреЛ рдЖрдгрд┐ рд╕реНрдерд┐рд░ рдПрдЖрд░рдкреА рдЬреЛрдбрддреЛ. рдпрд╛ ip рд╡рд░ рд░реЗрдХреЙрд░реНрдб рдХрд░рд╛ - рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдХрд╛рд╣реА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ, рдереЛрдбреЗ рд╡рд┐рд╢реЗрд╖рдг рдЖрдгрд┐ рдЖрдкрдг рдкреВрд░реНрдг рдХреЗрд▓реЗ

'рд░рд╛рдЙрдЯрд░'рдЪреЗ рд╕реНрд░реЛрдд

#include <stdio.h>
#include <sys/types.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <string.h>
#include <arpa/inet.h>

#include <tins/tins.h>
#include <map>
#include <iostream>
#include <functional>
#include <sstream>

using std::cout;
using std::endl;
using std::map;
using std::bind;
using std::string;
using std::stringstream;

using namespace Tins;

class arp_monitor {
public:
    void run(Sniffer &sniffer);
    void reroute();
    void makegws();
    string iface;
    map <string, string> gws;
private:
    bool callback(const PDU &pdu);
    map <string, string> route_map;
    map <string, string> mac_map;
    map <IPv4Address, HWAddress<6>> addresses;
};

void  arp_monitor::makegws() {
    struct ifaddrs *ifAddrStruct = NULL;
    struct ifaddrs *ifa = NULL;
    void *tmpAddrPtr = NULL;
    gws.clear();
    getifaddrs(&ifAddrStruct);
    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        string ifName = ifa->ifa_name;
        if (ifName == "lo") {
            char addressBuffer[INET_ADDRSTRLEN];
            if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
                // is a valid IP4 Address
                tmpAddrPtr = &((struct sockaddr_in *) ifa->ifa_addr)->sin_addr;
                inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
                // is a valid IP6 Address
                tmpAddrPtr = &((struct sockaddr_in6 *) ifa->ifa_addr)->sin6_addr;
                inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            } else {
                continue;
            }
            gws[addressBuffer] = addressBuffer;
            cout << "GW " << addressBuffer << " is added" << endl;
        }
    }
    if (ifAddrStruct != NULL) freeifaddrs(ifAddrStruct);
}

void arp_monitor::run(Sniffer &sniffer) {
    cout << "RUNNED" << endl;
    sniffer.sniff_loop(
            bind(
                    &arp_monitor::callback,
                    this,
                    std::placeholders::_1
            )
    );
}

void arp_monitor::reroute() {
    cout << "REROUTING" << endl;
    map<string, string>::iterator it;
    for ( it = route_map.begin(); it != route_map.end(); it++ ) {
        if (this->gws.count(it->second) && !this->gws.count(it->second)) {
            string cmd = "ip route replace ";
            cmd += it->first;
            cmd += " dev " + this->iface;
            cmd += " src " + it->second;
            cmd += " proto static";
            cout << cmd << std::endl;
            cout << "REROUTE " << it->first << " SRC " << it->second << endl;
            system(cmd.c_str());
            cmd = "arp -s ";
            cmd += it->first;
            cmd += " ";
            cmd += mac_map[it->first];
            cout << cmd << endl;
            system(cmd.c_str());

        }
    }
    for ( it = gws.begin(); it != gws.end(); it++ ) {
	string cmd = "arping -U -s ";
	cmd += it->first;
	cmd += " -I ";
	cmd += this->iface;
	cmd += " -b -c 1 ";
	cmd += it->first;
        system(cmd.c_str());
    }
    cout << "REROUTED" << endl;
}

bool arp_monitor::callback(const PDU &pdu) {
    // Retrieve the ARP layer
    const ARP &arp = pdu.rfind_pdu<ARP>();

    if (arp.opcode() == ARP::REQUEST) {
	
        string target = arp.target_ip_addr().to_string();
        string sender = arp.sender_ip_addr().to_string();
        this->route_map[sender] = target;
        this->mac_map[sender] = arp.sender_hw_addr().to_string();
        cout << "save sender " << sender << ":" << this->mac_map[sender] << " want taregt " << target << endl;
        if (this->gws.count(target) && !this->gws.count(sender)) {
            string cmd = "ip route replace ";
            cmd += sender;
            cmd += " dev " + this->iface;
            cmd += " src " + target;
            cmd += " proto static";
//            cout << cmd << std::endl;
/*            cout << "ARP REQUEST FROM " << arp.sender_ip_addr()
                 << " for address " << arp.target_ip_addr()
                 << " sender hw address " << arp.sender_hw_addr() << std::endl
                 << " run cmd: " << cmd << endl;*/
            system(cmd.c_str());
            cmd = "arp -s ";
            cmd += arp.sender_ip_addr().to_string();
            cmd += " ";
            cmd += arp.sender_hw_addr().to_string();
            cout << cmd << endl;
            system(cmd.c_str());
        }
    }
    return true;
}

arp_monitor monitor;
void reroute(int signum) {
    monitor.makegws();
    monitor.reroute();
}

int main(int argc, char *argv[]) {
    string test;
    cout << sizeof(string) << endl;

    if (argc != 2) {
        cout << "Usage: " << *argv << " <interface>" << endl;
        return 1;
    }
    signal(SIGHUP, reroute);
    monitor.iface = argv[1];
    // Sniffer configuration
    SnifferConfiguration config;
    config.set_promisc_mode(true);
    config.set_filter("arp");

    monitor.makegws();

    try {
        // Sniff on the provided interface in promiscuous mode
        Sniffer sniffer(argv[1], config);

        // Only capture arp packets
        monitor.run(sniffer);
    }
    catch (std::exception &ex) {
        std::cerr << "Error: " << ex.what() << std::endl;
    }
}

libtins рдкреНрд░рддрд┐рд╖реНрдард╛рдкрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ

#!/bin/bash

git clone https://github.com/mfontanini/libtins.git
cd libtins
mkdir build
cd build
cmake ../
make
make install
ldconfig

рдмрд╛рдпрдирд░реА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдЬреНрдЮрд╛

g++ main.cpp -o arp-rt -O3 -std=c++11 -lpthread -ltins

рддреЗ рдХрд╕реЗ рд╕реБрд░реВ рдХрд░рд╛рдпрдЪреЗ?


start-stop-daemon --start --exec  /opt/ipoe/arp-routes/arp-rt -b -m -p /opt/ipoe/arp-routes/daemons/eth0.800.pid -- eth0.800

рд╣реЛрдп - рддреЗ HUP рд╕рд┐рдЧреНрдирд▓рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЯреЗрдмрд▓реНрд╕рдЪреА рдкреБрдирд░реНрдмрд╛рдВрдзрдгреА рдХрд░реЗрд▓. рддреБрдореНрд╣реА рдиреЗрдЯрд▓рд┐рдВрдХ рдХрд╛ рд╡рд╛рдкрд░рд▓реЗ рдирд╛рд╣реА? рд╣реЗ рдлрдХреНрдд рдЖрд│рд╢реАрдкрдгрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╡рд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗ - рдореНрд╣рдгреВрди рд╕рд░реНрд╡рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ. рдмрд░рдВ, рдорд╛рд░реНрдЧ рд╣реЗ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд, рдкреБрдвреЗ рдХрд╛рдп? рдкреБрдвреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЕрд╕рд▓реЗрд▓реЗ рдорд╛рд░реНрдЧ рд╕реАрдореЗрд╡рд░ рдкрд╛рдард╡рд╛рдпрдЪреЗ рдЖрд╣реЗрдд - рдпреЗрдереЗ, рддреНрдпрд╛рдЪ рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣рд╛рд░реНрдбрд╡реЗрдЕрд░рдореБрд│реЗ, рдЖрдореНрд╣реА рдХрдореАрддрдХрдореА рдкреНрд░рддрд┐рдХрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рд╕реНрд╡реАрдХрд╛рд░рд▓рд╛ - рдЖрдореНрд╣реА рд╣реЗ рдХрд╛рдо BGP рд▓рд╛ рджрд┐рд▓реЗ.

bgp рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╣реЛрд╕реНрдЯрдирд╛рд╡ *******
рдкрд╛рд╕рд╡рд░реНрдб *******
рд▓реЙрдЧ рдлрд╛рдЗрд▓ /var/log/bgp.log
!
# AC рдХреНрд░рдорд╛рдВрдХ, рдкрддреНрддреЗ рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЖрд╣реЗрдд
рд░рд╛рдЙрдЯрд░ bgp 12345
bgp рд░рд╛рдЙрдЯрд░-рдЖрдпрдбреА 1.2.3.4
рдХрдиреЗрдХреНрдЯ рдХреЗрд▓реЗрд▓реЗ рдкреБрдирд░реНрд╡рд┐рддрд░рдг
рд╕реНрдерд┐рд░ рдкреБрдирд░реНрд╡рд┐рддрд░рдг
рд╢реЗрдЬрд╛рд░реА 1.2.3.1 рд░рд┐рдореЛрдЯ-рдЬрд╕реЗ 12345
рд╢реЗрдЬрд╛рд░реА 1.2.3.1 next-hop-self
рд╢реЗрдЬрд╛рд░реА 1.2.3.1 рдорд╛рд░реНрдЧ-рдирдХрд╛рд╢рд╛ рдордзреНрдпреЗ рдирд╛рд╣реА
рд╢реЗрдЬрд╛рд░реА 1.2.3.1 рдорд╛рд░реНрдЧ-рдирдХрд╛рд╢рд╛ рдмрд╛рд╣реЗрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░рд╛
!
рдкреНрд░рд╡реЗрд╢-рд╕реВрдЪреА рдирд┐рд░реНрдпрд╛рдд рдкрд░рд╡рд╛рдирдЧреА 1.2.3.0/24
!
рдорд╛рд░реНрдЧ-рдирдХрд╛рд╢рд╛ рдирд┐рд░реНрдпрд╛рдд рдкрд░рд╡рд╛рдирдЧреА 10
рдЖрдпрдкреА рдкрддреНрддрд╛ рдирд┐рд░реНрдпрд╛рдд рдЬреБрд│рд╡рд╛
!
рдорд╛рд░реНрдЧ-рдирдХрд╛рд╢рд╛ рдирд┐рд░реНрдпрд╛рдд рдирд╛рдХрд╛рд░рдгреЗ 20

рдЪрд▓рд╛ рд╕реБрд░реВ рдареЗрд╡реВрдпрд╛. рд╕рд░реНрд╡реНрд╣рд░рдиреЗ arp рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА arp рдкреНрд░реЙрдХреНрд╕реА рд╕рдХреНрд╖рдо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.


echo 1 > /proc/sys/net/ipv4/conf/eth0.800/proxy_arp

рдЪрд▓рд╛ рдкреБрдвреЗ рдЬрд╛рдК - ucarp. рдпрд╛ рдЪрдорддреНрдХрд╛рд░рд╛рдЪреА рдкреНрд░рдХреНрд╖реЗрдкрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдореНрд╣реА рд╕реНрд╡рддрдГ рд▓рд┐рд╣рд┐рддреЛ.

рдПрдХ рдбрд┐рдорди рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг


start-stop-daemon --start --exec  /usr/sbin/ucarp -b -m -p /opt/ipoe/ucarp-gen2/daemons/$iface.$vhid.$virtualaddr.pid -- --interface=eth0.800 --srcip=1.2.3.4 --vhid=1 --pass=carpasword --addr=10.10.10.1 --upscript=/opt/ipoe/ucarp-gen2/up.sh --downscript=/opt/ipoe/ucarp-gen2/down.sh -z -k 10 -P --xparam="10.10.10.0/24"

up.sh


#!/bin/bash

iface=$1
addr=$2
gw=$3

vlan=`echo $1 | sed "s/eth0.//"`


ip ad ad $addr/32 dev lo
ip ro add blackhole $gw
echo 1 > /proc/sys/net/ipv4/conf/$iface/proxy_arp

killall -9 dhcrelay
/etc/init.d/dhcrelay zap
/etc/init.d/dhcrelay start


killall -HUP arp-rt

down.sh


#!/bin/bash

iface=$1
addr=$2
gw=$3

ip ad d $addr/32 dev lo
ip ro de blackhole $gw
echo 0 > /proc/sys/net/ipv4/conf/$iface/proxy_arp


killall -9 dhcrelay
/etc/init.d/dhcrelay zap
/etc/init.d/dhcrelay start

dhcprelay рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рд▓рд╛ рдкрддреНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рд╡рд░ рдЖрдореНрд╣реА рдбрд╛рд╡реЗ рдкрддреНрддреЗ рдЬреЛрдбреВ - рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде 10.255.255.1/32, 10.255.255.2/32, рдЗ. рд░рд┐рд▓реЗ рдХрд╕реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛рд╡реЗ рддреЗ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧрдгрд╛рд░ рдирд╛рд╣реА - рд╕рд░реНрд╡ рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗ.

рдордЧ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХрд╛рдп рдЖрд╣реЗ? рдЧреЗрдЯрд╡реЗрдЪрд╛ рдмреЕрдХрдЕрдк, рдорд╛рд░реНрдЧрд╛рдВрдЪреЗ рд╕реНрд╡рдпрдВ-рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, dhcp. рд╣рд╛ рдХрд┐рдорд╛рди рд╕реЗрдЯ рдЖрд╣реЗ - lisg рджреЗрдЦреАрд▓ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рднреЛрд╡рддрд╛рд▓рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреА рдЧреБрдВрдбрд╛рд│рддреЛ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдПрдХ рд╢реЗрдкрд░ рдЖрд╣реЗ. рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЗрддрдХреЗ рд▓рд╛рдВрдм рдЖрдгрд┐ рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рдХрд╛ рдЖрд╣реЗ? accel-pppd рдШреЗрдгреЗ рдЖрдгрд┐ pppoe рд╡рд╛рдкрд░рдгреЗ рд╕реЛрдкреЗ рдирд╛рд╣реА рдХрд╛? рдирд╛рд╣реА, рд╣реЗ рд╕реЛрдкреЗ рдирд╛рд╣реА - рд▓реЛрдХ рд░рд╛рдЙрдЯрд░рдордзреНрдпреЗ рдкреЕрдЪрдХреЙрд░реНрдб рдХреНрд╡рдЪрд┐рддрдЪ рдмрд╕рд╡реВ рд╢рдХрддрд╛рдд, pppoe рдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВ рдирдХрд╛. accel-ppp рд╣реА рдПрдХ рдЫрд╛рди рдЧреЛрд╖реНрдЯ рдЖрд╣реЗ - рдкрд░рдВрддреБ рддреА рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА - рдХреЛрдбрдордзреНрдпреЗ рдмрд░реНтАНрдпрд╛рдЪ рддреНрд░реБрдЯреА рдЖрд╣реЗрдд - рддреЗ рдЪреБрд░рдЧрд│рддреЗ, рддреЗ рдХреБрдЯрд┐рд▓рдкрдгреЗ рдХрд╛рдкрддреЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рджреБрдГрдЦрд╛рдЪреА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рддреА рдЙрдЬрд│рд▓реА рддрд░ - рд▓реЛрдХрд╛рдВрдирд╛ рд░реАрд▓реЛрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА - рдлреЛрди рд▓рд╛рд▓ рдЖрд╣реЗрдд - рддреЗ рдЕрдЬрд┐рдмрд╛рдд рдЪрд╛рд▓рд▓реЗ рдирд╛рд╣реА. Keepalived рдРрд╡рдЬреА ucarp рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдХрд╛рдп рдлрд╛рдпрджрд╛ рдЖрд╣реЗ? рд╣реЛрдп, рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯреАрдд - 100 рдЧреЗрдЯрд╡реЗ, Keepalived рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдПрдХ рддреНрд░реБрдЯреА рдЖрд╣реЗ - рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. 1 рдЧреЗрдЯрд╡реЗ ucarp рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. рд╕реБрд░рдХреНрд╖реЗрдмрджреНрджрд▓, рддреЗ рдореНрд╣рдгрддрд╛рдд рдХреА рдбрд╛рд╡реЗ рд▓реЛрдХ рд╕реНрд╡рддрдГрд╕рд╛рдареА рдкрддреНрддреЗ рдиреЛрдВрджрдгреА рдХрд░рддреАрд▓ рдЖрдгрд┐ рд╢реЗрдЕрд░рд╡рд░ рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреАрд▓ - рдпрд╛ рдХреНрд╖рдгрд╛рд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рд╕реНрд╡рд┐рдЪ/рдУрд▓реНрдЯреНрд╕/рдмреЗрд╕рд╡рд░ dhcp-snooping + source-guard + arp рддрдкрд╛рд╕рдгреА рд╕реЗрдЯ рдХреЗрд▓реА рдЖрд╣реЗ. рдЬрд░ рдХреНрд▓рд╛рдпрдВрдЯрдХрдбреЗ dhpc рдирд╕реЗрд▓ рдкрд░рдВрддреБ рдкреЛрд░реНрдЯрд╡рд░ рд╕реНрдерд┐рд░ - рдНрдХреНрд╕реЗрд╕-рд╕реВрдЪреА рдЕрд╕реЗрд▓.

рд╣реЗ рд╕рд░реНрд╡ рдХрд╛ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ? рдЕрд╡рд╛рдВрдЫрд┐рдд рд╡рд╛рд╣рддреВрдХ рдирд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЖрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд┐рдЪрдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ vlan рдЖрд╣реЗ рдЖрдгрд┐ рдЕрдЬреНрдЮрд╛рдд-рдпреБрдирд┐рдХрд╛рд╕реНрдЯ рдЖрддрд╛ рднрд┐рддреАрджрд╛рдпрдХ рдирд╛рд╣реА, рдХрд╛рд░рдг рддреНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдПрдХрд╛ рдкреЛрд░реНрдЯрд╡рд░ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдВрд╕рд╛рдареА рдирд╛рд╣реА... рдмрд░рдВ, рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдореНрд╣рдгрдЬреЗ рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдХрд░рдгреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, рдЕреЕрдбреНрд░реЗрд╕ рд╕реНрдкреЗрд╕ рд╡рд╛рдЯрдк рдХрд░рдгреНрдпрд╛рдд рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛.

lisg рдХрд╕реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛рд╡реЗ рд╣рд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд┐рд╖рдп рдЖрд╣реЗ. рд▓рд╛рдпрдмреНрд░рд░реАрдЪреНрдпрд╛ рд▓рд┐рдВрдХ рдЬреЛрдбрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдХрджрд╛рдЪрд┐рдд рд╡рд░реАрд▓ рдПрдЦрд╛рджреНрдпрд╛рд▓рд╛ рддреНрдпрд╛рдВрдЪреЗ рдзреНрдпреЗрдп рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░реЗрд▓. рдЖрд╡реГрддреНрддреА 6 рдЕрджреНрдпрд╛рдк рдЖрдордЪреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рдд рдирд╛рд╣реА - рдкрд░рдВрддреБ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЕрд╕реЗрд▓ - рдЖрд╡реГрддреНрддреА 6 рд╕рд╛рдареА lisg рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдорд╛рд░реНрдЧ рдЬреЛрдбрдгрд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рджреБрд░реБрд╕реНрдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд▓рд┐рдирдХреНрд╕ ISG
DB2DHCP
рд▓рд┐рдмрдЯрд┐рдиреНрд╕

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛