ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²Π° IPeE ΠΌΡ€Π΅ΠΆΠ° ΠΎΡ‚ ΠΏΠΎΠ΄Ρ€ΡŠΡ‡Π½ΠΈ срСдства

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅. Има ΠΌΡ€Π΅ΠΆΠ° ΠΎΡ‚ 5000 ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ. НСотдавна сС появи нСприятСн ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” Π² Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° ΠΈΠΌΠ°ΠΌΠ΅ Brocade RX8, ΠΊΠΎΠΉΡ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΌΠ½ΠΎΠ³ΠΎ unknown-unicast ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π° Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° VLAN β€” отчасти Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, НО ΠΈΠΌΠ° спСциални VLAN Π·Π° Π±Π΅Π»ΠΈ адрСси ΠΈ Ρ‚.Π½., ΠΊΠΎΠΈΡ‚ΠΎ са Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ във всички направлСния Π½Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си входящия ΠΏΠΎΡ‚ΠΎΠΊ Π½Π° адрСса Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС ΡƒΡ‡ΠΈ ΠΎΡ‚ Π±ΠΎΡ€Π΄Π΅Ρ€Π°, ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚Ρ€ΡŠΠ³Π²Π° към Ρ€Π°Π΄ΠΈΠΎ Π»ΠΈΠ½ΠΊΠ° Π½Π° някоС (ΠΈΠ»ΠΈ Π½Π° всичкитС) сСло β€” ΠΊΠ°Π½Π°Π»ΡŠΡ‚ Π΅ Π·Π°Π΅Ρ‚ β€” ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ са Π½Π΅Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ β€” Ρ‚ΡŠΠ³Π°β€¦

Π—Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΅ β€” Π΄Π° ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² прСдимство. ΠœΠΈΡΠ»Π΅Ρ… Π² посока q-in-q с пълСн ΠΊΠ»ΠΈΠ΅Π½Ρ‚-VLAN, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ устройства ΠΊΠ°Ρ‚ΠΎ P3310 спират Π΄Π° пропускат DHCP ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° dot1q, освСн Ρ‚ΠΎΠ²Π° Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° правят сСлСктивно qinq ΠΈ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΠΈ камъни Π² Ρ‚ΠΎΠ·ΠΈ смисъл. Какво Π΅ ip-unnumbered ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ? Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅ β€” адрСс Π½Π° шлюза + ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ Π½Π° интСрфСйса. Π—Π° Π½Π°ΡˆΠ°Ρ‚Π° Π·Π°Π΄Π°Ρ‡Π° Π½ΠΈ трябва: Π΄Π° Ρ€Π΅ΠΆΠ΅ΠΌ ΡˆΠ΅ΠΉΠΏΠ΅Ρ€Π°, Π΄Π° Ρ€Π°Π·Π΄Π°Π²Π°ΠΌΠ΅ адрСси Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅, Π΄Π° добавямС ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ Π·Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Ρ‡Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ интСрфСйси. Π‘ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ? Π¨Π΅ΠΉΠΏΠ΅Ρ€ β€” 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 сигнал ΠΈ рСконструира Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅. Π—Π°Ρ‰ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅Ρ‚Π»ΠΈΠ½ΠΊ? ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΌΡŠΡ€Π·Π΅Π», Π° ΠΈ линукс Π΅ скрипт Π½Π° скрипт, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всичко Π΅ Π½Π°Ρ€Π΅Π΄. Ами ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠ²ΠΎ слСдва? Π‘Π»Π΅Π΄Π²Π° Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΠΌ Π½Π° Π±ΠΎΡ€Π΄Π΅Ρ€ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ β€” Ρ‚ΡƒΠΊ, ΠΏΠΎΡ€Π°Π΄ΠΈ ΡΡŠΡ‰ΠΈΡ‚Π΅ стари устройства, ΠΏΠΎΠ΅Ρ…ΠΌΠ΅ ΠΏΠΎ ΠΏΡŠΡ‚Ρ Π½Π° Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎΡ‚ΠΎ ΡΡŠΠΏΡ€ΠΎΡ‚ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ β€” поставихмС Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° Π½Π° BGP.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ bgphostname *******
password *******
log file /var/log/bgp.log
!
# Π½ΠΎΠΌΠ΅Ρ€ ас-ΠΊΠΈ, адрСса ΠΈ сСти Π²Ρ‹Π΄ΡƒΠΌΠ°Π½Ρ‹
router bgp 12345
bgp router-id 1.2.3.4
redistribute connected
redistribute static
neighbor 1.2.3.1 remote-as 12345
neighbor 1.2.3.1 next-hop-self
neighbor 1.2.3.1 route-map none in
neighbor 1.2.3.1 route-map export out
!
access-list export permit 1.2.3.0/24
!
route-map export permit 10
match ip address export
!
route-map export deny 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 Π΅ страхотСн, Π½ΠΎ Π½Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ β€” ΠΌΠ½ΠΎΠ³ΠΎ Π³Ρ€Π΅ΡˆΠΊΠΈ Π² ΠΊΠΎΠ΄Π° β€” ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° сС, изрязва Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ, ΠΈ Π½Π°ΠΉ-Π»ΠΎΡˆΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Π°ΠΊΠΎ сС срути β€” Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΈΠΌ трябва Π΄Π° прСзарСдят всичко β€” Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈΡ‚Π΅ Ρ‡Π΅Ρ€Π²Π΅Π½ΠΈ β€” Π²ΡŠΠΎΠ±Ρ‰Π΅ Π½Π΅ сС ΠΏΠΎΠ»ΡƒΡ‡ΠΈ. Какво Π΅ прСдимството Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ucarp вмСсто keepalived? Π”Π°, всичко β€” ΠΈΠΌΠ° 100 шлюза, keepalived ΠΈ Π΅Π΄Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° Π² конфигурацията β€” Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ всичко. Π‘ ucarp Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΅Π΄ΠΈΠ½ шлюз. Π©ΠΎ сС отнася Π΄ΠΎ сигурността, Π°ΠΊΠΎ Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ Ρ„Π°Π»ΡˆΠΈΠ²ΠΈ адрСси ΠΈ Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½Π° ΡˆΠ°Ρ€ΠΈΠΊΠ° β€” Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π° всички суичовС/ΠΎΠ»Ρ‚ΠΈ/Π±Π°Π·ΠΈ настройвамС dhcp-snooping + source-guard + arp inspection. Ако ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° няма dhcp Π° статик β€” acces-list Π½Π° ΠΏΠΎΡ€Ρ‚Π°.

