āĻšā§āĻ¯āĻžāĻ˛ā§. āĻāĻ° āĻŽāĻžāĻ¨ā§ 5k āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻ° āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻāĻāĻāĻŋ āĻā§āĻŦ āĻāĻ¨āĻ¨ā§āĻĻāĻĻāĻžāĻ¯āĻŧāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤ āĻāĻ¸ā§āĻā§ - āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻā§āĻ¨ā§āĻĻā§āĻ°ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻŦā§āĻ°ā§āĻā§āĻĄ RX8 āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻŋ āĻĒā§āĻ°āĻā§āĻ° āĻ āĻāĻžāĻ¨āĻž-āĻāĻāĻ¨āĻŋāĻāĻžāĻ¸ā§āĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒāĻžāĻ āĻžāĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°ā§āĻā§, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻāĻāĻŋ āĻā§āĻ˛āĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ āĻŦāĻŋāĻāĻā§āĻ¤ - āĻāĻāĻŋ āĻāĻāĻļāĻŋāĻāĻāĻžāĻŦā§ āĻā§āĻ¨āĻ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¨āĻ¯āĻŧ, āĻ¤āĻŦā§ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¸āĻžāĻĻāĻž āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§āĻˇ āĻā§āĻ˛āĻžāĻ¨, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻž āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻ¸āĻŦ āĻĻāĻŋāĻ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧ. āĻ¸ā§āĻ¤āĻ°āĻžāĻ āĻāĻāĻ¨ āĻāĻ˛ā§āĻĒāĻ¨āĻž āĻāĻ°ā§āĻ¨ āĻ¯ā§ āĻāĻāĻāĻ¨ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻ° āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻāĻ¨āĻāĻžāĻŽāĻŋāĻ āĻĒā§āĻ°āĻŦāĻžāĻš āĻ¯āĻž āĻ¸ā§āĻŽāĻžāĻ¨ā§āĻ¤ā§āĻ° āĻāĻžāĻ¤ā§āĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ āĻ§ā§āĻ¯āĻ¯āĻŧāĻ¨āĻ°āĻ¤ āĻ¨āĻ¯āĻŧ āĻāĻŦāĻ āĻāĻ āĻĒā§āĻ°āĻŦāĻžāĻšāĻāĻŋ āĻāĻŋāĻā§ (āĻŦāĻž āĻ¸āĻŽāĻ¸ā§āĻ¤) āĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻāĻāĻŋ āĻ°ā§āĻĄāĻŋāĻ āĻ˛āĻŋāĻā§āĻā§āĻ° āĻĻāĻŋāĻā§ āĻāĻĄāĻŧā§ āĻ¯āĻžāĻ¯āĻŧ - āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛āĻāĻŋ āĻāĻāĻā§ āĻāĻā§ - āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻ°āĻž āĻ°āĻžāĻāĻžāĻ¨ā§āĻŦāĻŋāĻ¤ - āĻĻā§āĻāĻ ...
āĻ˛āĻā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻŦāĻžāĻāĻā§ āĻāĻāĻāĻŋ āĻŦā§āĻļāĻŋāĻˇā§āĻā§āĻ¯ā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻāĻ°āĻžāĨ¤ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻžāĻā§āĻ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻā§āĻ˛āĻžāĻ¨ āĻĻāĻŋāĻ¯āĻŧā§ q-in-q āĻāĻ° āĻĻāĻŋāĻā§ āĻāĻŋāĻ¨ā§āĻ¤āĻž āĻāĻ°āĻāĻŋāĻ˛āĻžāĻŽ, āĻāĻŋāĻ¨ā§āĻ¤ā§ P3310 āĻāĻ° āĻŽāĻ¤ā§ āĻ¸āĻŦ āĻ§āĻ°āĻŖā§āĻ° āĻšāĻžāĻ°ā§āĻĄāĻāĻ¯āĻŧā§āĻ¯āĻžāĻ°, āĻ¯āĻāĻ¨ dot1q āĻ¸āĻā§āĻˇāĻŽ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻāĻ¨ DHCP āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¯ā§āĻ¤ā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻŦāĻ¨ā§āĻ§ āĻāĻ°ā§ āĻĻā§āĻ¯āĻŧ, āĻ¤āĻžāĻ°āĻžāĻ āĻāĻžāĻ¨ā§ āĻ¨āĻž āĻā§āĻāĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ āĻ¨ā§āĻāĻā§āĻ˛āĻŋ āĻ¯ā§ āĻ§āĻ°āĻ¨ā§āĻ° āĻā§āĻˇāĻ¤āĻŋ. ip-unnambered āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§? āĻā§āĻŦ āĻ¸āĻāĻā§āĻˇā§āĻĒā§: āĻā§āĻāĻāĻ¯āĻŧā§ āĻ āĻŋāĻāĻžāĻ¨āĻž + āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻ°ā§āĻāĨ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨: āĻļā§āĻĒāĻžāĻ° āĻāĻžāĻāĻž, āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻĻā§āĻ° āĻ āĻŋāĻāĻžāĻ¨āĻž āĻŦāĻŋāĻ¤āĻ°āĻŖ, āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻāĻĻā§āĻ° āĻ°ā§āĻ āĻ¯ā§āĻ āĻāĻ°āĻžāĨ¤ āĻāĻ āĻ¸āĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ°āĻŦā§āĻ¨? 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;
}
}
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 āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨āĻšā§āĻ¸ā§āĻāĻ¨āĻžāĻŽ *******
āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ *******
āĻ˛āĻ āĻĢāĻžāĻāĻ˛ /var/log/bgp.log
!
# AS āĻ¨āĻŽā§āĻŦāĻ°, āĻ āĻŋāĻāĻžāĻ¨āĻž āĻāĻŦāĻ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻāĻžāĻ˛ā§āĻĒāĻ¨āĻŋāĻ
āĻ°āĻžāĻāĻāĻžāĻ° bgp 12345
bgp āĻ°āĻžāĻāĻāĻžāĻ°-āĻāĻāĻĄāĻŋ 1.2.3.4
āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻŦāĻŋāĻ¤āĻ°āĻŖ
āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻŦāĻŋāĻ¤āĻ°āĻŖ
āĻĒā§āĻ°āĻ¤āĻŋāĻŦā§āĻļā§ 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
!
āĻ°ā§āĻ-āĻŽā§āĻ¯āĻžāĻĒ āĻāĻā§āĻ¸āĻĒā§āĻ°ā§āĻ āĻĒāĻžāĻ°āĻŽāĻŋāĻ 10
āĻāĻāĻĒāĻŋ āĻ āĻŋāĻāĻžāĻ¨āĻž āĻāĻā§āĻ¸āĻĒā§āĻ°ā§āĻ āĻŽā§āĻ˛ā§
!
āĻ°ā§āĻ-āĻŽā§āĻ¯āĻžāĻĒ āĻ°āĻĒā§āĻ¤āĻžāĻ¨āĻŋ āĻ
āĻ¸ā§āĻŦā§āĻāĻžāĻ° 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, āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦ āĻ¨āĻž āĻāĻŋāĻāĻžāĻŦā§ āĻ°āĻŋāĻ˛ā§ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻŦā§āĻ¨ - āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸āĻšāĻāĨ¤
āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŋ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ? āĻā§āĻāĻāĻ¯āĻŧā§āĻ° āĻŦā§āĻ¯āĻžāĻāĻāĻĒ, āĻ°ā§āĻā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨, āĻĄāĻŋāĻāĻāĻāĻ¸āĻŋāĻĒāĻŋāĨ¤ āĻāĻāĻŋ āĻ¸āĻ°ā§āĻŦāĻ¨āĻŋāĻŽā§āĻ¨ āĻ¸ā§āĻ - lisg āĻāĻāĻŋāĻ° āĻāĻžāĻ°āĻĒāĻžāĻļā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻŽā§āĻĄāĻŧāĻžāĻ¨ā§ āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻļā§āĻĒāĻžāĻ° āĻ°āĻ¯āĻŧā§āĻā§āĨ¤ āĻā§āĻ¨ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻ¤ āĻĻā§āĻ°ā§āĻ āĻāĻŦāĻ āĻŦāĻŋāĻā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŋāĻāĻ°? accel-pppd āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻāĻŦāĻ pppoe āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻāĻŋ āĻ¸āĻšāĻ āĻ¨āĻ¯āĻŧ? āĻ¨āĻž, āĻāĻāĻŋ āĻ¸āĻšāĻ āĻ¨āĻ¯āĻŧ - āĻ˛ā§āĻā§āĻ°āĻž āĻā§āĻŦ āĻāĻŽāĻ āĻāĻāĻāĻŋ āĻ°āĻžāĻāĻāĻžāĻ°ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻāĻāĻ°ā§āĻĄ āĻĢāĻŋāĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§, pppoe āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻžāĻ° āĻŽāĻ¤ā§ āĻ¨āĻ¯āĻŧāĨ¤ accel-ppp āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻāĻŋāĻ¨āĻŋāĻ¸ - āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ āĻāĻ°ā§āĻ¨āĻŋ - āĻā§āĻĄā§ āĻ āĻ¨ā§āĻ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§ - āĻāĻāĻŋ āĻā§āĻā§ āĻ¯āĻžāĻ¯āĻŧ, āĻāĻāĻŋ āĻā§āĻāĻŋāĻ˛āĻāĻžāĻŦā§ āĻā§āĻā§ āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻĻā§āĻāĻā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛ āĻāĻāĻŋ āĻ¯āĻĻāĻŋ āĻāĻā§āĻā§āĻŦāĻ˛ āĻšāĻ¯āĻŧ - āĻ¤āĻžāĻšāĻ˛ā§ āĻ˛ā§āĻā§āĻĻā§āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¸āĻŦāĻāĻŋāĻā§ - āĻĢā§āĻ¨āĻā§āĻ˛āĻŋ āĻ˛āĻžāĻ˛ - āĻāĻāĻŋ āĻŽā§āĻā§āĻ āĻāĻžāĻ āĻāĻ°ā§āĻ¨āĻŋā§ˇ Keepalived āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ ucarp āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻžāĻ° āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻāĻŋ? āĻšā§āĻ¯āĻžāĻ, āĻ¸āĻŦāĻāĻŋāĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ - 100āĻāĻŋ āĻā§āĻāĻāĻ¯āĻŧā§, Keepalived āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ā§ āĻāĻāĻāĻŋ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ°āĻ¯āĻŧā§āĻā§ - āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ 1 āĻā§āĻāĻāĻ¯āĻŧā§ ucarp āĻāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¨āĻžāĨ¤ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§, āĻ¤āĻžāĻ°āĻž āĻŦāĻ˛ā§ āĻ¯ā§ āĻŦāĻžāĻŽāĻ°āĻž āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻŋāĻāĻžāĻ¨āĻž āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻļā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦā§ - āĻāĻ āĻŽā§āĻšā§āĻ°ā§āĻ¤āĻāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻāĻ/āĻāĻ˛ā§āĻāĻ¸/āĻŦā§āĻ¸āĻā§āĻ˛āĻŋāĻ¤ā§ dhcp-snooping + source-guard + arp āĻĒāĻ°āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻŋā§ˇ āĻ¯āĻĻāĻŋ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻ° dhpc āĻ¨āĻž āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ - āĻĒā§āĻ°ā§āĻā§ āĻ ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸-āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨāĻžāĻā§āĨ¤
āĻā§āĻ¨ āĻāĻ āĻ¸āĻŦ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛? āĻ āĻŦāĻžāĻā§āĻāĻŋāĻ¤ āĻā§āĻ°āĻžāĻĢāĻŋāĻ āĻ§ā§āĻŦāĻāĻ¸ āĻāĻ°āĻ¤ā§. āĻāĻāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸ā§āĻāĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻā§āĻ˛āĻžāĻ¨ āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻ āĻāĻžāĻ¨āĻž-āĻāĻāĻ¨āĻŋāĻāĻžāĻ¸ā§āĻ āĻāĻ° āĻā§āĻ¤āĻŋāĻāĻ° āĻ¨āĻ¯āĻŧ, āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§ āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻ¸āĻāĻ˛ā§āĻ° āĻāĻžāĻā§ āĻ¨āĻ¯āĻŧ... āĻ āĻŋāĻ āĻāĻā§, āĻĒāĻžāĻ°ā§āĻļā§āĻŦ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻ˛ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻŽāĻŋāĻ¤ āĻ¸āĻ°āĻā§āĻāĻžāĻŽ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°, āĻ āĻŋāĻāĻžāĻ¨āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ āĻŦāĻ°āĻžāĻĻā§āĻĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ āĻ§āĻŋāĻāĻ¤āĻ° āĻĻāĻā§āĻˇāĻ¤āĻžāĨ¤
āĻāĻŋāĻāĻžāĻŦā§ lisg āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻŦā§āĻ¨ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻŦāĻŋāĻˇāĻ¯āĻŧāĨ¤ āĻ˛āĻžāĻāĻŦā§āĻ°ā§āĻ°āĻŋ āĻ˛āĻŋāĻā§āĻ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧ. āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻĒāĻ°ā§āĻ° āĻāĻžāĻāĻā§ āĻ¤āĻžāĻĻā§āĻ° āĻ˛āĻā§āĻˇā§āĻ¯ āĻ āĻ°ā§āĻāĻ¨ā§ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻāĻ°āĻŦā§āĨ¤ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 6 āĻāĻāĻ¨āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻ¨āĻž - āĻ¤āĻŦā§ āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻŦā§ - āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖ 6 āĻāĻ° āĻāĻ¨ā§āĻ¯ lisg āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ˛ā§āĻāĻžāĻ° āĻĒāĻ°āĻŋāĻāĻ˛ā§āĻĒāĻ¨āĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻ°ā§āĻ āĻ¯ā§āĻ āĻāĻ°ā§ āĻāĻŽāĻ¨ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com