ืฉื•ืœื“-ื˜ืึธืœืขืจืึทื ื˜ IPeE ื ืขืฅ ืžื™ื˜ ื™ืžืคึผืจืึทื•ื•ื™ื™ื–ื“ ืžื›ืฉื™ืจื™ื

ื”ืขืœื. ื“ืขื ืžื™ื˜ืœ ืขืก ืื™ื– ืึท ื ืขืฅ ืคื•ืŸ 5 ืง ืงืœื™ื™ืึทื ืฅ. ืœืขืฆื˜ื ืก ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื ื™ื˜ ื–ื™ื™ืขืจ ืึธื ื’ืขื ืขื ืžืึธืžืขื ื˜ - ืื™ืŸ ื“ืขื ืฆืขื ื˜ืขืจ ืคื•ืŸ ื“ื™ ื ืขืฅ ืžื™ืจ ื”ืึธื‘ืŸ ืึท ื‘ืจืึธืงืึทื“ืข ืจืงืก 8 ืื•ืŸ ืขืก ืกื˜ืึทืจื˜ืขื“ ืฉื™ืงื˜ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืื•ืžื‘ืึทืงืึทื ื˜-ื•ื ื™ืงืึทืกื˜ ืคึผืึทืงื™ืฅ, ื–ื™ื ื˜ ื“ื™ ื ืขืฅ ืื™ื– ืฆืขื˜ื™ื™ืœื˜ ืื™ืŸ ื•ื•ืœืึทื ื– - ื“ืึธืก ืื™ื– ื˜ื™ื™ืœื•ื•ื™ื™ื– ื ื™ืฉื˜ ืึท ืคึผืจืึธื‘ืœืขื, ืึธื‘ืขืจ ืขืก ื–ืขื ืขืŸ ืกืคึผืขืฆื™ืขืœืข ื•ื•ืœืึทื ื– ืคึฟืึทืจ ื•ื•ื™ื™ึทืก ืึทื“ืจืขืกืขืก, ืขื˜ืง. ืื•ืŸ ื–ื™ื™ ื–ืขื ืขืŸ ืื•ื™ืกื’ืขืฉื˜ืจืขืงื˜ ืื™ืŸ ืึทืœืข ืจื™ื›ื˜ื•ื ื’ืขืŸ ืคื•ืŸ ื“ืขืจ ื ืขืฅ. ื™ืขืฆื˜ ืฉื˜ืขืœ ื–ื™ืš ืคืืจ ื ืื ืงื•ืžืขื ื“ื™ื’ืข ืฉื˜ืจืึธื ืฆื• ื“ื™ ืื“ืจืขืก ืคื•ืŸ ื ืงืœื™ืขื ื˜ ื•ื•ืืก ืœืขืจื ื˜ ื ื™ืฉื˜ ืืœืก ื’ืจืขื ื™ืฅ ืกื˜ื•ื“ืขื ื˜ ืื•ืŸ ื“ืขืจ ืฉื˜ืจืึธื ืคืœื™ื˜ ืฆื• ื ืจืื“ื™ื ืœื™ื ืง ืฆื• ืขืคืขืก (ืื“ืขืจ ืืœืข) ื“ืืจืฃ - ื“ืขืจ ืงืื ืืœ ืื™ื– ืคืืจืฉื˜ืืคื˜ - ื“ื™ ืงืœื™ื™ืึทื ืฅ ื–ืขื ืขืŸ ื‘ื™ื™ื– - ื˜ืจื•ื™ืขืจื™ืง...