Π—Π°Ρ‰ΠΎ всичко Ρ‚ΠΎΠ²Π° бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ? Π—Π° ΡƒΠ½ΠΈΡ‰ΠΎΠΆΠ°Π²Π°Π½Π΅ Π½Π° нСТСлания Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Π‘Π΅Π³Π° всСки свич ΠΈΠΌΠ° свой VLAN ΠΈ unknown-unicast Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ ΡΡ‚Ρ€Π°ΡˆΠ΅Π½, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° само ΠΏΡ€Π΅Π· Π΅Π΄ΠΈΠ½ ΠΏΠΎΡ€Ρ‚, Π° Π½Π΅ ΠΏΡ€Π΅Π· всички... А страничнитС Π΅Ρ„Π΅ΠΊΡ‚ΠΈ - стандартизиран ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ» Π½Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅Ρ‚ΠΎ, ΠΏΠΎ-висока СфСктивност ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° адрСсното пространство.

Как Π΄Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ lisg - Ρ‚ΠΎΠ²Π° Π΅ ΠΎΡ‚Π΄Π΅Π»Π½Π° Ρ‚Π΅ΠΌΠ°. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ са Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ към Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅. МоТС Π±ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΡŠΡ‚ ΠΏΠΎ-Π³ΠΎΡ€Π΅ Ρ‰Π΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π½Π° някого Π² ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ си. ВСрсия 6 всС ΠΎΡ‰Π΅ Π½Π΅ сС внСдрява Π² Π½Π°ΡˆΠ°Ρ‚Π° ΠΌΡ€Π΅ΠΆΠ° - Π½ΠΎ Ρ‚Π°ΠΌ Ρ‰Π΅ ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‡Π΅ - ΠΏΠ»Π°Π½ΠΈΡ€Π° сС Π΄Π° сС ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅ lisg Π·Π° 6 вСрсия ΠΈ Ρ‰Π΅ трябва Π΄Π° сС ΠΊΠΎΡ€ΠΈΠ³ΠΈΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, която добавя ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈ.

Linux ISG
DB2DHCP
Libtins

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster