DNSTap மற்றும் BGP மூலம் ILV தடுப்பதைக் கடந்து செல்லவும்
தலைப்பு மிகவும் அடிபட்டது, எனக்குத் தெரியும். உதாரணமாக, ஒரு பெரிய உள்ளது கட்டுரை, ஆனால் தடுப்புப்பட்டியலின் IP பகுதி மட்டுமே அங்கு கருதப்படுகிறது. டொமைன்களையும் சேர்ப்போம்.
நீதிமன்றங்கள் மற்றும் RKN எல்லாவற்றையும் வலது மற்றும் இடதுபுறமாகத் தடுப்பதாலும், வழங்குநர்கள் Revizorro வழங்கிய அபராதத்தின் கீழ் வராமல் இருக்க கடுமையாக முயற்சிப்பதாலும், தடுப்பதால் ஏற்படும் இழப்புகள் மிகப் பெரியவை. "சட்டப்பூர்வமாக" தடுக்கப்பட்ட தளங்களில் பல பயனுள்ள தளங்கள் உள்ளன (ஹலோ, ருட்ராக்கர்)
நான் RKN இன் அதிகார எல்லைக்கு வெளியே வசிக்கிறேன், ஆனால் எனது பெற்றோர், உறவினர்கள் மற்றும் நண்பர்கள் வீட்டில் இருந்தனர். எனவே, தகவல் தொழில்நுட்பத்திலிருந்து வெகு தொலைவில் உள்ளவர்கள், அவர்களின் பங்கேற்பு இல்லாமலேயே தடுப்பதைத் தவிர்ப்பதற்கு எளிதான வழியைக் கொண்டு வர முடிவு செய்யப்பட்டது.
இந்த குறிப்பில், அடிப்படை நெட்வொர்க் விஷயங்களை நான் படிகளில் விவரிக்க மாட்டேன், ஆனால் இந்த திட்டத்தை எவ்வாறு செயல்படுத்தலாம் என்பதற்கான பொதுவான கொள்கைகளை விவரிக்கிறேன். எனவே நெட்வொர்க் பொதுவாக எவ்வாறு செயல்படுகிறது மற்றும் குறிப்பாக லினக்ஸில் எவ்வாறு செயல்படுகிறது என்பது பற்றிய அறிவு அவசியம் இருக்க வேண்டும்.
பூட்டுகளின் வகைகள்
முதலில், தடுக்கப்பட்டதைப் பற்றிய நினைவகத்தைப் புதுப்பிப்போம்.
RKN இலிருந்து இறக்கப்பட்ட XML இல் பல வகையான பூட்டுகள் உள்ளன:
IP
Домен
URL ஐ
எளிமைக்காக, நாங்கள் அவற்றை இரண்டாகக் குறைப்போம்: IP மற்றும் டொமைன், மேலும் URL ஆல் தடுப்பதில் இருந்து டொமைனை வெளியேற்றுவோம் (இன்னும் துல்லியமாக, அவர்கள் இதை எங்களுக்காக ஏற்கனவே செய்துள்ளனர்).
இருந்து நல்ல மக்கள் ரோஸ்கோம்ஸ்வோபோடா ஒரு அற்புதத்தை உணர்ந்தார் ஏபிஐ, இதன் மூலம் நமக்குத் தேவையானதைப் பெறலாம்:
இதைச் செய்ய, எங்களுக்கு சில சிறிய வெளிநாட்டு VPS தேவை, முன்னுரிமை வரம்பற்ற போக்குவரத்துடன் - 3-5 ரூபாய்க்கு இவற்றில் பல உள்ளன. பிங் மிகப் பெரியதாக இல்லாதபடி நீங்கள் அதை வெளிநாட்டில் எடுக்க வேண்டும், ஆனால் மீண்டும், இணையமும் புவியியலும் எப்போதும் ஒத்துப்போவதில்லை என்பதை நினைவில் கொள்ளுங்கள். 5 ரூபாய்க்கு SLA இல்லாததால், தவறுகளை பொறுத்துக்கொள்ள வெவ்வேறு வழங்குநர்களிடமிருந்து 2+ துண்டுகளை எடுத்துக்கொள்வது நல்லது.
அடுத்து, கிளையன்ட் ரூட்டரிலிருந்து VPS க்கு மறைகுறியாக்கப்பட்ட சுரங்கப்பாதையை அமைக்க வேண்டும். நான் வயர்கார்டை வேகமாகவும் எளிதாகவும் அமைக்க பயன்படுத்துகிறேன். என்னிடம் லினக்ஸ் அடிப்படையிலான கிளையன்ட் ரவுட்டர்களும் உள்ளன (APU2 அல்லது OpenWRT இல் ஏதாவது). சில Mikrotik / Cisco விஷயத்தில், OpenVPN மற்றும் GRE-over-IPSEC போன்றவற்றில் கிடைக்கும் நெறிமுறைகளைப் பயன்படுத்தலாம்.
ஆர்வமுள்ள போக்குவரத்தின் அடையாளம் மற்றும் திசைதிருப்பல்
நீங்கள் நிச்சயமாக, வெளிநாடுகள் வழியாக அனைத்து இணைய போக்குவரத்தையும் முடக்கலாம். ஆனால், பெரும்பாலும், உள்ளூர் உள்ளடக்கத்துடன் பணிபுரியும் வேகம் இதிலிருந்து பெரிதும் பாதிக்கப்படும். கூடுதலாக, VPS இல் அலைவரிசை தேவைகள் மிக அதிகமாக இருக்கும்.
எனவே, தடைசெய்யப்பட்ட தளங்களுக்கு எப்படியாவது போக்குவரத்தை ஒதுக்கி அதை சுரங்கப்பாதையில் தேர்ந்தெடுக்க வேண்டும். "கூடுதல்" போக்குவரத்தின் சில பகுதிகள் அங்கு சென்றாலும், எல்லாவற்றையும் சுரங்கப்பாதை வழியாக ஓட்டுவதை விட இது இன்னும் சிறந்தது.
போக்குவரத்தை நிர்வகிக்க, நாங்கள் BGP நெறிமுறையைப் பயன்படுத்துவோம் மற்றும் எங்கள் VPS இலிருந்து வாடிக்கையாளர்களுக்கு தேவையான நெட்வொர்க்குகளுக்கான வழிகளை அறிவிப்போம். BIRD ஐ மிகவும் செயல்பாட்டு மற்றும் வசதியான BGP டெமான்களில் ஒன்றாக எடுத்துக்கொள்வோம்.
IP
ஐபி மூலம் தடுப்பதன் மூலம், எல்லாம் தெளிவாக உள்ளது: தடுக்கப்பட்ட அனைத்து ஐபிகளையும் VPS உடன் அறிவிப்போம். பிரச்சனை என்னவென்றால், ஏபிஐ வழங்கும் பட்டியலில் சுமார் 600 ஆயிரம் சப்நெட்கள் உள்ளன, அவற்றில் பெரும்பாலானவை /32 ஹோஸ்ட்கள். இந்த எண்ணிக்கையிலான வழிகள் பலவீனமான கிளையன்ட் ரவுட்டர்களைக் குழப்பலாம்.
எனவே, பட்டியலை செயலாக்கும் போது, 24 அல்லது அதற்கு மேற்பட்ட ஹோஸ்ட்கள் இருந்தால், பிணையம் / 2 வரை சுருக்கமாக முடிவு செய்யப்பட்டது. இதனால், வழித்தடங்களின் எண்ணிக்கை ~100 ஆயிரமாக குறைக்கப்பட்டது. இதற்கான ஸ்கிரிப்ட் தொடரும்.
களங்கள்
இது மிகவும் சிக்கலானது மற்றும் பல வழிகள் உள்ளன. எடுத்துக்காட்டாக, நீங்கள் ஒவ்வொரு கிளையன்ட் ரூட்டரிலும் ஒரு வெளிப்படையான Squid ஐ நிறுவி, அங்கு HTTP குறுக்கீடு செய்து, TLS ஹேண்ட்ஷேக்கைப் பார்க்கவும், முதல் வழக்கில் கோரப்பட்ட URL ஐப் பெறவும், இரண்டாவதாக SNI இலிருந்து டொமைனைப் பெறவும்.
ஆனால் அனைத்து விதமான புதுவிதமான TLS1.3 + eSNI காரணமாக, HTTPS பகுப்பாய்வு நாளுக்கு நாள் உண்மையாகி வருகிறது. ஆம், மற்றும் கிளையன்ட் பக்கத்தில் உள்ள உள்கட்டமைப்பு மிகவும் சிக்கலானதாகி வருகிறது - நீங்கள் குறைந்தபட்சம் OpenWRT ஐப் பயன்படுத்த வேண்டும்.
எனவே, டிஎன்எஸ் வினவல்களுக்கான பதில்களை இடைமறிக்கும் பாதையை எடுக்க முடிவு செய்தேன். இங்கேயும், எந்த டிஎன்எஸ்-ஓவர்-டிஎல்எஸ் / எச்டிடிபிஎஸ் உங்கள் தலைக்கு மேல் சுழலத் தொடங்குகிறது, ஆனால் (தற்போதைக்கு) இந்த பகுதியை கிளையண்டில் கட்டுப்படுத்தலாம் - அதை முடக்கலாம் அல்லது உங்கள் சொந்த சர்வரை DoT / DoH க்கு பயன்படுத்தலாம்.
DNS ஐ எவ்வாறு இடைமறிப்பது?
இங்கேயும் பல அணுகுமுறைகள் இருக்கலாம்.
PCAP அல்லது NFLOG வழியாக டிஎன்எஸ் போக்குவரத்தின் இடைமறிப்பு
இந்த இரண்டு இடைமறிப்பு முறைகளும் பயன்பாட்டில் செயல்படுத்தப்படுகின்றன சித்மத். ஆனால் இது நீண்ட காலமாக ஆதரிக்கப்படவில்லை மற்றும் செயல்பாடு மிகவும் பழமையானது, எனவே நீங்கள் இன்னும் அதற்கு ஒரு சேணம் எழுத வேண்டும்.
DNS சர்வர் பதிவுகளின் பகுப்பாய்வு
துரதிர்ஷ்டவசமாக, எனக்கு தெரிந்த மறுநிகழ்வுகளால் பதில்களை பதிவு செய்ய முடியவில்லை, ஆனால் கோரிக்கைகளை மட்டுமே பதிவு செய்ய முடியவில்லை. கொள்கையளவில், இது தர்க்கரீதியானது, ஏனெனில், கோரிக்கைகளைப் போலல்லாமல், பதில்கள் ஒரு சிக்கலான கட்டமைப்பைக் கொண்டுள்ளன, மேலும் அவற்றை உரை வடிவத்தில் எழுதுவது கடினம்.
DNSTap
அதிர்ஷ்டவசமாக, அவர்களில் பலர் ஏற்கனவே இந்த நோக்கத்திற்காக DNSTap ஐ ஆதரிக்கின்றனர்.
DNSTap என்றால் என்ன?
இது டிஎன்எஸ் சேவையகத்திலிருந்து கட்டமைக்கப்பட்ட டிஎன்எஸ் வினவல்கள் மற்றும் பதில்களின் சேகரிப்பாளருக்கு மாற்றுவதற்கான புரோட்டோகால் பஃபர்கள் மற்றும் ஃபிரேம் ஸ்ட்ரீம்களை அடிப்படையாகக் கொண்ட கிளையன்ட்-சர்வர் நெறிமுறையாகும். முக்கியமாக, DNS சேவையகம் வினவல் மற்றும் பதில் மெட்டாடேட்டாவை (செய்தியின் வகை, கிளையன்ட்/சர்வர் IP, முதலியன) மற்றும் முழுமையான DNS செய்திகளை (பைனரி) வடிவத்தில் பிணையத்தில் அனுப்புகிறது.
DNSTap முன்னுதாரணத்தில், DNS சேவையகம் கிளையண்ட்டாகவும், சேகரிப்பாளர் சேவையகமாகவும் செயல்படுகிறது என்பதைப் புரிந்துகொள்வது அவசியம். அதாவது, DNS சர்வர் சேகரிப்பாளருடன் இணைகிறது, மாறாக அல்ல.
இன்று அனைத்து பிரபலமான DNS சேவையகங்களிலும் DNSTap ஆதரிக்கப்படுகிறது. ஆனால், எடுத்துக்காட்டாக, பல விநியோகங்களில் BIND (உபுண்டு LTS போன்றவை) சில காரணங்களுக்காக அதன் ஆதரவு இல்லாமல் உருவாக்கப்படுகிறது. எனவே மறுசீரமைப்பதில் கவலைப்பட வேண்டாம், ஆனால் ஒரு இலகுவான மற்றும் வேகமான ரீகர்சரை எடுத்துக்கொள்வோம் - அன்பௌண்ட்.
DNSTap பிடிப்பது எப்படி?
உள்ளன சிலколичество DNSTap நிகழ்வுகளின் ஸ்ட்ரீமுடன் பணிபுரியும் CLI பயன்பாடுகள், ஆனால் அவை எங்கள் சிக்கலைத் தீர்ப்பதற்கு ஏற்றவை அல்ல. எனவே, தேவையான அனைத்தையும் செய்யும் எனது சொந்த சைக்கிளை கண்டுபிடிக்க முடிவு செய்தேன்: dnstap-bgp
வேலை அல்காரிதம்:
தொடங்கும் போது, அது ஒரு உரைக் கோப்பிலிருந்து டொமைன்களின் பட்டியலை ஏற்றுகிறது, அவற்றைத் தலைகீழாக மாற்றுகிறது (habr.com -> com.habr), உடைந்த கோடுகள், நகல்கள் மற்றும் துணை டொமைன்களை விலக்குகிறது (அதாவது பட்டியலில் habr.com மற்றும் www.habr.com இருந்தால், இது முதல் ஒன்று மட்டுமே ஏற்றப்படும்) மேலும் இந்தப் பட்டியலின் மூலம் வேகமாகத் தேடுவதற்கு முன்னொட்டு மரத்தை உருவாக்குகிறது
DNSTap சேவையகமாகச் செயல்படுவதால், DNS சேவையகத்திலிருந்து இணைப்புக்காகக் காத்திருக்கிறது. கொள்கையளவில், இது UNIX மற்றும் TCP சாக்கெட்டுகளை ஆதரிக்கிறது, ஆனால் DNS சேவையகங்கள் UNIX சாக்கெட்டுகளை மட்டுமே பயன்படுத்த முடியும்.
உள்வரும் DNSTap பாக்கெட்டுகள் முதலில் ஒரு Protobuf கட்டமைப்பில் சிதைக்கப்படுகின்றன, பின்னர் Protobuf புலங்களில் ஒன்றில் அமைந்துள்ள பைனரி DNS செய்தியே DNS RR பதிவுகளின் நிலைக்கு பாகுபடுத்தப்படுகிறது.
கோரப்பட்ட ஹோஸ்ட் (அல்லது அதன் பெற்றோர் டொமைன்) ஏற்றப்பட்ட பட்டியலில் உள்ளதா என சரிபார்க்கப்படுகிறது, இல்லையெனில், பதில் புறக்கணிக்கப்படும்
பதிலில் இருந்து A/AAAA/CNAME RRகள் மட்டுமே தேர்ந்தெடுக்கப்பட்டு அவற்றிலிருந்து தொடர்புடைய IPv4/IPv6 முகவரிகள் பிரித்தெடுக்கப்படும்
ஐபி முகவரிகள் உள்ளமைக்கக்கூடிய TTL உடன் தற்காலிகமாக சேமிக்கப்பட்டு, உள்ளமைக்கப்பட்ட அனைத்து BGP சகாக்களுக்கும் விளம்பரப்படுத்தப்படும்
ஏற்கனவே தேக்ககப்படுத்தப்பட்ட ஐபியை சுட்டிக்காட்டும் பதிலைப் பெறும்போது, அதன் TTL புதுப்பிக்கப்படும்
TTL காலாவதியான பிறகு, கேச் மற்றும் BGP அறிவிப்புகளில் இருந்து உள்ளீடு அகற்றப்படும்
கூடுதல் செயல்பாடு:
SIGHUP மூலம் டொமைன்களின் பட்டியலை மீண்டும் படிக்கிறது
மற்ற நிகழ்வுகளுடன் ஒத்திசைவில் தற்காலிக சேமிப்பை வைத்திருத்தல் dnstap-bgp HTTP/JSON வழியாக
மறுதொடக்கம் செய்த பிறகு அதன் உள்ளடக்கங்களை மீட்டெடுக்க வட்டில் உள்ள தற்காலிக சேமிப்பை (BoltDB தரவுத்தளத்தில்) நகலெடுக்கவும்
வேறு நெட்வொர்க் பெயர்வெளிக்கு மாறுவதற்கான ஆதரவு (இது ஏன் தேவைப்படுகிறது என்பதை கீழே விவரிக்கப்படும்)
IPv6 ஆதரவு
கட்டுப்பாடுகள்:
IDN டொமைன்கள் இன்னும் ஆதரிக்கப்படவில்லை
சில BGP அமைப்புகள்
நான் சேகரித்தேன் RPM மற்றும் DEB எளிதாக நிறுவுவதற்கான தொகுப்புகள். systemd உடன் ஒப்பீட்டளவில் அனைத்து சமீபத்திய OSகளிலும் வேலை செய்ய வேண்டும். அவர்களுக்கு எந்த சார்புகளும் இல்லை.
திட்டம்
எனவே, அனைத்து கூறுகளையும் ஒன்றாக இணைக்க ஆரம்பிக்கலாம். இதன் விளைவாக, இந்த நெட்வொர்க் டோபாலஜி போன்ற ஒன்றை நாம் பெற வேண்டும்:
வேலையின் தர்க்கம், வரைபடத்திலிருந்து தெளிவாக உள்ளது என்று நான் நினைக்கிறேன்:
கிளையன்ட் எங்கள் சேவையகத்தை DNS ஆக உள்ளமைத்துள்ளார், மேலும் DNS வினவல்களும் VPN வழியாக செல்ல வேண்டும். வழங்குநரால் தடுக்க DNS குறுக்கீடு பயன்படுத்த முடியாது என்பதால் இது அவசியம்.
தளத்தைத் திறக்கும் போது, கிளையன்ட் "xxx.org இன் IPகள் என்ன" போன்ற DNS வினவலை அனுப்புகிறது.
அன்பவுண்ட் xxx.org ஐத் தீர்க்கிறது (அல்லது தற்காலிக சேமிப்பில் இருந்து எடுக்கிறது) மற்றும் கிளையன்ட் “xxx.org க்கு அத்தகைய மற்றும் அத்தகைய ஐபி உள்ளது” என்று பதிலை அனுப்புகிறது, அதை DNSTap வழியாக இணையாக நகலெடுக்கிறது.
dnstap-bgp இல் இந்த முகவரிகளை அறிவிக்கிறது பறவை டொமைன் தடுக்கப்பட்ட பட்டியலில் இருந்தால் BGP வழியாக
பறவை இந்த ஐபிகளுக்கான வழியை விளம்பரப்படுத்துகிறது next-hop self கிளையன்ட் திசைவி
கிளையண்டிலிருந்து இந்த ஐபிகளுக்கு வரும் அடுத்தடுத்த பாக்கெட்டுகள் சுரங்கப்பாதை வழியாக செல்கின்றன
சேவையகத்தில், தடுக்கப்பட்ட தளங்களுக்கான வழிகளுக்கு, நான் BIRD க்குள் ஒரு தனி அட்டவணையைப் பயன்படுத்துகிறேன், அது எந்த வகையிலும் OS உடன் குறுக்கிடாது.
இந்தத் திட்டத்தில் ஒரு குறைபாடு உள்ளது: கிளையண்டிலிருந்து முதல் SYN பாக்கெட், பெரும்பாலும், உள்நாட்டு வழங்குநர் மூலம் வெளியேற நேரம் கிடைக்கும். பாதை உடனடியாக அறிவிக்கப்படவில்லை. வழங்குநர் எவ்வாறு தடுப்பதைச் செய்கிறார் என்பதைப் பொறுத்து இங்கே விருப்பங்கள் சாத்தியமாகும். அவர் போக்குவரத்தை குறைத்தால், எந்த பிரச்சனையும் இல்லை. அவர் அதை சில DPI க்கு திருப்பிவிட்டால், (கோட்பாட்டளவில்) சிறப்பு விளைவுகள் சாத்தியமாகும்.
வாடிக்கையாளர்கள் DNS TTL அற்புதங்களை மதிக்காததும் சாத்தியமாகும், இது அன்பௌண்ட் என்று கேட்பதற்குப் பதிலாக, அதன் அழுகிய தற்காலிக சேமிப்பிலிருந்து சில பழைய உள்ளீடுகளைப் பயன்படுத்துவதற்கு வாடிக்கையாளர் காரணமாகலாம்.
நடைமுறையில், முதல் அல்லது இரண்டாவது எனக்கு சிக்கல்களை ஏற்படுத்தவில்லை, ஆனால் உங்கள் மைலேஜ் மாறுபடலாம்.
சர்வர் டியூனிங்
உருளும் வசதிக்காக, எழுதினேன் அன்சிபில் பங்கு. இது லினக்ஸின் அடிப்படையில் சேவையகங்கள் மற்றும் கிளையன்ட்கள் இரண்டையும் கட்டமைக்க முடியும் (டெப் அடிப்படையிலான விநியோகங்களுக்காக வடிவமைக்கப்பட்டது). அனைத்து அமைப்புகளும் மிகவும் வெளிப்படையானவை மற்றும் அமைக்கப்பட்டுள்ளன inventory.yml. இந்தப் பாத்திரம் எனது பெரிய பிளேபுக்கிலிருந்து வெட்டப்பட்டது, அதனால் அதில் பிழைகள் இருக்கலாம் - கோரிக்கைகளை இழுக்கவும் வரவேற்கிறோம் 🙂
முக்கிய கூறுகள் வழியாக செல்லலாம்.
பி.ஜி.பி
ஒரே ஹோஸ்டில் இரண்டு பிஜிபி டெமான்களை இயக்குவது ஒரு அடிப்படைச் சிக்கலைக் கொண்டுள்ளது: லோக்கல் ஹோஸ்டுடன் (அல்லது ஏதேனும் உள்ளூர் இடைமுகத்துடன்) பிஜிபி பியரிங் அமைக்க BIRD விரும்பவில்லை. வார்த்தையிலிருந்து. கூகிள் செய்து அஞ்சல் பட்டியல்களைப் படிப்பது உதவவில்லை, இது வடிவமைப்பின் மூலம் என்று அவர்கள் கூறுகின்றனர். ஒருவேளை ஏதாவது வழி இருக்கலாம், ஆனால் நான் அதைக் கண்டுபிடிக்கவில்லை.
நீங்கள் மற்றொரு BGP டீமனை முயற்சி செய்யலாம், ஆனால் நான் BIRD ஐ விரும்புகிறேன், அது என்னால் எல்லா இடங்களிலும் பயன்படுத்தப்படுகிறது, நான் நிறுவனங்களை உருவாக்க விரும்பவில்லை.
எனவே, dnstap-bgp ஐ நெட்வொர்க் பெயர்வெளியில் மறைத்து வைத்தேன், இது வெத் இடைமுகத்தின் மூலம் ரூட்டுடன் இணைக்கப்பட்டுள்ளது: இது ஒரு குழாய் போன்றது, அதன் முனைகள் வெவ்வேறு பெயர்வெளிகளில் ஒட்டிக்கொண்டிருக்கும். இந்த ஒவ்வொரு முனைகளிலும், ஹோஸ்டுக்கு அப்பால் செல்லாத தனிப்பட்ட p2p ஐபி முகவரிகளை நாங்கள் தொங்கவிடுகிறோம், எனவே அவை எதுவும் இருக்கலாம். உள்ளே உள்ள செயல்முறைகளை அணுகுவதற்குப் பயன்படுத்தப்படும் அதே பொறிமுறையாகும் அனைவராலும் நேசிக்கப்படுபவர் டோக்கர் மற்றும் பிற கொள்கலன்கள்.
இதற்காக எழுதப்பட்டது ஸ்கிரிப்ட் மற்றொரு பெயர்வெளிக்கு உங்களை இழுத்துச் செல்வதற்காக மேலே விவரிக்கப்பட்ட செயல்பாடு dnstap-bgp இல் சேர்க்கப்பட்டது. இதன் காரணமாக, இது ரூட்டாக இயக்கப்பட வேண்டும் அல்லது setcap கட்டளை வழியாக CAP_SYS_ADMIN பைனரிக்கு வழங்கப்பட வேண்டும்.
பெயர்வெளியை உருவாக்குவதற்கான எடுத்துக்காட்டு ஸ்கிரிப்ட்
#!/bin/bash
NS="dtap"
IP="/sbin/ip"
IPNS="$IP netns exec $NS $IP"
IF_R="veth-$NS-r"
IF_NS="veth-$NS-ns"
IP_R="192.168.149.1"
IP_NS="192.168.149.2"
/bin/systemctl stop dnstap-bgp || true
$IP netns del $NS > /dev/null 2>&1
$IP netns add $NS
$IP link add $IF_R type veth peer name $IF_NS
$IP link set $IF_NS netns $NS
$IP addr add $IP_R remote $IP_NS dev $IF_R
$IP link set $IF_R up
$IPNS addr add $IP_NS remote $IP_R dev $IF_NS
$IPNS link set $IF_NS up
/bin/systemctl start dnstap-bgp
router id 192.168.1.1;
table rkn;
# Clients
protocol bgp bgp_client1 {
table rkn;
local as 65000;
neighbor 192.168.1.2 as 65000;
direct;
bfd on;
next hop self;
graceful restart;
graceful restart time 60;
export all;
import none;
}
# DNSTap-BGP
protocol bgp bgp_dnstap {
table rkn;
local as 65000;
neighbor 192.168.149.2 as 65000;
direct;
passive on;
rr client;
import all;
export none;
}
# Static routes list
protocol static static_rkn {
table rkn;
include "rkn_routes.list";
import all;
export none;
}
rkn_routes.list
route 3.226.79.85/32 via "ens3";
route 18.236.189.0/24 via "ens3";
route 3.224.21.0/24 via "ens3";
...
டிஎன்எஸ்
முன்னிருப்பாக, உபுண்டுவில், Unbound binary ஆனது AppArmor சுயவிவரத்தால் பிணைக்கப்பட்டுள்ளது, இது அனைத்து வகையான DNSTap சாக்கெட்டுகளுடன் இணைப்பதைத் தடுக்கிறது. நீங்கள் இந்த சுயவிவரத்தை நீக்கலாம் அல்லது முடக்கலாம்:
இது அநேகமாக பிளேபுக்கில் சேர்க்கப்பட வேண்டும். சுயவிவரத்தை சரிசெய்து தேவையான உரிமைகளை வழங்குவது சிறந்தது, ஆனால் நான் மிகவும் சோம்பேறியாக இருந்தேன்.
unbound.conf
server:
chroot: ""
port: 53
interface: 0.0.0.0
root-hints: "/var/lib/unbound/named.root"
auto-trust-anchor-file: "/var/lib/unbound/root.key"
access-control: 192.168.0.0/16 allow
remote-control:
control-enable: yes
control-use-cert: no
dnstap:
dnstap-enable: yes
dnstap-socket-path: "/tmp/dnstap.sock"
dnstap-send-identity: no
dnstap-send-version: no
dnstap-log-client-response-messages: yes
பட்டியல்களைப் பதிவிறக்குதல் மற்றும் செயலாக்குதல்
ஐபி முகவரிகளின் பட்டியலைப் பதிவிறக்கி செயலாக்குவதற்கான ஸ்கிரிப்ட்
இது பட்டியலைப் பதிவிறக்குகிறது, முன்னொட்டு வரை இருக்கும் pfx. தி சேர்க்க வேண்டாம் и வேண்டாம்_சுருக்க ஐபிகள் மற்றும் நெட்வொர்க்குகளைத் தவிர்க்க அல்லது சுருக்கமாகச் சொல்லாமல் இருக்கச் சொல்லலாம். எனக்கு அது தேவைப்பட்டது. எனது VPS இன் சப்நெட் தடுப்புப்பட்டியலில் இருந்தது 🙂
வேடிக்கையான விஷயம் என்னவென்றால், RosKomSvoboda API ஆனது இயல்புநிலை பைதான் பயனர் முகவர் மூலம் கோரிக்கைகளைத் தடுக்கிறது. ஸ்கிரிப்ட்-கிட்டி புரிந்து கொண்டது போல் தெரிகிறது. எனவே, நாங்கள் அதை Ognelis என மாற்றுகிறோம்.
இதுவரை, இது IPv4 உடன் மட்டுமே வேலை செய்கிறது. IPv6 இன் பங்கு சிறியது, ஆனால் அதை சரிசெய்ய எளிதாக இருக்கும். நீங்கள் bird6 ஐயும் பயன்படுத்த வேண்டும் எனில்.
rkn.py
#!/usr/bin/python3
import json, urllib.request, ipaddress as ipa
url = 'https://api.reserve-rbl.ru/api/v2/ips/json'
pfx = '24'
dont_summarize = {
# ipa.IPv4Network('1.1.1.0/24'),
}
dont_add = {
# ipa.IPv4Address('1.1.1.1'),
}
req = urllib.request.Request(
url,
data=None,
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
}
)
f = urllib.request.urlopen(req)
ips = json.loads(f.read().decode('utf-8'))
prefix32 = ipa.IPv4Address('255.255.255.255')
r = {}
for i in ips:
ip = ipa.ip_network(i)
if not isinstance(ip, ipa.IPv4Network):
continue
addr = ip.network_address
if addr in dont_add:
continue
m = ip.netmask
if m != prefix32:
r[m] = [addr, 1]
continue
sn = ipa.IPv4Network(str(addr) + '/' + pfx, strict=False)
if sn in dont_summarize:
tgt = addr
else:
tgt = sn
if not sn in r:
r[tgt] = [addr, 1]
else:
r[tgt][1] += 1
o = []
for n, v in r.items():
if v[1] == 1:
o.append(str(v[0]) + '/32')
else:
o.append(n)
for k in o:
print(k)
புதுப்பிக்க வேண்டிய ஸ்கிரிப்ட்
நான் ஒரு நாளைக்கு ஒரு முறை கிரீடத்தில் ஓடுகிறேன், ஒருவேளை ஒவ்வொரு 4 மணிநேரமும் அதை இழுப்பது மதிப்பு. இது என் கருத்துப்படி, RKN வழங்குநர்களிடமிருந்து தேவைப்படும் புதுப்பித்தல் காலம். கூடுதலாக, அவர்களுக்கு வேறு சில அவசரத் தடைகள் உள்ளன, அவை வேகமாக வரக்கூடும்.
பின்வருவனவற்றைச் செய்கிறது:
முதல் ஸ்கிரிப்டை இயக்குகிறது மற்றும் பாதைகளின் பட்டியலை புதுப்பிக்கிறது (rkn_routes.listBIRD க்கான
BIRD ஐ மீண்டும் ஏற்றவும்
dnstap-bgpக்கான டொமைன்களின் பட்டியலைப் புதுப்பித்து சுத்தம் செய்கிறது
dnstap-bgp ஐ மீண்டும் ஏற்றவும்
rkn_update.sh
#!/bin/bash
ROUTES="/etc/bird/rkn_routes.list"
DOMAINS="/var/cache/rkn_domains.txt"
# Get & summarize routes
/opt/rkn.py | sed 's/(.*)/route 1 via "ens3";/' > $ROUTES.new
if [ $? -ne 0 ]; then
rm -f $ROUTES.new
echo "Unable to download RKN routes"
exit 1
fi
if [ -e $ROUTES ]; then
mv $ROUTES $ROUTES.old
fi
mv $ROUTES.new $ROUTES
/bin/systemctl try-reload-or-restart bird
# Get domains
curl -s https://api.reserve-rbl.ru/api/v2/domains/json -o - | jq -r '.[]' | sed 's/^*.//' | sort | uniq > $DOMAINS.new
if [ $? -ne 0 ]; then
rm -f $DOMAINS.new
echo "Unable to download RKN domains"
exit 1
fi
if [ -e $DOMAINS ]; then
mv $DOMAINS $DOMAINS.old
fi
mv $DOMAINS.new $DOMAINS
/bin/systemctl try-reload-or-restart dnstap-bgp
அவை அதிக சிந்தனை இல்லாமல் எழுதப்பட்டவை, எனவே நீங்கள் மேம்படுத்தக்கூடிய ஒன்றைக் கண்டால் - அதற்குச் செல்லுங்கள்.
கிளையண்ட் அமைப்பு
இங்கே நான் லினக்ஸ் ரவுட்டர்களுக்கான எடுத்துக்காட்டுகளைத் தருகிறேன், ஆனால் மைக்ரோடிக் / சிஸ்கோ விஷயத்தில் இது இன்னும் எளிதாக இருக்க வேண்டும்.
முதலில், நாங்கள் BIRD ஐ அமைக்கிறோம்:
bird.conf
router id 192.168.1.2;
table rkn;
protocol device {
scan time 10;
};
# Servers
protocol bgp bgp_server1 {
table rkn;
local as 65000;
neighbor 192.168.1.1 as 65000;
direct;
bfd on;
next hop self;
graceful restart;
graceful restart time 60;
rr client;
export none;
import all;
}
protocol kernel {
table rkn;
kernel table 222;
scan time 10;
export all;
import none;
}
எனவே, BGP இலிருந்து பெறப்பட்ட வழிகளை கர்னல் ரூட்டிங் அட்டவணை எண் 222 உடன் ஒத்திசைப்போம்.
அதன் பிறகு, இயல்புநிலையைப் பார்ப்பதற்கு முன், இந்த பிளேட்டைப் பார்க்க கர்னலைக் கேட்டால் போதும்:
# ip rule add from all pref 256 lookup 222
# ip rule
0: from all lookup local
256: from all lookup 222
32766: from all lookup main
32767: from all lookup default
எல்லாம், சர்வரின் சுரங்கப்பாதை ஐபி முகவரியை டிஎன்எஸ் ஆக விநியோகிக்க ரூட்டரில் டிஹெச்சிபியை உள்ளமைக்க உள்ளது, மேலும் திட்டம் தயாராக உள்ளது.
குறைபாடுகளை
டொமைன்களின் பட்டியலை உருவாக்குவதற்கும் செயலாக்குவதற்கும் தற்போதைய அல்காரிதம் மூலம், மற்றவற்றுடன், youtube.com மற்றும் அதன் CDNகள்.
எல்லா வீடியோக்களும் VPN வழியாக செல்லும் என்பதற்கு இது வழிவகுக்கிறது, இது முழு சேனலையும் அடைத்துவிடும். தற்போதைக்கு RKN ஐத் தடுக்கும் பிரபலமான டொமைன்கள்-விலக்குகளின் பட்டியலைத் தொகுப்பது மதிப்புக்குரியது. பாகுபடுத்தும் போது அவற்றைத் தவிர்க்கவும்.
முடிவுக்கு
விவரிக்கப்பட்ட முறையானது வழங்குநர்கள் தற்போது செயல்படுத்தும் எந்தவொரு தடுப்பையும் புறக்கணிக்க உங்களை அனுமதிக்கிறது.
கொள்கையளவில், dnstap-bgp டொமைன் பெயரின் அடிப்படையில் சில போக்குவரத்துக் கட்டுப்பாடு தேவைப்படும் வேறு எந்த நோக்கத்திற்காகவும் பயன்படுத்தலாம். நம் காலத்தில், ஆயிரம் தளங்கள் ஒரே ஐபி முகவரியில் (உதாரணமாக, சில கிளவுட்ஃப்ளேருக்குப் பின்னால்) செயலிழக்க முடியும் என்பதை நினைவில் கொள்ளுங்கள், எனவே இந்த முறை குறைவான துல்லியத்தைக் கொண்டுள்ளது.
ஆனால் பூட்டுகளைத் தவிர்ப்பதற்கான தேவைகளுக்கு, இது போதுமானது.