Ρύθμιση BGP για παράκαμψη αποκλεισμού ή "Πώς σταμάτησα να φοβάμαι και ερωτεύτηκα τον RKN"

Λοιπόν, εντάξει, το «ερωτεύτηκε» είναι υπερβολή. Μάλλον «θα μπορούσε να συνυπάρξει».

Όπως όλοι γνωρίζετε, από τις 16 Απριλίου 2018, η Roskomnadzor αποκλείει την πρόσβαση σε πόρους στο δίκτυο με εξαιρετικά ευρείες πινελιές, προσθέτοντας στο Ενοποιημένο Μητρώο ονομάτων τομέα, δείκτες σε σελίδες τοποθεσιών στο Διαδίκτυο και διευθύνσεις δικτύου που σας επιτρέπουν να εντοπίστε ιστότοπους στο Διαδίκτυο που περιέχουν πληροφορίες, η διάδοση των οποίων απαγορεύεται στη Ρωσική Ομοσπονδία» (στο κείμενο - απλώς ένα μητρώο) /10 μερικές φορές. Ως αποτέλεσμα, οι πολίτες της Ρωσικής Ομοσπονδίας και οι επιχειρήσεις υποφέρουν, έχοντας χάσει την πρόσβαση στους απολύτως νόμιμους πόρους που χρειάζονται.

Αφού είπα στα σχόλια σε ένα από τα άρθρα στο Habré ότι ήμουν έτοιμος να βοηθήσω τα θύματα στη δημιουργία ενός συστήματος παράκαμψης, αρκετοί άνθρωποι επικοινώνησαν μαζί μου ζητώντας μια τέτοια βοήθεια. Όταν όλα λειτούργησαν για αυτούς, ένας από αυτούς συνέστησε να περιγράψει την τεχνική σε ένα άρθρο. Με προβληματισμό, αποφάσισα να σπάσω τη σιωπή μου στον ιστότοπο και να προσπαθήσω για μια φορά να γράψω κάτι ενδιάμεσο μεταξύ ενός έργου και μιας ανάρτησης στο Facebook, δηλ. habrapost. Το αποτέλεσμα είναι μπροστά σας.

Αποποίηση ευθυνών

Δεδομένου ότι δεν είναι πολύ νόμιμη η δημοσίευση τρόπων για την παράκαμψη του αποκλεισμού πρόσβασης σε πληροφορίες που απαγορεύονται στην επικράτεια της Ρωσικής Ομοσπονδίας, σκοπός αυτού του άρθρου θα είναι να μιλήσουμε για μια μέθοδο που σας επιτρέπει να αυτοματοποιήσετε την πρόσβαση σε πόρους που επιτρέπονται στην επικράτεια της Ρωσικής Ομοσπονδίας, αλλά λόγω των ενεργειών κάποιου απρόσιτου απευθείας μέσω του παρόχου σας. Και η πρόσβαση σε άλλους πόρους, που αποκτήθηκαν ως αποτέλεσμα ενεργειών από το άρθρο, είναι μια ατυχής παρενέργεια και δεν είναι σε καμία περίπτωση ο σκοπός του άρθρου.

Επίσης, δεδομένου ότι είμαι κατά κύριο λόγο αρχιτέκτονας δικτύων στο επάγγελμα, το επάγγελμα και τη διαδρομή ζωής, ο προγραμματισμός και το Linux δεν είναι τα δυνατά μου σημεία. Επομένως, φυσικά, τα σενάρια μπορούν να γραφτούν καλύτερα, τα ζητήματα ασφάλειας στο VPS μπορούν να επιλυθούν πιο βαθιά κ.λπ. Οι προτάσεις σας θα γίνουν δεκτές με ευγνωμοσύνη, εάν είναι αρκετά λεπτομερείς - θα χαρώ να τις προσθέσω στο κείμενο του άρθρου.

TL? DR

