рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рдЖрдИрдкреАрдИрдИ рдиреЗрдЯрд╡рд░реНрдХ

рдирдорд╕реНрддреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ 5 рд╣рдЬрд╛рд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕реБрдЦрдж рдХреНрд╖рдг рдирд╣реАрдВ рдЖрдпрд╛ - рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреНрд░реЛрдХреЗрдб RX8 рд╣реИ рдФрд░ рдЗрд╕рдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдЬреНрдЮрд╛рдд-рдпреВрдирд┐рдХреИрд╕реНрдЯ рдкреИрдХреЗрдЯ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ vlans рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рд╣реИрдВ рд╕рдлрд╝реЗрдж рдкрддреЛрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ vlansред рдФрд░ рд╡реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдлреИрд▓реЗ рд╣реБрдП рд╣реИрдВред рддреЛ рдЕрдм рдПрдХ рдРрд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрддреЗ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╡рд╛рд╣ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рд╕реАрдорд╛рд╡рд░реНрддреА рдЫрд╛рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзреНрдпрдпрди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рдХреБрдЫ (рдФрд░ рд╕рднреА) рдЧрд╛рдВрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд░реЗрдбрд┐рдпреЛ рд▓рд┐рдВрдХ рдХреА рдУрд░ рдЙрдбрд╝рддрд╛ рд╣реИ - рдЪреИрдирд▓ рдмрдВрдж рд╣реИ - рдЧреНрд░рд╛рд╣рдХ рдирд╛рд░рд╛рдЬ рд╣реИрдВ - рдЙрджрд╛рд╕реА...

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

рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЧрд╣рди рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ C++ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдорд┐рд▓реА, рдЬреЛ рдЖрдкрдХреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд░реВрдЯ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ - рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ arp рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рд░реНрд╡рд░ рдкрд░ lo рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдПрдХ рдкрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд░реВрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕реНрдерд┐рд░ arp рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЗрд╕ рдЖрдИрдкреА рдкрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдЫ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ, рдереЛрдбрд╝рд╛ рд╡рд┐рд╢реЗрд╖рдг рдФрд░ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реЛ рдЧрдпрд╛

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

#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 рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдЖрдкрдиреЗ рдиреЗрдЯрд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛? рдпрд╣ рд╕рд┐рд░реНрдл рдЖрд▓рд╕реНрдп рд╣реИ рдФрд░ рд▓рд┐рдирдХреНрд╕ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдЦреИрд░, рдорд╛рд░реНрдЧ рддреЛ рдорд╛рд░реНрдЧ рд╣реИрдВ, рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ? рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдореМрдЬреВрдж рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рд╕реАрдорд╛ рдкрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдпрд╣рд╛рдВ, рдЙрд╕реА рдкреБрд░рд╛рдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЗ рдХрд╛рд░рдг, рд╣рдордиреЗ рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдЕрдкрдирд╛рдпрд╛ - рд╣рдордиреЗ рдпрд╣ рдХрд╛рд░реНрдп рдмреАрдЬреАрдкреА рдХреЛ рд╕реМрдВрдкрд╛ред

рдмреАрдЬреАрдкреА рдХреЙрдиреНрдлрд┐рдЧрд╣реЛрд╕реНрдЯрдирд╛рдо *******
рдкрд╛рд╕рд╡рд░реНрдб *******
рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ /var/log/bgp.log
!
# AS рдирдВрдмрд░, рдкрддреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИрдВ
рд░рд╛рдЙрдЯрд░ рдмреАрдЬреАрдкреА 12345
рдмреАрдЬреАрдкреА рд░рд╛рдЙрдЯрд░-рдЖрдИрдбреА 1.2.3.4
рдкреБрдирдГ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ
рд╕реНрдерд┐рд░ рдкреБрдирд░реНрд╡рд┐рддрд░рдг
рдкрдбрд╝реЛрд╕реА 1.2.3.1 рд░рд┐рдореЛрдЯ-12345 рдХреЗ рд░реВрдк рдореЗрдВ
рдкрдбрд╝реЛрд╕реА 1.2.3.1 рдиреЗрдХреНрд╕реНрдЯ-рд╣реЙрдк-рд╕реЗрд▓реНрдл
рдкрдбрд╝реЛрд╕реА 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

рдЪрд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ - рдпреВрдХрд╛рд░реНрдкред рд╣рдо рдЗрд╕ рдЪрдорддреНрдХрд╛рд░ рдХреА рд▓реЙрдиреНрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

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


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