ื“ืขืจ ืฆื™ืœ ืื™ื– ืฆื• ื•ื•ืขื ื“ืŸ ืึท ื–ืฉื•ืง ืื™ืŸ ืึท ืฉื˜ืจื™ืš. ืื™ืš ื”ืึธื‘ ื’ืขื˜ืจืึทื›ื˜ ืื™ืŸ ื“ืขืจ ืจื™ื›ื˜ื•ื ื’ ืคื•ืŸ q-in-q ืžื™ื˜ ืึท ืคื•ืœ-ืคืœืขื“ื–ืฉื“ ืงืœื™ืขื ื˜ ื•ื•ืœืึทืŸ, ืึธื‘ืขืจ ืึทืœืข ืกืึธืจืฅ ืคื•ืŸ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ื•ื•ื™ P3310, ื•ื•ืขืŸ dot1q ืื™ื– ืขื ื™ื™ื‘ืึทืœื“, ืกื˜ืึทืคึผืก ืœืึธื–ืŸ DHCP ื“ื•ืจืš, ื–ื™ื™ ืื•ื™ืš ื˜ืึธืŸ ื ื™ื˜ ื•ื•ื™ืกืŸ ื•ื•ื™ ืฆื• ืกืขืœืขืงื˜ื™ื•ื• qinq ืื•ืŸ ืคื™ืœืข ืคึผื™ื˜ืคืึธืœื– ืคื•ืŸ ื“ืขื ืžื™ืŸ. ื•ื•ืึธืก ืื™ื– ื™ืคึผ-ืึทื ื ืึทืžื‘ืขืจื“ ืื•ืŸ ื•ื•ื™ ื˜ื•ื˜ ืขืก ืึทืจื‘ืขื˜? ื–ื™ื™ืขืจ ื‘ืขืงื™ืฆืขืจ: ื’ื™ื™ื˜ื•ื•ื™ื™ ืึทื“ืจืขืก + ืžืึทืจืฉืจื•ื˜ ืื•ื™ืฃ ื“ื™ ืฆื•ื‘ื™ื ื“. ืคึฟืึทืจ ืื•ื ื“ื–ืขืจ ืึทืจื‘ืขื˜, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื•: ืฉื ื™ื™ึทื“ืŸ ื“ื™ ืฉืึทืคึผืขืจ, ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืึทื“ืจืขืกืขืก ืฆื• ืงืœื™ื™ืึทื ืฅ, ืœื™ื™ื’ืŸ ืจื•ืฅ ืฆื• ืงืœื™ื™ืึทื ืฅ ื“ื•ืจืš ื–ื™ื›ืขืจ ื™ื ื˜ืขืจืคื™ื™ืกื™ื–. ื•ื•ื™ ืฆื• ื˜ืึธืŸ ื“ืึธืก ืึทืœืฅ? Shaper - lisg, dhcp - db2dhcp ืื•ื™ืฃ ืฆื•ื•ื™ื™ ืคืจื™ื™ึท ืกืขืจื•ื•ืขืจืก, dhcprelay ืœื•ื™ืคื˜ ืื•ื™ืฃ ืึทืงืกืขืก ืกืขืจื•ื•ืขืจืก, ucarp ืื•ื™ืš ืœื•ื™ืคื˜ ืื•ื™ืฃ ืึทืงืกืขืก ืกืขืจื•ื•ืขืจืก - ืคึฟืึทืจ ื‘ืึทืงืึทืคึผ. ืื‘ืขืจ ื•ื•ื™ ืฆื• ืœื™ื™ื’ืŸ ืจื•ืฅ? ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ืึทืœืฅ ืื™ืŸ ืฉื˜ื™ื™ึทื’ืŸ ืžื™ื˜ ืึท ื’ืจื•ื™ืก ืฉืจื™ืคื˜ - ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืืžืช. ืึทื–ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ืžืึทื›ืŸ ืึท ื–ื™ืš-ื’ืขืฉืจื™ื‘ืŸ ืงืจืึทื˜ืฉ.

ื ืึธืš ืึท ื’ืจื•ื ื˜ื™ืง ื–ื•ื›ืŸ ืื•ื™ืฃ ื“ืขืจ ืื™ื ื˜ืขืจื ืขืฅ, ืื™ืš ื’ืขืคึฟื•ื ืขืŸ ืึท ื•ื•ื•ื ื“ืขืจืœืขืš ื”ื•ื™ืš-ืžื“ืจื’ื” ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคึฟืึทืจ C ++, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืฉื™ื™ืŸ ืฆื•ืฉืžืขืงืŸ ืคืึทืจืงืขืจ. ื“ืขืจ ืึทืœื’ืขืจื™ื“ืึทื ืคึฟืึทืจ ื“ื™ ืคึผืจืึธื’ืจืึทื ื•ื•ืึธืก ืžื•ืกื™ืฃ ืจื•ืฅ ืื™ื– ื•ื•ื™ ื’ื™ื™ื˜ - ืžื™ืจ ื”ืขืจืŸ ืฆื• ืึทืจืคึผ ืจื™ืงื•ื•ืขืก ืื•ื™ืฃ ื“ื™ ืฆื•ื‘ื™ื ื“, ืื•ื™ื‘ ืžื™ืจ ื”ืึธื‘ืŸ ืึทืŸ ืึทื“ืจืขืก ืื•ื™ืฃ ื“ื™ ืœืึธ ืฆื•ื‘ื™ื ื“ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ ื•ื•ืึธืก ืื™ื– ื’ืขื‘ืขื˜ืŸ, ืžื™ืจ ืœื™ื™ื’ืŸ ืึท ืžืึทืจืฉืจื•ื˜ ื“ื•ืจืš ื“ืขื ืฆื•ื‘ื™ื ื“ ืื•ืŸ ืœื™ื™ื’ืŸ ืึท ืกื˜ืึทื˜ื™ืง ืึทืจืคึผ. ืจืขืงืึธืจื“ ืฆื• ื“ืขื ื™ืคึผ - ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ืึท ื‘ื™ืกืœ ืงืึธืคึผื™ืข-ืคึผืึทืกื˜ืขืก, ืึท ื‘ื™ืกืœ ืึทื“ื–ืฉื™ืงื˜ื™ื•ื• ืื•ืŸ ืื™ืจ ื ื™ื˜ืึธ ื’ืขื˜ืืŸ

ืงื•ื•ืืœืŸ ืคื•ืŸ ื“ื™ 'ืจืึธื•ื˜ืขืจ'

#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;
    }
}

ืœื™ื‘ื˜ื™ื ืก ื™ื ืกื˜ืึทืœื™ืจื•ื ื’ ืฉืจื™ืคื˜

#!/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 configื‘ืึทืœืขื‘ืึธืก ื ืึธืžืขืŸ *******
ืคึผืึทืจืึธืœ *******
ืงืœืึธืฅ ื˜ืขืงืข /var/log/bgp.log
!
# AS ื ื•ืžืขืจ, ื•ื•ืขื ื“ื˜ ืื•ืŸ ื ืขื˜ื•ื•ืึธืจืงืก ื–ืขื ืขืŸ ืคื™ืงื˜ื™ืฉ
ืจืึทื•ื˜ืขืจ bgp 12345
bgp router-id 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

ืœืึธืžื™ืจ ืคืึธืจื–ืขืฆืŸ. ื›ึผื“ื™ ื“ืขืจ ืกืขืจื•ื•ืขืจ ื–ืึธืœ ืจื™ืกืคึผืึทื ื“ ืฆื• ืึทืจืคึผ ืจื™ืงื•ื•ืขืก, ืื™ืจ ืžื•ื–ืŸ ื’ืขื‘ืŸ ื“ื™ ืึทืจืคึผ ืคืจืืงืกื™.


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"

ืึทืจื•ื™ืฃ.ืฉ


#!/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, ืขื˜ืง. ืื™ืš ื•ื•ืขืœ ื ื™ืฉื˜ ื–ืึธื’ืŸ ืื™ืจ ื•ื•ื™ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ืจืขืœืข - ืึทืœืฅ ืื™ื– ืคึผืฉื•ื˜.