Αυτοματοποιούμε την πρόσβαση σε πόρους μέσω του υπάρχοντος τούνελ σας χρησιμοποιώντας ένα αντίγραφο του μητρώου και του πρωτοκόλλου BGP. Ο στόχος είναι να αφαιρεθεί όλη η κίνηση που απευθύνεται σε αποκλεισμένους πόρους στη σήραγγα. Ελάχιστη εξήγηση, κυρίως οδηγίες βήμα προς βήμα.

Τι χρειάζεστε για αυτό

Δυστυχώς, αυτή η ανάρτηση δεν είναι για όλους. Για να χρησιμοποιήσετε αυτήν την τεχνική, θα χρειαστεί να συγκεντρώσετε μερικά στοιχεία:

  1. Πρέπει να έχετε διακομιστή linux κάπου έξω από το πεδίο αποκλεισμού. Ή τουλάχιστον η επιθυμία να ξεκινήσετε έναν τέτοιο διακομιστή - αφού τώρα κοστίζει από 9 $ / έτος, και ενδεχομένως λιγότερο. Η μέθοδος είναι επίσης κατάλληλη εάν έχετε ξεχωριστή σήραγγα VPN, τότε ο διακομιστής μπορεί να βρίσκεται μέσα στο πεδίο μπλοκ.
  2. Ο δρομολογητής σας πρέπει να είναι αρκετά έξυπνος για να μπορεί
    • οποιονδήποτε πελάτη VPN που σας αρέσει (προτιμώ το OpenVPN, αλλά μπορεί να είναι PPTP, L2TP, GRE+IPSec και οποιαδήποτε άλλη επιλογή που δημιουργεί μια διεπαφή σήραγγας).
    • Πρωτόκολλο BGPv4. Που σημαίνει ότι για το SOHO μπορεί να είναι Mikrotik ή οποιοσδήποτε δρομολογητής με OpenWRT/LEDE/παρόμοιο προσαρμοσμένο υλικολογισμικό που σας επιτρέπει να εγκαταστήσετε το Quagga ή το Bird. Δεν απαγορεύεται επίσης η χρήση δρομολογητή υπολογιστή. Για μια επιχείρηση, ανατρέξτε στην τεκμηρίωση του δρομολογητή συνόρων για υποστήριξη BGP.
  3. Θα πρέπει να είστε εξοικειωμένοι με τη χρήση του Linux και τις τεχνολογίες δικτύου, συμπεριλαμβανομένου του BGP. Ή τουλάχιστον θέλετε να πάρετε αυτή την ιδέα. Δεδομένου ότι δεν είμαι έτοιμος να αγκαλιάσω την απεραντοσύνη αυτή τη φορά, θα πρέπει να μελετήσετε μερικά σημεία που σας είναι ακατανόητα μόνοι σας. Ωστόσο, φυσικά θα απαντήσω σε συγκεκριμένες ερωτήσεις στα σχόλια και είναι απίθανο να είμαι ο μόνος που θα απαντήσει, οπότε μη διστάσετε να ρωτήσετε.

Τι χρησιμοποιείται στο παράδειγμα

  • Αντίγραφο του μητρώου https://github.com/zapret-info/z-i 
  • VPS - Ubuntu 16.04
  • Υπηρεσία δρομολόγησης - πτηνά 1.6.3   
  • δρομολογητής - Mikrotik hAP ac
  • Φάκελοι εργασίας - δεδομένου ότι εργαζόμαστε ως root, τα περισσότερα από όλα θα τοποθετηθούν στον αρχικό φάκελο root. Αντίστοιχα:
    • /root/blacklist - φάκελος εργασίας με σενάριο μεταγλώττισης
    • /root/zi - ένα αντίγραφο του μητρώου από το github
    • /etc/bird - τυπικός φάκελος ρυθμίσεων υπηρεσίας πτηνών
  • Αποδεχόμαστε τα 194.165.22.146, ASN 64998 ως την εξωτερική διεύθυνση IP του VPS με τον διακομιστή δρομολόγησης και το σημείο τερματισμού της σήραγγας. εξωτερική διεύθυνση IP του δρομολογητή - 81.177.103.94, ASN 64999
  • Οι διευθύνσεις IP μέσα στο τούνελ είναι 172.30.1.1 και 172.30.1.2, αντίστοιχα.

