рдирдорд╕реНрддреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ 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 рдХреЗ рд▓рд┐рдП рд▓рд┐рд╕рдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рд╕рд╣реА рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред
рд╕реНрд░реЛрдд: www.habr.com