рдбрд╛рдЙрди.рд╢


#!/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, рдЖрджрд┐ред рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рд░рд┐рд▓реЗ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ - рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ? рдЧреЗрдЯрд╡реЗ рдХрд╛ рдмреИрдХрдЕрдк, рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдСрдЯреЛ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдбреАрдПрдЪрд╕реАрдкреАред рдпрд╣ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рд╣реИ - рд▓рд┐рд╕рдЧ рднреА рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдм рдХреБрдЫ рд▓рдкреЗрдЯрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╢реЗрдкрд░ рд╣реИред рд╣рд░ рдЪреАрдЬрд╝ рдЗрддрдиреА рд▓рдВрдмреА рдФрд░ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рд╣реИ? рдХреНрдпрд╛ рдПрдХреНрд╕реЗрд▓-рдкреАрдкреАрдкреАрдбреА рд▓реЗрдирд╛ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреАрдкреАрдкреАрдУрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ? рдирд╣реАрдВ, рдпрд╣ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ - рд▓реЛрдЧ рд░рд╛рдЙрдЯрд░ рдореЗрдВ рдкреИрдЪрдХреЙрд░реНрдб рдХреЛ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдлрд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкреАрдкреАрдкреАрдИ рдХрд╛ рддреЛ рдЬрд┐рдХреНрд░ рд╣реА рдирд╣реАрдВред рдПрдХреНрд╕реЗрд▓-рдкреАрдкреАрдкреА рдПрдХ рдЕрдЪреНрдЫреА рдЪреАрдЬрд╝ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА - рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ - рдпрд╣ рдЯреВрдЯ рдЬрд╛рддреА рд╣реИ, рдпрд╣ рдЯреЗрдврд╝реЗ-рдореЗрдврд╝реЗ рд░реВрдк рд╕реЗ рдХрдЯ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╕рдмрд╕реЗ рджреБрдЦрдж рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдЪрдордХ рдЧрдпрд╛ - рддреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╕рдм рдХреБрдЫ - рдлрд╝реЛрди рд▓рд╛рд▓ рд╣реИрдВ - рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреАрдкрдПрд▓рд┐рд╡реЗрдб рдХреЗ рдмрдЬрд╛рдп рдпреВрдХрд╛рд░реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреНрдпрд╛ рдлрд╛рдпрджрд╛ рд╣реИ? рд╣рд╛рдБ, рд╣рд░ рдЪреАрдЬрд╝ рдореЗрдВ - 100 рдЧреЗрдЯрд╡реЗ рд╣реИрдВ, рдХреАрдкрдЕрд▓рд╛рдЗрд╡реНрдб рдФрд░ рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ - рд╕рдм рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред 1 рдЧреЗрдЯрд╡реЗ рдпреВрдХрд╛рд░реНрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмрд╛рдПрдВ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдкрддреЗ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╢реЗрдпрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдЗрд╕ рдХреНрд╖рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд╕реНрд╡рд┐рдЪ/рдУрд▓реНрдЯреНрд╕/рдмреЗрд╕ рдкрд░ рдбреАрдПрдЪрд╕реАрдкреА-рд╕реНрдиреВрдкрд┐рдВрдЧ + рд╕реЛрд░реНрд╕-рдЧрд╛рд░реНрдб + рдПрдЖрд░рдкреА рдирд┐рд░реАрдХреНрд╖рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдкреЛрд░реНрдЯ рдкрд░ рдбреАрдПрдЪрдкреАрд╕реА рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рд╕реНрдЯреИрдЯрд┐рдХ - рдПрдХреНрд╕реЗрд╕-рд▓рд┐рд╕реНрдЯ рд╣реИред

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

рд▓рд┐рд╕рдЧ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╕рдВрд▓рдЧреНрди рд╣реИрдВред рд╢рд╛рдпрдж рдЙрдкрд░реЛрдХреНрдд рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╕рдВрд╕реНрдХрд░рдг 6 рдЕрднреА рддрдХ рд╣рдорд╛рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА - рд╕рдВрд╕реНрдХрд░рдг 6 рдХреЗ рд▓рд┐рдП рд▓рд┐рд╕рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд╣реА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред

рд▓рд┐рдирдХреНрд╕ рдЖрдИрдПрд╕рдЬреА
DB2DHCP
рд▓рд┐рдмрдЯрд┐рдиреНрд╕

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