แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒขแƒแƒšแƒ”แƒ แƒแƒœแƒขแƒฃแƒšแƒ˜ IPeE แƒฅแƒกแƒ”แƒšแƒ˜ แƒ˜แƒ›แƒžแƒ แƒแƒ•แƒ˜แƒ–แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—

แƒ’แƒแƒ›แƒแƒ แƒฏแƒแƒ‘แƒ. แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก 5 แƒแƒ—แƒแƒกแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒฅแƒกแƒ”แƒšแƒ˜. แƒแƒฎแƒšแƒแƒฎแƒแƒœ แƒ“แƒแƒ“แƒ’แƒ แƒแƒ แƒช แƒ—แƒฃ แƒ˜แƒกแƒ” แƒกแƒแƒกแƒ˜แƒแƒ›แƒแƒ•แƒœแƒ แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜ - แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒชแƒ”แƒœแƒขแƒ แƒจแƒ˜ แƒ’แƒ•แƒแƒฅแƒ•แƒก Brocade RX8 แƒ“แƒ แƒ›แƒแƒœ แƒ“แƒแƒ˜แƒฌแƒงแƒ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒฃแƒชแƒœแƒแƒ‘แƒ˜-แƒฃแƒœแƒ˜แƒ™แƒแƒกแƒขแƒ˜แƒก แƒžแƒแƒ™แƒ”แƒขแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒฅแƒกแƒ”แƒšแƒ˜ แƒ“แƒแƒงแƒแƒคแƒ˜แƒšแƒ˜แƒ vlan-แƒ”แƒ‘แƒแƒ“ - แƒ”แƒก แƒœแƒแƒฌแƒ˜แƒšแƒแƒ‘แƒ แƒ˜แƒ• แƒแƒ  แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ, แƒ›แƒแƒ’แƒ แƒแƒ› แƒแƒ แƒ˜แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒ˜ แƒ•แƒšแƒแƒœแƒ”แƒ‘แƒ˜ แƒ—แƒ”แƒ—แƒ แƒ˜ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ.แƒจ. แƒ“แƒ แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒแƒ“แƒแƒญแƒ˜แƒ›แƒฃแƒšแƒ˜แƒ แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ—. แƒแƒฎแƒšแƒ แƒฌแƒแƒ แƒ›แƒแƒ˜แƒ“แƒ’แƒ˜แƒœแƒ”แƒ— แƒจแƒ”แƒ›แƒแƒ›แƒแƒ•แƒแƒšแƒ˜ แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ  แƒกแƒฌแƒแƒ•แƒšแƒแƒ‘แƒก แƒกแƒแƒ–แƒฆแƒ•แƒ แƒ˜แƒก แƒกแƒขแƒฃแƒ“แƒ”แƒœแƒขแƒแƒ“ แƒ“แƒ แƒ”แƒก แƒœแƒแƒ™แƒแƒ“แƒ˜ แƒ›แƒ˜แƒคแƒ แƒ˜แƒœแƒแƒ•แƒก แƒ แƒแƒ“แƒ˜แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜แƒกแƒ™แƒ”แƒœ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒ›แƒ” (แƒแƒœ แƒงแƒ•แƒ”แƒšแƒ) แƒกแƒแƒคแƒšแƒ˜แƒกแƒ™แƒ”แƒœ - แƒแƒ แƒฎแƒ˜ แƒฉแƒแƒ™แƒ”แƒขแƒ˜แƒšแƒ˜แƒ - แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒ‘แƒ แƒแƒ–แƒ“แƒ”แƒ‘แƒ˜แƒแƒœ - แƒกแƒ”แƒ•แƒ“แƒ...

แƒ›แƒ˜แƒ–แƒแƒœแƒ˜ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒ“ แƒ’แƒแƒ“แƒแƒฅแƒชแƒ”แƒ•แƒ. แƒ›แƒ” แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘แƒ“แƒ˜ q-in-q-แƒ˜แƒก แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ— แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก vlan-แƒ˜แƒ—, แƒ›แƒแƒ’แƒ แƒแƒ› แƒงแƒ•แƒ”แƒšแƒ แƒกแƒแƒฎแƒ˜แƒก แƒแƒžแƒแƒ แƒแƒขแƒฃแƒ แƒ, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ P3310, แƒ แƒแƒ“แƒ”แƒกแƒแƒช dot1q แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ, แƒฌแƒงแƒ•แƒ”แƒขแƒก DHCP-แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒแƒก, แƒ›แƒแƒ— แƒแƒกแƒ”แƒ•แƒ” แƒแƒ  แƒ˜แƒชแƒ˜แƒแƒœ แƒ แƒแƒ’แƒแƒ  แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒœ qinq แƒ“แƒ แƒ›แƒ แƒแƒ•แƒแƒšแƒ˜. แƒแƒ› แƒกแƒแƒฎแƒ˜แƒก แƒฎแƒแƒคแƒแƒœแƒ’แƒ”แƒ‘แƒ˜. แƒ แƒ แƒแƒ แƒ˜แƒก ip-unnamebered แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก? แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ™แƒšแƒ”แƒ“: แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ + แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ–แƒ”. แƒฉแƒ•แƒ”แƒœแƒ˜ แƒแƒ›แƒแƒชแƒแƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ: แƒ’แƒแƒ•แƒญแƒ แƒแƒ— แƒคแƒแƒ แƒ›แƒ˜แƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, แƒ›แƒ˜แƒ•แƒแƒฌแƒแƒ“แƒแƒ— แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒก, แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒ˜ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ”แƒ‘แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒ—. แƒ แƒแƒ’แƒแƒ  แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒแƒ— แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜? Shaper - lisg, dhcp - db2dhcp แƒแƒ  แƒ“แƒแƒ›แƒแƒฃแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒ”แƒš แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, dhcprelay แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ”, ucarp แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ”แƒ‘แƒ–แƒ” - แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒแƒ›แƒแƒขแƒแƒ— แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒ˜? แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒฌแƒ˜แƒœแƒแƒกแƒฌแƒแƒ  แƒ“แƒแƒแƒ›แƒแƒขแƒแƒ— แƒ“แƒ˜แƒ“แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒ— - แƒ›แƒแƒ’แƒ แƒแƒ› แƒ”แƒก แƒแƒกแƒ” แƒแƒ  แƒแƒ แƒ˜แƒก. แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ•แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ— แƒ—แƒ•แƒ˜แƒ—แƒœแƒแƒฌแƒ”แƒ แƒ˜ แƒงแƒแƒ•แƒแƒ แƒฏแƒ”แƒœแƒ˜.

แƒ˜แƒœแƒขแƒ”แƒ แƒœแƒ”แƒขแƒจแƒ˜ แƒกแƒแƒคแƒฃแƒซแƒ•แƒšแƒ˜แƒแƒœแƒ˜ แƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ•แƒ˜แƒžแƒแƒ•แƒ” แƒจแƒ”แƒกแƒแƒœแƒ˜แƒจแƒœแƒแƒ•แƒ˜ แƒ›แƒแƒฆแƒแƒšแƒ˜ แƒ“แƒแƒœแƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ C++-แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒšแƒแƒ›แƒแƒ–แƒแƒ“ แƒแƒ›แƒแƒ˜แƒกแƒฃแƒœแƒ—แƒฅแƒแƒ— แƒขแƒ แƒแƒคแƒ˜แƒ™แƒ˜. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒก, แƒแƒกแƒ”แƒ—แƒ˜แƒ - แƒฉแƒ•แƒ”แƒœ แƒ•แƒฃแƒกแƒ›แƒ”แƒœแƒ— arp แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ–แƒ”, แƒ—แƒฃ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ lo แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒšแƒ˜แƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒก แƒแƒ› แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒ แƒ•แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ— แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ  arp-แƒก. แƒฉแƒแƒฌแƒ”แƒ แƒ”แƒ— แƒแƒ› 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 แƒกแƒ˜แƒ’แƒœแƒแƒšแƒ˜แƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”. แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ แƒœแƒ”แƒขแƒšแƒ˜แƒœแƒ™แƒก? แƒ”แƒก แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒกแƒ˜แƒ–แƒแƒ แƒ›แƒแƒชแƒ”แƒ แƒ“แƒ Linux แƒแƒ แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ–แƒ” - แƒแƒกแƒ” แƒ แƒแƒ›, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒ™แƒแƒ แƒ’แƒแƒ“แƒแƒ. แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒ˜ แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒ˜แƒ, แƒ แƒ แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜? แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒฉแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ•แƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ— แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒแƒ แƒ˜แƒก แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ” แƒกแƒแƒ–แƒฆแƒ•แƒแƒ แƒ–แƒ” - แƒแƒฅ, แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ›แƒแƒซแƒ•แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒ, แƒฉแƒ•แƒ”แƒœ แƒแƒ•แƒ˜แƒฆแƒ”แƒ— แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒชแƒ˜แƒ แƒ” แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒแƒ‘แƒ˜แƒก แƒ’แƒ–แƒ - แƒ”แƒก แƒ“แƒแƒ•แƒแƒšแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ•แƒ”แƒชแƒ˜แƒ— BGP-แƒก.

bgp แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ *******
แƒžแƒแƒ แƒแƒšแƒ˜ ******
แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ /var/log/bgp.log
!
# AS แƒœแƒแƒ›แƒ”แƒ แƒ˜, แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜ แƒ“แƒ แƒฅแƒกแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒคแƒ˜แƒฅแƒขแƒ˜แƒฃแƒ แƒ˜แƒ
แƒ แƒแƒฃแƒขแƒ”แƒ แƒ˜ bgp 12345
bgp แƒ แƒแƒฃแƒขแƒ”แƒ แƒ˜แƒก ID 1.2.3.4
แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ
แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ’แƒแƒ“แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ
แƒ›แƒ”แƒ–แƒแƒ‘แƒ”แƒšแƒ˜ 1.2.3.1 แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒ˜ - แƒ แƒแƒ’แƒแƒ แƒช 12345
แƒ›แƒ”แƒ–แƒแƒ‘แƒ”แƒšแƒ˜ 1.2.3.1 แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ hop-self
แƒ›แƒ”แƒ–แƒแƒ‘แƒ”แƒšแƒ˜ 1.2.3.1 แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒ แƒฃแƒ™แƒ แƒแƒ  แƒแƒ แƒ˜แƒก
แƒ›แƒ”แƒ–แƒแƒ‘แƒ”แƒšแƒ˜ 1.2.3.1 แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒ แƒฃแƒ™แƒ แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜
!
แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒกแƒ˜แƒ แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜แƒก แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ 1.2.3.0/24
!
แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒ แƒฃแƒ™แƒ แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜แƒก แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ 10
แƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜แƒก แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒก
!
แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ˜แƒก แƒ แƒฃแƒ™แƒ แƒ”แƒฅแƒกแƒžแƒแƒ แƒขแƒ˜แƒก แƒฃแƒแƒ แƒงแƒแƒคแƒ 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"

แƒ–แƒ”แƒ•แƒ˜แƒ—.แƒจ


#!/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. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜ - lisg แƒแƒกแƒ”แƒ•แƒ” แƒแƒฎแƒ•แƒ”แƒ•แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒก แƒ“แƒ แƒฉแƒ•แƒ”แƒœ แƒฃแƒ™แƒ•แƒ” แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒคแƒแƒ แƒ›แƒ. แƒ แƒแƒขแƒแƒ› แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒกแƒ” แƒ’แƒ แƒซแƒ”แƒšแƒ˜ แƒ“แƒ แƒ แƒ—แƒฃแƒšแƒ˜? แƒฃแƒคแƒ แƒ แƒแƒ“แƒ•แƒ˜แƒšแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก accel-pppd-แƒ˜แƒก แƒแƒฆแƒ”แƒ‘แƒ แƒ“แƒ แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ pppoe-แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ? แƒแƒ แƒ, แƒ”แƒก แƒแƒ  แƒแƒ แƒ˜แƒก แƒฃแƒคแƒ แƒ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ - แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜ แƒซแƒœแƒ”แƒšแƒแƒ“ แƒแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ”แƒœ แƒžแƒแƒฉแƒ™แƒแƒ แƒ“แƒก แƒ แƒแƒฃแƒขแƒ”แƒ แƒจแƒ˜, แƒ แƒแƒ› แƒแƒฆแƒแƒ แƒแƒคแƒ”แƒ แƒ˜ แƒ•แƒ—แƒฅแƒ•แƒแƒ— pppoe-แƒ–แƒ”. accel-ppp แƒ›แƒแƒ’แƒแƒ แƒ˜ แƒ แƒแƒ›แƒ”แƒ - แƒ›แƒแƒ’แƒ แƒแƒ› แƒฉแƒ•แƒ”แƒœแƒ—แƒแƒœ แƒแƒ  แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒ“แƒ - แƒ™แƒแƒ“แƒจแƒ˜ แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ - แƒ˜แƒจแƒšแƒ”แƒ‘แƒ, แƒญแƒ แƒ˜แƒก แƒ“แƒ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒกแƒแƒ›แƒฌแƒฃแƒฎแƒแƒ แƒ แƒ˜แƒก แƒแƒ แƒ˜แƒก, แƒ แƒแƒ› แƒ—แƒฃ แƒ’แƒแƒ‘แƒ แƒฌแƒงแƒ˜แƒœแƒ“แƒ - แƒ›แƒแƒจแƒ˜แƒœ แƒฎแƒแƒšแƒฎแƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ - แƒขแƒ”แƒšแƒ”แƒคแƒแƒœแƒ”แƒ‘แƒ˜ แƒฌแƒ˜แƒ—แƒ”แƒšแƒ˜แƒ - แƒกแƒแƒ”แƒ แƒ—แƒแƒ“ แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ“แƒ. แƒ แƒ แƒฃแƒžแƒ˜แƒ แƒแƒขแƒ”แƒกแƒแƒ‘แƒ แƒแƒฅแƒ•แƒก แƒฃแƒ™แƒแƒ แƒžแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก, แƒ•แƒ˜แƒ“แƒ แƒ” แƒจแƒ”แƒœแƒแƒฎแƒ•แƒ? แƒ“แƒ˜แƒแƒฎ, แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒจแƒ˜ - แƒแƒ แƒ˜แƒก 100 แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ”, แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ“แƒ แƒ”แƒ แƒ—แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒแƒจแƒ˜ - แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜ แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก. 1 แƒ™แƒแƒ แƒ˜แƒ‘แƒญแƒ” แƒแƒ  แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒฃแƒ™แƒแƒ แƒžแƒ—แƒแƒœ. แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒแƒกแƒ—แƒแƒœ แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒ›แƒ‘แƒแƒ‘แƒ”แƒœ, แƒ แƒแƒ› แƒ›แƒแƒ แƒชแƒฎแƒ”แƒœแƒแƒ”แƒ‘แƒ˜ แƒ“แƒแƒแƒ แƒ”แƒ’แƒ˜แƒกแƒขแƒ แƒ˜แƒ แƒ”แƒ‘แƒ”แƒœ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ”แƒœ แƒ›แƒแƒ— แƒฌแƒ˜แƒšแƒ–แƒ” - แƒแƒ› แƒ›แƒแƒ›แƒ”แƒœแƒขแƒ˜แƒก แƒ’แƒแƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒšแƒแƒ“ แƒงแƒ•แƒ”แƒšแƒ แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒ–แƒ”/แƒแƒšแƒขแƒก/แƒ‘แƒแƒ–แƒ–แƒ” แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ— dhcp-snooping + source-guard + arp แƒ˜แƒœแƒกแƒžแƒ”แƒฅแƒขแƒ˜แƒ แƒ”แƒ‘แƒ. แƒ—แƒฃ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒก แƒแƒ  แƒแƒฅแƒ•แƒก dhpc, แƒ›แƒแƒ’แƒ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ™แƒฃแƒ แƒ˜ - แƒฌแƒ•แƒ“แƒแƒ›แƒ˜แƒก แƒกแƒ˜แƒ แƒžแƒแƒ แƒขแƒ–แƒ”.

แƒ แƒแƒขแƒแƒ› แƒ’แƒแƒ™แƒ”แƒ—แƒ“แƒ แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜? แƒแƒ แƒแƒกแƒแƒกแƒฃแƒ แƒ•แƒ”แƒšแƒ˜ แƒ›แƒแƒซแƒ แƒแƒแƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒ“แƒ’แƒฃแƒ แƒ”แƒ‘แƒ. แƒแƒฎแƒšแƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒš แƒ’แƒแƒ“แƒแƒ›แƒ แƒ—แƒ•แƒ”แƒšแƒก แƒแƒฅแƒ•แƒก แƒ—แƒแƒ•แƒ˜แƒกแƒ˜ vlan แƒ“แƒ แƒฃแƒชแƒœแƒแƒ‘แƒ˜-unicast แƒแƒฆแƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒจแƒ˜แƒœแƒ”แƒšแƒ˜, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ›แƒแƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ”แƒ แƒ— แƒžแƒแƒ แƒขแƒจแƒ˜ แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒฌแƒแƒกแƒ•แƒšแƒ แƒ“แƒ แƒแƒ แƒ แƒงแƒ•แƒ”แƒšแƒ... แƒ˜แƒกแƒ”, แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ—แƒ˜ แƒ”แƒคแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒแƒฆแƒญแƒฃแƒ แƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒก แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ–แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ, แƒฃแƒคแƒ แƒ แƒ“แƒ˜แƒ“แƒ˜ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒแƒ‘แƒ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒ•แƒ แƒชแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒแƒคแƒแƒจแƒ˜.

Lisg-แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒชแƒแƒšแƒ™แƒ” แƒ—แƒ”แƒ›แƒแƒ. แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ›แƒฃแƒšแƒ”แƒ‘แƒ˜ แƒ”แƒ แƒ—แƒ•แƒ˜แƒก. แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ, แƒ–แƒ”แƒ›แƒแƒแƒฆแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜ แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒ“แƒแƒ”แƒฎแƒ›แƒแƒ แƒแƒก แƒ›แƒ˜แƒ–แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒฆแƒฌแƒ”แƒ•แƒแƒจแƒ˜. แƒ•แƒ”แƒ แƒกแƒ˜แƒ 6 แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ˜แƒšแƒ˜ แƒฉแƒ•แƒ”แƒœแƒก แƒฅแƒกแƒ”แƒšแƒจแƒ˜ - แƒ›แƒแƒ’แƒ แƒแƒ› แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ - แƒ˜แƒ’แƒ”แƒ’แƒ›แƒ”แƒ‘แƒ 6 แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก lisg-แƒ˜แƒก แƒ’แƒแƒ“แƒแƒฌแƒ”แƒ แƒ แƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ›แƒแƒขแƒ”แƒ‘แƒก แƒ›แƒแƒ แƒจแƒ แƒฃแƒขแƒ”แƒ‘แƒก.

Linux ISG
DB2DHCP
แƒšแƒ˜แƒ‘แƒขแƒ˜แƒœแƒ”แƒ‘แƒ˜

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