Ρύθμιση BGP για παράκαμψη αποκλεισμού ή "Πώς σταμάτησα να φοβάμαι και ερωτεύτηκα τον RKN"

Φυσικά, μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο δρομολογητή, λειτουργικό σύστημα και προϊόντα λογισμικού, προσαρμόζοντας τη λύση ώστε να ταιριάζει στη λογική τους.

Εν συντομία - η λογική της απόφασης

  1. Προπαρασκευαστικές ενέργειες
    1. Λήψη VPS
    2. Ανεβάζουμε το τούνελ από το ρούτερ στο VPS
  2. Λήψη και τακτική ενημέρωση αντιγράφου του μητρώου
  3. Εγκατάσταση και διαμόρφωση της υπηρεσίας δρομολόγησης
  4. Δημιουργήστε μια λίστα στατικών διαδρομών για την υπηρεσία δρομολόγησης με βάση το μητρώο
  5. Συνδέουμε το δρομολογητή στην υπηρεσία και ρυθμίζουμε την αποστολή όλης της κίνησης μέσω της σήραγγας.

Η πραγματική απόφαση

Προπαρασκευαστικές ενέργειες

Στην απεραντοσύνη του δικτύου υπάρχουν πολλές υπηρεσίες που παρέχουν VPS για εξαιρετικά λογικά χρήματα. Μέχρι στιγμής, έχω βρει και χρησιμοποιώ την επιλογή για 9 $/έτος, αλλά ακόμα κι αν δεν ενοχλείτε πραγματικά, υπάρχουν πολλές επιλογές για 1 E/μήνα σε κάθε γωνία. Το ζήτημα της επιλογής ενός VPS βρίσκεται πολύ πέρα ​​από το πεδίο εφαρμογής αυτού του άρθρου, οπότε αν κάτι δεν είναι ξεκάθαρο σε κάποιον σχετικά με αυτό, ρωτήστε το στα σχόλια.

Εάν χρησιμοποιείτε το VPS όχι μόνο για την υπηρεσία δρομολόγησης, αλλά και για τον τερματισμό μιας σήραγγας σε αυτήν, πρέπει να ανυψώσετε αυτό το τούνελ και, σχεδόν αναμφίβολα, να διαμορφώσετε το NAT για αυτό. Υπάρχει ένας μεγάλος αριθμός οδηγιών στο δίκτυο για αυτές τις ενέργειες, δεν θα τις επαναλάβω εδώ. Η κύρια απαίτηση για ένα τέτοιο τούνελ είναι ότι πρέπει να δημιουργήσει μια ξεχωριστή διεπαφή στο δρομολογητή σας που να υποστηρίζει τη σήραγγα προς το VPS. Οι περισσότερες χρησιμοποιούμενες τεχνολογίες VPN πληρούν αυτήν την απαίτηση - για παράδειγμα, το OpenVPN σε λειτουργία συντονισμού είναι μια χαρά.

Λάβετε ένα αντίγραφο του μητρώου

Όπως είπε ο Jabrail, «αυτός που μας εμποδίζει θα μας βοηθήσει». Εφόσον το RKN δημιουργεί ένα μητρώο απαγορευμένων πόρων, θα ήταν αμαρτία να μην χρησιμοποιήσουμε αυτό το μητρώο για να λύσουμε το πρόβλημά μας. Θα λάβουμε ένα αντίγραφο του μητρώου από το github.

Πηγαίνουμε στον διακομιστή σας Linux, εμπίπτουμε στο πλαίσιο του root'a (sudo su-) και εγκαταστήστε το git αν δεν είναι ήδη εγκατεστημένο.

apt install git

Μεταβείτε στον αρχικό σας κατάλογο και τραβήξτε ένα αντίγραφο του μητρώου.

cd ~ && git clone --depth=1 https://github.com/zapret-info/z-i 

Ρυθμίστε μια ενημέρωση cron (την έχω κάθε 20 λεπτά, αλλά μπορείτε να επιλέξετε οποιοδήποτε διάστημα σας ενδιαφέρει). Για να το κάνουμε αυτό, τρέχουμε crontab -e και προσθέστε την ακόλουθη γραμμή σε αυτό:

*/20 * * * * cd ~/z-i && git pull && git gc

Συνδέουμε ένα άγκιστρο που θα δημιουργήσει αρχεία για την υπηρεσία δρομολόγησης μετά την ενημέρωση του μητρώου. Για να γίνει αυτό, δημιουργούμε ένα αρχείο /root/zi/.git/hooks/post-merge με το ακόλουθο περιεχόμενο:

#!/usr/bin/env bash
changed_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"
check_run() {
    echo "$changed_files" | grep --quiet "$1" && eval "$2"
}
check_run dump.csv "/root/blacklist/makebgp"

και μην ξεχάσετε να το κάνετε εκτελέσιμο

chmod +x /root/z-i/.git/hooks/post-merge

Το σενάριο makebgp που αναφέρεται από το άγκιστρο θα δημιουργηθεί αργότερα.

Εγκατάσταση και διαμόρφωση της υπηρεσίας δρομολόγησης

Εγκαταστήστε το πουλί. Δυστυχώς, η τρέχουσα δημοσιευμένη έκδοση του πουλιού στα αποθετήρια του Ubuntu είναι συγκρίσιμη σε φρεσκάδα με τα περιττώματα του Archeopteryx, επομένως πρέπει πρώτα να προσθέσουμε την επίσημη PPA των προγραμματιστών λογισμικού στο σύστημα.

add-apt-repository ppa:cz.nic-labs/bird
apt update
apt install bird

Μετά από αυτό, απενεργοποιούμε αμέσως το bird για IPv6 - σε αυτήν την εγκατάσταση δεν θα το χρειαστούμε.

systemctl stop bird6
systemctl disable bird6

Παρακάτω είναι ένα μινιμαλιστικό αρχείο διαμόρφωσης για την υπηρεσία πουλιών (/etc/bird/bird.conf), που είναι αρκετά για εμάς (και για άλλη μια φορά σας υπενθυμίζω ότι κανείς δεν απαγορεύει να αναπτύξετε και να ρυθμίσετε την ιδέα για να ταιριάζει στις δικές σας ανάγκες)

log syslog all;
router id 172.30.1.1;

protocol kernel {
        scan time 60;
        import none;
#       export all;   # Actually insert routes into the kernel routing table
}

protocol device {
        scan time 60;
}

protocol direct {
        interface "venet*", "tun*"; # Restrict network interfaces it works with
}

protocol static static_bgp {
        import all;
        include "pfxlist.txt";
        #include "iplist.txt";
}

protocol bgp OurRouter {
        description "Our Router";
        neighbor 81.177.103.94 as 64999;
        import none;
        export where proto = "static_bgp";
        local as 64998;
        passive off;
        multihop;
}

αναγνωριστικό δρομολογητή - αναγνωριστικό δρομολογητή, που μοιάζει οπτικά με διεύθυνση IPv4, αλλά δεν είναι. Στην περίπτωσή μας, μπορεί να είναι οποιοσδήποτε αριθμός 32-bit στη μορφή διεύθυνσης IPv4, αλλά είναι καλή πρακτική να καθορίσετε τη διεύθυνση IPv4 της συσκευής σας (σε αυτήν την περίπτωση, VPS) εκεί.

Το πρωτόκολλο direct καθορίζει ποιες διεπαφές θα λειτουργούν με τη διαδικασία δρομολόγησης. Το παράδειγμα δίνει μερικά παραδείγματα ονομάτων, μπορείτε να προσθέσετε περισσότερα. Μπορείτε επίσης απλώς να διαγράψετε τη γραμμή, οπότε ο διακομιστής θα ακούσει όλες τις διαθέσιμες διεπαφές με διεύθυνση IPv4.