ืึทื–ื•ื™ ื•ื•ืึธืก ื˜ืึธืŸ ืžื™ืจ ื”ืึธื‘ืŸ? ื‘ืึทืงืงื•ืคึผ ืคื•ืŸ ื’ื™ื™ื˜ื•ื•ื™ื™ื–, ืึทื•ื˜ืึธ-ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืคื•ืŸ ืจื•ืฅ, dhcp. ื“ืึธืก ืื™ื– ื“ืขืจ ืžื™ื ื™ืžื•ื ืฉื˜ืขืœืŸ - ืœื™ืกื’ ืื•ื™ืš ืจืึทืคึผืก ืึทืœืฅ ืึทืจื•ื ืื™ื ืื•ืŸ ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืึท ืฉืึทืคืขืจ. ืคืืจื•ื•ืืก ืื™ื– ืึทืœืฅ ืึทื–ื•ื™ ืœืึทื ื’ ืื•ืŸ ืงืึทื ืคื™ื•ื–ื™ื ื’? ืื™ื– ืขืก ื ื™ืฉื˜ ื’ืจื™ื ื’ืขืจ ืฆื• ื ืขืžืขืŸ ืึทืงืกืขืœ-ืคึผืคึผืคึผื“ ืื•ืŸ ื ื•ืฆืŸ pppoe ื‘ืขืกืึทื›ืึทืงืœ? ื ื™ื™ืŸ, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืกื™ืžืคึผืœืขืจ - ืžืขื ื˜ืฉืŸ ืงืขื ืขืŸ ืงื•ื™ื ืคึผืึทืกื™ืง ืึท ืคึผืึทื˜ืฉืงืึธืจื“ ืื™ืŸ ืึท ืจืึทื•ื˜ืขืจ, ื ื™ื˜ ืฆื• ื“ืขืจืžืึธื ืขืŸ ืคึผืคึผืคึผืึธืข. accel-ppp ืื™ื– ืึท ืงื™ืœ ื–ืึทืš - ืึธื‘ืขืจ ืขืก ื”ืื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืคึฟืึทืจ ืื•ื ื“ื– - ืขืก ื–ืขื ืขืŸ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืขืจืจืึธืจืก ืื™ืŸ ื“ื™ ืงืึธื“ - ืขืก ืงืจืึทืžื‘ืึทืœื–, ืขืก ืฉื ื™ื™ื“ื˜ ืงืจื•ื, ืื•ืŸ ื“ื™ ื˜ืจื•ื™ืขืจื™ืง ื–ืึทืš ืื™ื– ืึทื– ืื•ื™ื‘ ืขืก ื‘ืจื™ื™ื˜ืึทื ื“ ืึทืจื•ื™ืฃ - ื“ืขืžืึธืœื˜ ืžืขื ื˜ืฉืŸ ื“ืึทืจืคึฟืŸ ืฆื• ืจื™ืœืึธื•ื“ ืึทืœืฅ - ื“ื™ ืคืึธื ืขืก ื–ืขื ืขืŸ ืจื•ื™ื˜ - ืขืก ื”ืื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ. ื•ื•ืึธืก ืื™ื– ื“ื™ ืžื™ื™ึทืœืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื ื™ืฆืŸ ื•ืงืึทืจืคึผ ืืœื ื•ื•ื™ ืงืขืคึผืึทืœื™ื•ื•ืขื“? ื™ืึธ, ืื™ืŸ ืึทืœืฅ - ืขืก ื–ืขื ืขืŸ 100 ื’ื™ื™ื˜ื•ื•ื™ื™ื–, ืงืขืขืึทืœื™ื•ื•ืขื“ ืื•ืŸ ืื™ื™ืŸ ื˜ืขื•ืช ืื™ืŸ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ - ืึทืœืฅ ืึทืจื‘ืขื˜ ื ื™ืฉื˜. 1 ื’ื™ื™ื˜ื•ื•ื™ื™ ื˜ื•ื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื•ืงืึทืจืคึผ. ื‘ื ื•ื’ืข ื–ื™ื›ืขืจื”ื™ื™ื˜ ื–ืื’ืŸ ื–ื™ื™ ืื– ื“ื™ ืœื™ื ืงืข ื•ื•ืขืœืŸ ืคืืจืฉืจื™ื™ื‘ืŸ ืื“ืจืขืกืŸ ืคืืจ ื–ื™ืš ืื•ืŸ ื–ื™ื™ ื ื•ืฆืŸ ืื•ื™ืฃ ื“ื™ ืฉืขืจ - ืฆื• ืงืื ื˜ืจืืœื™ืจืŸ ื“ืขื ืžืืžืขื ื˜ ื”ืื‘ืŸ ืžื™ืจ ืื•ื™ืคื’ืขืฉื˜ืขืœื˜ dhcp-snooping + source-guard + arp ื“ื•ืจื›ืงื•ืง ืื•ื™ืฃ ืืœืข ืกื•ื•ื™ื˜ืฉื™ื–/ืึธืœืฅ/ื‘ืืกืขืก. ืื•ื™ื‘ ื“ืขืจ ืงืœื™ืขื ื˜ ื”ืื˜ ื ื™ืฉื˜ ื“ื”ืคึผืง ืึธื‘ืขืจ ืกื˜ืึทื˜ื™ืง - ืึทืงืกืขืก-ืจืฉื™ืžื” ืื•ื™ืฃ ื“ื™ ืคึผืึธืจื˜.

ืคืืจื•ื•ืืก ืื™ื– ื“ืึธืก ืึทืœืข ื’ืขื˜ืืŸ? ืฆื• ืฆืขืฉื˜ืขืจืŸ ืึทื ื•ื•ืึธื ื˜ื™ื“ ืคืึทืจืงืขืจ. ืื™ืฆื˜ ื™ืขื“ืขืจ ื‘ืึทืฉื˜ื™ืžืขืŸ ื”ืื˜ ื–ื™ื™ึทืŸ ืื™ื™ื’ืŸ ื•ื•ืœืึทืŸ ืื•ืŸ ืื•ืžื‘ืึทืงืึทื ื˜-ื•ื ื™ืงืึทืกื˜ ืื™ื– ื ื™ื˜ ืžืขืจ ืกืงืขืจื™, ื–ื™ื ื˜ ืขืก ื ืึธืจ ื“ืึทืจืฃ ืฆื• ื’ื™ื™ืŸ ืฆื• ืื™ื™ืŸ ืคึผืึธืจื˜ ืื•ืŸ ื ื™ื˜ ืฆื• ืึทืœืข ... ื ื•, ื“ื™ ื–ื™ื™ึทื˜ ื™ืคืขืงืฅ ื–ืขื ืขืŸ ืึท ืกื˜ืึทื ื“ืขืจื“ื™ื™ื–ื“ ื•ื™ืกืจื™ื›ื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืžืขืจ ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜ ืื™ืŸ ืึทืœืึทืงื™ื™ื˜ื™ื ื’ ืึทื“ืจืขืก ืคึผืœืึทืฅ.

ื•ื•ื™ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืœื™ืกื’ ืื™ื– ืึท ื‘ืึทื–ื•ื ื“ืขืจ ื˜ืขืžืข. ืœื™ื ืงืก ืฆื• ื‘ื™ื‘ืœื™ืึธื˜ืขืง ื–ืขื ืขืŸ ืึทื˜ืึทื˜ืฉื˜. ื˜ืึธืžืขืจ ื“ื™ ืื•ื™ื‘ืŸ ื•ื•ืขื˜ ื”ืขืœืคืŸ ืขืžืขืฆืขืจ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื–ื™ื™ืขืจ ืฆื™ืœืŸ. ื•ื•ืขืจืกื™ืข 6 ืื™ื– ื ืึธืš ื ื™ืฉื˜ ื™ืžืคึผืœืึทืžืขื ืึทื“ ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื ืขืฅ - ืึธื‘ืขืจ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืึท ืคึผืจืึธื‘ืœืขื - ืขืก ื–ืขื ืขืŸ ืคึผืœืึทื ื– ืฆื• ืจื™ืจื™ื™ื˜ ืœื™ืกื’ ืคึฟืึทืจ ื•ื•ืขืจืกื™ืข 6, ืื•ืŸ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื ื™ื™ื˜ื™ืง ืฆื• ืคืึทืจืจื™ื›ื˜ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ื•ื•ืึธืก ืžื•ืกื™ืฃ ืจื•ืฅ.

ืœื™ื ื•ืงืก ISG
DB2DHCP
ืœื™ื‘ื˜ื™ื ืก

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’