áááºá¹ááá¬áá«á ááá¯ááá¯áááºááŸá¬ 5k client áá»á¬ážááœááºáááºáá áºáá¯ááŸááááºá áááŒá¬áá±ážáá®á á¡ááœááºáá¬áá¬áá±á¬á¡ááá¯ááºá¡ááá·áºáá áºáᯠááœááºáá±á«áºáá¬ááẠ- ááœááºáááºáá¡áááºáááá¯ááœáẠáá»áœááºá¯ááºááá¯á·ááœáẠBrocade RX8 ááŸáááŒá®áž áááºážááẠááœááºáááºááᯠvlans áá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠá¡áááºááá-unicast packet á¡áá»á¬ážá¡ááŒá¬ážááᯠá áááºáá±ážááá¯á·áá¬ááẠ- áááºážááẠáá áºá áááºáá áºááá¯ááºážááŒá¿áá¬ááá¯ááºáá±á¬áºáááºážá á¡ááŒá°áá±á¬ááºááááºá á¬áá»á¬áž á áááºááá¯á·á¡ááœáẠá¡áá°áž vlan áá»á¬áž áááºážááá¯á·ááẠááœááºáááºá áááºážááŒá±á¬ááºážá¡á¬ážáá¯á¶ážááᯠááá·áºáá¯ááºáá¬ážáááºá áá«ááŒá±á¬áá·áº á¡áᯠáááºááŒá¬ážáá»á±á¬ááºážáá¬ážá¡ááŒá Ạá á¬ááááºáá²á· áá±á¬ááºáááºáá áºáá±á¬ááºáá²á· ááááºá á¬áá® áááºáá¬áá¬ááᯠááŒááºáá±á¬ááºááŒáá·áºáá±á¬á· áá®á á®ážáááºážááŸá¯á ááá»áá¯á· (ááá¯á·ááá¯ááº) ááœá¬áá áºááœá¬áá® áá±áá®ááᯠááá·áºááºáá áºáá¯áá® áŠážáááºááœá¬ážáá«ááẠ- ááá¯ááºážááááºáá±ááẠ- áá±á¬ááºáááºááœá± áá±á«áááœá± áááºážáááºážááŸá¯...
áááºááœááºáá»ááºááŸá¬ bug áá áºáá¯ááᯠá¡ááºá¹áá«áááºáá áºáá¯á¡ááŒá ẠááŒá±á¬ááºážáá²áááºááŒá áºáááºá ááŒáá·áºá á¯á¶áá±á¬ client vlan ááŒáá·áº q-in-q ááŠážáááºáá»ááºááá¯ááœá±ážáá±áá±á¬áºáááºáž dot3310q ááá¯ááœáá·áºáá¬ážáá±á¬á¡áá« P1 áá²á·ááá¯á·áá±á¬ hardware á¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶ážááẠDHCP ááá¯ááŒááºáááºážááœáá·áºáááŒá¯áá±á¬á·áá² qinq ááŸáá·áºáá»á¬ážá áœá¬ááá¯ááœá±ážáá»ááºááááºááá¯áááááŒáá«á ááá¯áá²á·ááá¯á·áá±á¬ áá»áá¯á·ááœááºážáá»ááºáá»á¬ážá ip-á¡áááºááááºáá¬ážááŒááºážáá°ááẠá¡áááºáááºážá áááºážááẠáááºááá¯á·á¡áá¯ááºáá¯ááºááááºážá á¡ááá¯áá»á¯ááº- á¡ááºáá¬áá±á·á áºáá±á«áºááŸá ááááºáá±ážááááºá ᬠ+ áááºážááŒá±á¬ááºážá áá»áœááºá¯ááºááá¯á·ááá¯ááºáááºážáá¬áááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯á¶ááá¹áá¬ááºááŒááºáá±á¬ááºáááºá áá±á¬ááºáááºáá»á¬ážáᶠááááºá á¬áá»á¬ážááŒáá·áºáá±áááºá á¡áá»áá¯á·áá±á¬á¡ááºáá¬áá±á·á áºáá»á¬ážááŸáá áºááá·áº áá¯á¶ážá áœá²áá°áá»á¬ážáᶠáááºážááŒá±á¬ááºážáá»á¬ážááá·áºááẠááá¯á¡ááºáááºá áá«ááœá±á¡á¬ážáá¯á¶áž áááºááá¯áá¯ááºáááá²á áá®ážááŒá¬ážáá¬áá¬ááŸá áºáá¯ááŸá Shaper - lisgá dhcp - db2dhcpá dhcprelay ááẠáááºááœáá·áºáá¬áá¬áá»á¬ážáá±á«áºááœáẠá¡áá¯ááºáá¯ááºáááºá ucarp ááẠá¡áááºááááºážáááºá¡ááœáẠaccess áá¬áá¬áá»á¬ážáá±á«áºááœááºáááºáž áá¯ááºáá±á¬ááºáá«áááºá áá«áá±ááá·áº áááºážááŒá±á¬ááºážááœá± áááºááá¯ááá·áºááá²á ááŒá®ážáá¬ážáá±á¬ script ááŒáá·áº á¡áá¬á¡á¬ážáá¯á¶ážááᯠáááºááŒáá¯áááºááá·áºááá¯ááºááẠ- ááá¯á·áá±á¬áº áááºážááẠáááŸááºáá«á áá«ááŒá±á¬áá·áº ááá¯ááºááá¯ááºáá±ážáá¬ážáá²á· áá»áá¯ááºážáá±á¬ááºááᯠáá¯ááºáááºá
á¡ááºáá¬áááºáá±á«áºááœáẠá á±á·á á±á·á ááºá ááºááŸá¬ááœá±ááŒá®ážáá±á¬ááºá ááŸáá áœá¬á¡ááœá¬ážá¡áá¬áá»á¬ážááᯠááŸá¯ááŸáá¯ááºááá¯ááºá á±ááá·áº C++ á¡ááœáẠá¡á¶á·ááŒááœááºá¡ááá·áºááŒáá·áºá á¬ááŒáá·áºááá¯ááºáá áºáá¯ááᯠááœá±á·ááŸááá²á·áááºá áááºážááŒá±á¬ááºážáá»á¬ážááᯠáá±á«ááºážááá·áºááá·áº áááá¯ááááºá¡ááœáẠá¡ááºáááá¯áá®áááºááŸá¬ á¡á±á¬ááºáá«á¡ááá¯ááºážááŒá áºááẠ- áá»áœááºá¯ááºááá¯á·ááẠá¡ááºáá¬áá±á·á áºááŸá arp áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¬ážáá±á¬ááºáááºá áá±á¬ááºážááá¯áá¬ážáá±á¬ áá¬áá¬áá±á«áºááŸá lo interface ááœáẠááááºá á¬áá áºáá¯ááŸááá«áá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠá€á¡ááºáá¬áá±á·á áºááŸáááá·áº áááºážááŒá±á¬ááºážáá áºáá¯ááᯠáá±á«ááºážááá·áºáᬠstatic arp ááá¯ááá·áºááẠဠip ááá¯ááŸááºáááºážáááºáá« - áá±áá¯áá»á¡á¬ážááŒáá·áºá áá±á¬áºáá®á¡áááºážáááºá áá¬ááááá±ááá¡áááºážáááºááŸáá·áºáááºááŒá®ážááŒá®á
Router áá¡áááºážá¡ááŒá áºáá»á¬áž
#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
binary áááºáá±á¬ááºááẠá¡áááá·áºáá±ážáááºá
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 á¡áá»ááºááŒááŸá¯á¡áá±á«áº á¡ááŒá±áá¶á ááá¬ážáá»á¬ážááᯠááŒááºáááºáááºáá±á¬ááºáá«áááºá á¡áááºááŒá±á¬áá·áº netlink ááá¯ááá¯á¶ážáá²á·ááááºážá áááºážááẠáá»ááºážááááŒááºážáá»áŸáá¬ááŒá áºááŒá®áž Linux ááẠscript áá áºáá¯áá±á«áºááŸá script áá áºáá¯ááŒá áºááẠ- ááá¯á·ááŒá±á¬áá·áº á¡áá¬á¡á¬ážáá¯á¶ážá¡áááºááŒá±áá«áááºá áá±á¬ááºážááŒá®á áááºážááŒá±á¬ááºážáá»á¬ážááẠáááºážááŒá±á¬ááºážáá»á¬ážá áá±á¬ááºáá áºáá¯á áá¬áá²á áá±á¬ááºáá áºáá¯á áá»áœááºá¯ááºááá¯á·ááẠá€áá¬áá¬áá±á«áºááŸá áááºážááŒá±á¬ááºážáá»á¬ážááᯠáááºá ááºááá¯á· ááá¯á·ááẠááá¯á¡ááºááẠ- á€áá±áá¬ááœáẠáá±ááºááá®áá±á¬á·áá±á¬ áá¬á·ááºáá²áá áºáá¯áááºážááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá¶ááá¯ááºáááºá¡áááºážáá¯á¶ážáááºážááŒá±á¬ááºážááᯠáá°áá²á·ááẠ- á€áá¬áááºááᯠBGP ááá¯á· áá¬áááºáá±ážá¡ááºáá«áááºá
bgp configáááºáá¶áá°á¡ááẠ*******
á
áá¬ážááŸáẠ*******
ááŸááºáááºážááá¯áẠ/var/log/bgp.log
!
# AS áá¶áá«ááºá ááááºá
á¬áá»á¬ážááŸáá·áº ááœááºáááºáá»á¬ážááẠá
áááºáá°ážáááºáááºáááºá
router bgp 12345
bgp router-id 1.2.3.4
áá»áááºáááºááŒá®áž ááŒááºáááºááŒáá·áºáá±áá«á
static ááá¯ááŒááºáááºááŒáá·áºáá±
á¡áááºáá®ážáá»ááºáž 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
!
áááºážááŒá±á¬ááºážááŒá±áá¯á¶ áááºááá¯á·ááœáá·áº áá
ip ááááºá
á¬ááᯠáááºááá¯á·ááŒááºážááŸáá·áº ááá¯ááºáá®áááºá
!
route-map export deny 20
áááºááŒáá¡á±á¬ááºá áá¬áá¬ááẠarp áá±á¬ááºážááá¯ááŸá¯áá»á¬ážááᯠáá¯á¶á·ááŒááºáááºá¡ááœááºá áááºááẠarp proxy ááá¯ááœáá·áºááá«áááºá
echo 1 > /proc/sys/net/ipv4/conf/eth0.800/proxy_arp
áááºááŒáá¡á±á¬áẠ- ucarp á€á¡á¶á·ááœááºá¡ááŸá¯á¡ááœáẠáá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯áẠááœáŸáá·áºáááºáá¬ážáá±á¬ áá¬ááºááœáŸááºážáá»á¬ážááᯠáá±ážáá¬ážáá«áááºá
daemon áá áºáá¯áááºáááºááŒááºážáá¥ááá¬
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 á áááºááŒáá·áºá relay ááᯠáááºááᯠconfigure áá¯ááºáááá²ááá¯áᬠáááŒá±á¬áá±á¬á·áá«áá°áž - á¡áá¬á¡á¬ážáá¯á¶ážá ááá¯ážááŸááºážáá«áááºá
áá«ááᯠáá«ááá¯á·ááŸá¬ áá¬ááŸááá²á ááááºááá»á¬ážá á¡áááºááááºážááŒááºážá áááºážááŒá±á¬ááºážáá»á¬áž á¡ááá¯á¡áá»á±á¬ááºááœá²á·á ááºážáá¯á¶á dhcpá á€áááºááŸá¬ á¡áááá·áºáá¯á¶ážáááºááŸááºááŸá¯ááŒá áºááẠ- lisg ááẠáááºážááŸáá·áºááẠá ááºážáá»ááºááŸáá¡áá¬á¡á¬ážáá¯á¶ážááᯠááŒá¯á¶áá¯á¶ááŒá®áž áá»áœááºá¯ááºááá¯á·ááœáẠáá¯á¶ááá¹áá¬ááºáá áºáá¯ááŸáááŒá®ážáá¬ážááŒá áºáááºá á¡áá¬á¡á¬ážáá¯á¶ážá áá¬ááŒá±á¬áá·áº áá®áá±á¬ááºááŸááºááŒá®áž ááŸá¯ááºááœá±ážááá¬áá²á accel-pppd ááá¯áá°ááŒá®áž pppoe ááᯠáá¯á¶ážáá¯á¶ážáá¯á¶ážááᬠáááœááºáá°ážáá¬ážá ááá¯ááºáá«á áááºážáááºááá¯ááá¯ááœááºáá°áááºááá¯ááºáá« - áá°áá»á¬ážááẠpppoe ááá¯áá±á¬áºááŒáááºáááá¯áá² router ááœáẠpatchcord ááá¯áááºáááºáááºáááºáá²áááºá accel-ppp ááẠááá¯ááºáá±á¬ á¡áá¬ááŒá áºááẠ- ááá¯á·áá±á¬áº áááºážááẠáá»áœááºá¯ááºááá¯á·á¡ááœáẠá¡áááºáááŒá±áá« - áá¯ááºááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážá áœá¬ ááŸáááẠ- ááŒáá¯áá»ááºááœá¬ážáááºá áá±á¬ááºáá±á¬ááºáá«á¡á±á¬áẠááŒááºááœá¬ážááẠá áááºážáááºážá áá¬á¡áá±á¬ááºážáá¯á¶ážááŸá¬ áááºážááẠáá±á¬ááºááá¬áá«á áá°áá»á¬áž ááŒááºáááºá áááºááẠááá¯á¡ááºááẠá áá¯ááºážááœá± á¡á¬ážáá¯á¶áž á¡áá®áá±á¬ááºááœá± ááŒá áºáá±ááẠá áá¯á¶ážá á¡áá¯ááºááá¯ááºáá°áž á ááááºážáááºážáá¬ážááŒááºážááẠucarp ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážáá¡á¬ážáá¬áá»ááºááá¬áá²á áá¯ááºáá²á·á á¡áá¬á¡á¬ážáá¯á¶ážááŸá¬ - áá¶áá«ážáá±á«áẠ100 ááŸááá«áááºá ááááºážááááºážáá¬ážááŒá®áž config ááŸá¬ error áá áºáá¯ááŸááá«ááẠ- á¡áá¬á¡á¬ážáá¯á¶ážá á¡áá¯ááºááá¯ááºáá«áá°ážá 1 gateway ááẠucarp ááŸáá·áº á¡áá¯ááºááá¯ááºáá«á áá¯á¶ááŒá¯á¶áá±ážááŸáá·áºáááºáááºáá áá»ááºáá°áá»á¬ážááẠáááºážááá¯á·á¡ááœáẠááááºá á¬áá»á¬ážááᯠá á¬áááºážááœááºážááŒá®áž áá»áŸáá±ááŸá¯ááœáẠáááºážááá¯á·ááᯠá¡áá¯á¶ážááŒá¯áááºáᯠááá¯ááŒááẠ- á€á¡ááá¯ááºá¡ááá·áºááᯠááááºážáá»á¯ááºáááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠswitches/olts/bases á¡á¬ážáá¯á¶ážááœáẠdhcp-snooping + source-guard + arp á á áºáá±ážááŒááºážááᯠá áá áºááá·áºááœááºážáá¬ážáá«áááºá á¡áááºá client ááœáẠdhpc áááŸááá±á¬áºáááºáž port ááœáẠstatic -acces-list
áá«ááœá±á¡á¬ážáá¯á¶áž áá¬ááŒá±á¬áá·áºááŒá®ážááœá¬ážáá¬áá²á áááá¯áá¬ážá¡ááºáá±á¬ á¡ááœá¬ážá¡áá¬áá»á¬ážááᯠáá»ááºáá®ážáááºá ááᯠswitch áá áºáá¯á á®ááœáẠáááºážáááá¯ááºááá¯áẠvlan ááŸáááŒá®áž á¡áááºááá-unicast ááẠáá áºáá¯áááºážáá±á¬ port ááá¯á·ááœá¬ážáááºáá¬ááá¯á¡ááºáá±á¬ááŒá±á¬áá·áº á¡á¬ážáá¯á¶ážááŸáá·áºááááºááá¯ááºáá±á¬á·áá«á
lisg ááá¯áááºááá¯á· configure áá¯ááºáááºážááẠáá®ážááŒá¬ážá¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯ááŒá áºáááºá á á¬ááŒáá·áºááá¯ááºáá»á¬ážááá¯á· ááá·áºááºáá»á¬áž ááœá²áááºáá¬ážáááºá á¡áááºáá«á¡áá»ááºáá»á¬ážááẠáá áºá á¯á¶áá áºáŠážá¡á¬áž áááºážááá¯á·á áááºááŸááºážáá»ááºáá»á¬áž á¡á±á¬ááºááŒááºá á±ááẠá¡áá±á¬ááºá¡áá°ááŒá áºáá±á¬ááºážááŒá áºááá¯ááºáááºá áá¬ážááŸááºáž 6 ááᯠáá»áœááºá¯ááºááá¯á·áááœááºáááºáá±á«áºááœáẠá¡áá±á¬ááºá¡áááºááá±á¬áºááá±ážáá« - ááá¯á·áá±á¬áº ááŒá¿áá¬áá áºáá¯ááŸááááá·áºááẠ- áá¬ážááŸááºáž 6 á¡ááœáẠlisg ááᯠááŒááºáááºáá±ážáá¬ážááẠá¡á á®á¡á ááºáá»á¬ážááŸááá±ááŒá®áž áááºážááŒá±á¬ááºážáá»á¬ážááá·áºááá·áºáááá¯ááááºááᯠááŒá¯ááŒááºááẠááá¯á¡ááºáá«áááá·áºáááºá
source: www.habr.com