Το πρωτόκολλο στατικό είναι η μαγεία μας που φορτώνει λίστες με προθέματα και διευθύνσεις IP (που είναι, φυσικά, προθέματα /32) από αρχεία για μεταγενέστερη ανακοίνωση. Από πού προέρχονται αυτές οι λίστες θα συζητηθεί παρακάτω. Λάβετε υπόψη ότι η φόρτωση των διευθύνσεων IP σχολιάζεται από προεπιλογή, ο λόγος για αυτό είναι ο μεγάλος όγκος μεταφόρτωσης. Για σύγκριση, τη στιγμή της σύνταξης του άρθρου, υπάρχουν 78 γραμμές στη λίστα των προθεμάτων και 85898 στη λίστα των διευθύνσεων IP. Συνιστώ ανεπιφύλακτα να ξεκινήσετε και να κάνετε εντοπισμό σφαλμάτων μόνο στη λίστα προθεμάτων και να αποφασίσετε εάν ή όχι για να ενεργοποιήσετε τη φόρτωση ip στο μέλλον αφού πειραματιστείτε με τον δρομολογητή σας. Δεν μπορεί ο καθένας από αυτούς να αφομοιώσει εύκολα 85 χιλιάδες καταχωρήσεις στον πίνακα δρομολόγησης.

Το πρωτόκολλο bgp ρυθμίζει στην πραγματικότητα το bgp peering με τον δρομολογητή σας. Η διεύθυνση ip είναι η διεύθυνση της εξωτερικής διεπαφής του δρομολογητή (ή η διεύθυνση της διεπαφής της σήραγγας από την πλευρά του δρομολογητή), τα 64998 και 64999 είναι οι αριθμοί των αυτόνομων συστημάτων. Σε αυτήν την περίπτωση, μπορούν να εκχωρηθούν με τη μορφή οποιωνδήποτε αριθμών 16 bit, αλλά είναι καλή πρακτική να χρησιμοποιείτε αριθμούς AS από την ιδιωτική περιοχή που ορίζεται από το RFC6996 - 64512-65534 συμπεριλαμβανομένου (υπάρχει μορφή ASN 32 bit, αλλά στην περίπτωσή μας αυτό είναι σίγουρα υπερβολικό). Η περιγραφόμενη διαμόρφωση χρησιμοποιεί peering eBGP, στην οποία οι αριθμοί αυτόνομου συστήματος της υπηρεσίας δρομολόγησης και του δρομολογητή πρέπει να είναι διαφορετικοί.

Όπως μπορείτε να δείτε, η υπηρεσία πρέπει να γνωρίζει τη διεύθυνση IP του δρομολογητή, επομένως εάν έχετε μια δυναμική ή μη δρομολογήσιμη ιδιωτική διεύθυνση (RFC1918) ή κοινόχρηστη (RFC6598), δεν έχετε καμία επιλογή να αυξήσετε το peering στην εξωτερική διεπαφή, αλλά η υπηρεσία θα εξακολουθεί να λειτουργεί μέσα στη σήραγγα.

Είναι επίσης αρκετά διαφανές ότι μπορείτε να παρέχετε σε πολλούς διαφορετικούς δρομολογητές διαδρομές από μία υπηρεσία - απλώς αντιγράψτε τις ρυθμίσεις για αυτούς αντιγράφοντας την ενότητα πρωτοκόλλου bgp αλλάζοντας τη διεύθυνση IP του γείτονα. Γι' αυτό το παράδειγμα δείχνει τις ρυθμίσεις για το peering έξω από τη σήραγγα ως τις πιο καθολικές. Δεν είναι δύσκολο να τα αφαιρέσετε στο τούνελ αλλάζοντας ανάλογα τις διευθύνσεις IP στις ρυθμίσεις.

Επεξεργασία μητρώου για την υπηρεσία δρομολόγησης

Τώρα χρειάζεται, στην πραγματικότητα, να δημιουργήσουμε λίστες με προθέματα και διευθύνσεις IP, οι οποίες αναφέρονται στο προηγούμενο βήμα στο πρωτόκολλο στατικό. Για να το κάνουμε αυτό, παίρνουμε το αρχείο μητρώου και φτιάχνουμε τα αρχεία που χρειαζόμαστε με το ακόλουθο σενάριο, που βρίσκεται στο /root/blacklist/makebgp

#!/bin/bash
cut -d";" -f1 /root/z-i/dump.csv| tr '|' 'n' |  tr -d ' ' > /root/blacklist/tmpaddr.txt
cat /root/blacklist/tmpaddr.txt | grep / | sed 's_.*_route & reject;_' > /etc/bird/pfxlist.txt
cat /root/blacklist/tmpaddr.txt | sort | uniq | grep -Eo "([0-9]{1,3}[.]){3}[0-9]{1,3}" | sed 's_.*_route &/32 reject;_' > /etc/bird/iplist.txt
/etc/init.d/bird reload
logger 'bgp list compiled'

Μην ξεχάσετε να το κάνετε εκτελέσιμο

chmod +x /root/blacklist/makebgp

Τώρα μπορείτε να το εκτελέσετε χειροκίνητα και να παρατηρήσετε την εμφάνιση των αρχείων στο /etc/bird.

Πιθανότατα, αυτή τη στιγμή το bird δεν λειτουργεί για εσάς, γιατί στο προηγούμενο στάδιο προτείνατε να αναζητήσει αρχεία που δεν υπήρχαν ακόμα. Επομένως, το εκκινούμε και ελέγχουμε ότι ξεκινά:

systemctl start bird
birdc show route

Η έξοδος της δεύτερης εντολής θα πρέπει να εμφανίζει περίπου 80 καταχωρήσεις (αυτή είναι αυτή τη στιγμή, και όταν τη ρυθμίσετε, όλα θα εξαρτηθούν από τον ζήλο του ILV στα δίκτυα αποκλεισμού) ως εξής:

54.160.0.0/12      unreachable [static_bgp 2018-04-19] * (200)

Ομάδα

birdc show protocol

θα εμφανίσει την κατάσταση των πρωτοκόλλων εντός της υπηρεσίας. Μέχρι να διαμορφώσετε τον δρομολογητή (δείτε την επόμενη παράγραφο), το πρωτόκολλο OurRouter θα βρίσκεται στην κατάσταση έναρξης (Σύνδεση ή Ενεργές φάσεις) και μετά από μια επιτυχημένη σύνδεση, θα μεταβεί σε κατάσταση ανόδου (φάση εγκατεστημένη). Για παράδειγμα, στο σύστημά μου, η έξοδος αυτής της εντολής μοιάζει με αυτό:

BIRD 1.6.3 ready.
name     proto    table    state  since       info
kernel1  Kernel   master   up     2018-04-19
device1  Device   master   up     2018-04-19
static_bgp Static   master   up     2018-04-19
direct1  Direct   master   up     2018-04-19
RXXXXXx1 BGP      master   up     13:10:22    Established
RXXXXXx2 BGP      master   up     2018-04-24  Established
RXXXXXx3 BGP      master   start  2018-04-22  Connect       Socket: Connection timed out
RXXXXXx4 BGP      master   up     2018-04-24  Established
RXXXXXx5 BGP      master   start  2018-04-24  Passive

Σύνδεση δρομολογητή

Όλοι πιθανότατα έχουν ήδη βαρεθεί να διαβάζουν αυτό το πόδι, αλλά πάρτε την καρδιά σας - το τέλος είναι κοντά. Επιπλέον, σε αυτήν την ενότητα δεν θα μπορώ να δώσω οδηγίες βήμα προς βήμα - θα είναι διαφορετικό για κάθε κατασκευαστή.

Ωστόσο, μπορώ να σας δείξω μερικά παραδείγματα. Η κύρια λογική είναι να αυξήσουμε το BGP peering και να επισυνάψουμε το nexthop σε όλα τα λαμβανόμενα προθέματα, δείχνοντας το τούνελ μας (αν χρειάζεται να εξάγετε κίνηση μέσω της διεπαφής p2p) ή τη διεύθυνση ip nexthop εάν η κίνηση πηγαίνει στο ethernet.

Για παράδειγμα, στο Mikrotik στο RouterOS, αυτό λύνεται ως εξής

/routing bgp instance set default as=64999 ignore-as-path-len=yes router-id=172.30.1.2
/routing bgp peer add in-filter=dynamic-in multihop=yes name=VPS remote-address=194.165.22.146 remote-as=64998 ttl=default
/routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1

και στο Cisco IOS - όπως αυτό

router bgp 64999
  neighbor 194.165.22.146 remote-as 64998
  neighbor 194.165.22.146 route-map BGP_NEXT_HOP in
  neighbor 194.165.22.146 ebgp-multihop 250
!
route-map BGP_NEXT_HOP permit 10
  set ip next-hop 172.30.1.1

Σε περίπτωση που το ίδιο τούνελ χρησιμοποιείται τόσο για peering BGP όσο και για μετάδοση χρήσιμης κίνησης, δεν είναι απαραίτητο να ρυθμίσετε το nexthop, θα ρυθμιστεί σωστά μέσω του πρωτοκόλλου. Αλλά αν το ρυθμίσετε χειροκίνητα, δεν θα γίνει χειρότερο.

Σε άλλες πλατφόρμες, θα πρέπει να καταλάβετε τη διαμόρφωση μόνοι σας, αλλά αν έχετε οποιεσδήποτε δυσκολίες, γράψτε στα σχόλια, θα προσπαθήσω να βοηθήσω.

Αφού η συνεδρία σας BGP έχει ανέβει, οι διαδρομές προς μεγάλα δίκτυα έχουν φτάσει και έχουν εγκατασταθεί στον πίνακα, η κυκλοφορία στις διευθύνσεις από αυτά έχει φύγει και η ευτυχία είναι κοντά, μπορείτε να επιστρέψετε στην υπηρεσία πουλιών και να προσπαθήσετε να αποσχολιάσετε την καταχώρηση εκεί που συνδέει το λίστα διευθύνσεων IP, εκτελέστε μετά από αυτό

systemctl reload bird

και δείτε πώς ο δρομολογητής σας μετέφερε αυτές τις 85 χιλιάδες διαδρομές. Ετοιμαστείτε να το απενεργοποιήσετε και σκεφτείτε τι να το κάνετε 🙂

Σε συνολικά

Καθαρά θεωρητικά, αφού εκτελέσετε τα παραπάνω βήματα, έχετε μια υπηρεσία που ανακατευθύνει αυτόματα την κυκλοφορία σε διευθύνσεις IP που έχουν απαγορευτεί στη Ρωσική Ομοσπονδία πέρα ​​από το σύστημα φιλτραρίσματος.

Μπορεί, φυσικά, να βελτιωθεί. Για παράδειγμα, είναι αρκετά εύκολο να συνοψίσετε μια λίστα με διευθύνσεις IP μέσω λύσεων perl ή python. Ένα απλό σενάριο perl που το κάνει αυτό με το Net::CIDR::Lite μετατρέπει 85 χιλιάδες προθέματα σε 60 (όχι χιλιάδες), αλλά φυσικά καλύπτει ένα πολύ μεγαλύτερο εύρος διευθύνσεων από αυτό που έχει αποκλειστεί.

Δεδομένου ότι η υπηρεσία λειτουργεί στο τρίτο επίπεδο του μοντέλου ISO / OSI, δεν θα σας εξοικονομήσει από τον αποκλεισμό ιστότοπου / σελίδας εάν δεν επιλυθεί στη διεύθυνση που έχει καταγραφεί στο μητρώο. Αλλά μαζί με το μητρώο από το github, έρχεται το αρχείο nxdomain.txt, το οποίο με μερικές πινελιές του σεναρίου μετατρέπεται εύκολα σε πηγή διευθύνσεων, για παράδειγμα, το πρόσθετο SwitchyOmega στο Chrome.

Θα πρέπει επίσης να αναφερθεί ότι η λύση απαιτεί πρόσθετη ευκρίνεια εάν δεν είστε απλώς χρήστης του Διαδικτύου, αλλά δημοσιεύετε και κάποιους πόρους από τον εαυτό σας (για παράδειγμα, ένας ιστότοπος ή ένας διακομιστής αλληλογραφίας εκτελείται σε αυτήν τη σύνδεση). Μέσω του δρομολογητή, πρέπει να δεσμεύσετε την εξερχόμενη κίνηση από αυτήν την υπηρεσία στη δημόσια διεύθυνσή σας, διαφορετικά θα χάσετε τη συνδεσιμότητα με τους πόρους που καλύπτονται από τη λίστα των προθεμάτων που λαμβάνει ο δρομολογητής.

Εάν έχετε οποιεσδήποτε ερωτήσεις - ρωτήστε, έτοιμοι να απαντήσετε.

UPD. Ευχαριστώ ναυσιπλοΐα и TerAnYu για επιλογές για το git για μείωση του όγκου λήψης.

UPD2. Συνάδελφοι, φαίνεται ότι έκανα λάθος που δεν πρόσθεσα στο άρθρο οδηγίες για τη ρύθμιση ενός τούνελ μεταξύ του VPS και του δρομολογητή. Πολλά ερωτήματα προκαλούνται από αυτό.
Σε κάθε περίπτωση, σημειώνω ξανά - υποτίθεται ότι πριν ξεκινήσετε τα βήματα σε αυτόν τον οδηγό, έχετε ήδη διαμορφώσει τη σήραγγα VPN προς την κατεύθυνση που χρειάζεστε και έχετε ελέγξει την απόδοσή της (για παράδειγμα, αναδίπλωση της κυκλοφορίας εκεί από προεπιλογή ή στατική). Εάν δεν έχετε ολοκληρώσει ακόμα αυτή τη φάση, δεν έχει νόημα να ακολουθήσετε τα βήματα από το άρθρο. Δεν έχω το δικό μου κείμενο για αυτό ακόμα, αλλά αν google google «Ρύθμιση διακομιστή OpenVPN» μαζί με το όνομα του λειτουργικού συστήματος που είναι εγκατεστημένο στο VPS και «Ρύθμιση πελάτη OpenVPN» με το όνομα του δρομολογητή σας, πιθανότατα εσείς θα βρείτε μια σειρά από άρθρα σχετικά με αυτό το θέμα, συμπεριλαμβανομένου του Habré.

UPD3. Αθυσίαστοι έγραψε έναν κώδικα που δημιουργεί το αρχείο που προκύπτει για το bird από το dump.csv με προαιρετική άθροιση διευθύνσεων IP. Επομένως, η ενότητα "Επεξεργασία μητρώου για την υπηρεσία δρομολόγησης" μπορεί να αντικατασταθεί με μια κλήση στο πρόγραμμά της. https://habr.com/post/354282/#comment_10782712

UPD4. Λίγη δουλειά στα λάθη (δεν συνέβαλαν στο κείμενο):
1) αντ' αυτού systemctl reload bird είναι λογικό να χρησιμοποιήσετε την εντολή birdc διαμόρφωση.
2) στο δρομολογητή Mikrotik, αντί να αλλάξει το επόμενο hop στην IP της δεύτερης πλευράς του τούνελ /routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop=172.30.1.1 είναι λογικό να προσδιορίσετε τη διαδρομή απευθείας στη διεπαφή της σήραγγας, χωρίς τη διεύθυνση /routing filter add action=accept chain=dynamic-in protocol=bgp comment="Set nexthop" set-in-nexthop-direct=<όνομα διεπαφής>

UPD5. Μια νέα υπηρεσία έφτασε https://antifilter.download, από όπου μπορείτε να πάρετε έτοιμες λίστες με διευθύνσεις IP. Ενημερώνεται κάθε μισή ώρα. Από την πλευρά του πελάτη, το μόνο που μένει είναι να πλαισιώσει τις καταχωρήσεις με την αντίστοιχη «διαδρομή ... απόρριψη».
Και αυτό μάλλον αρκεί για να μαλακώσω τη γιαγιά μου και να ενημερώσω το άρθρο.

UPD6. Μια αναθεωρημένη έκδοση του άρθρου για όσους δεν θέλουν να καταλάβουν, αλλά θέλουν να ξεκινήσουν - εδώ.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο