Bypass ILV consequat cum DNSTap et BGP

Bypass ILV consequat cum DNSTap et BGP

Locus admodum fessus, scio. Exempli gratia, optimum est articulussed tantum IP pars obstructionis habetur. Addemus etiam dominia.

Ob hoc quod iudicia et RKN omnia laeva et dextra claudunt, et provisores quaerunt ne sub pecunia a Revizorro edita, damna associata interclusionis satis magnae sunt. In locis autem "legitimis" obstructis multae sunt utiles (salve, rutracker)

Extra iurisdictionem RKN habito, sed parentes, propinqui et amici in patria mea manent. Ita placuit ut homines procul ab IT viam facile ascenderent interclusionem praeterire, potius sine eorum participatione.

In hac nota praecipuas retis res gradatim non describemus, sed generalia principia describemus quomodo schema hoc perfici possit. Cognitio quomodo network in communi et in particulari Linux operata sit oportet.

Genera cincinnos

Primum memoriam de interclusis reficiamus.

Plures species capillorum in XML receptae ex RKN sunt:

  • IP
  • Домен
  • URL

Pro simplicitate ea ad duo redigamus: IP et dominium, et ab domicilio claudendo solum dominium eruemus (immo hoc nobis factum est).

Boni homines ex Roskomsvoboda implemented in admirabile APIper quam id quod opus est consequi possumus;

Aditus ad clausus situs

Ad hoc faciendum opus est aliqua parva externa VPS, praesertim cum infinito negotiationis - multum sunt pro 3-5 arietes. Emere debes in proximo foris ut ping non nimis altum sit, sed iterum meminerim Penitus et geographiam non semper congruere. Et cum nulla SLA pro 5 dollariis, melius est 2+ frusta ex diversis provisoribus culpae tolerantiae sumere.

Deinde, necesse est ut a cliente iter itineris encrypted cuniculum erigatur ad VPS. Wireguard utar ut quam celerrime et facillime configurare quod ... Cliens meus iter itineris etiam in Linux fundatur (APU2 aut aliquid OpenWRT). In quibusdam Mikrotik/Cisco, protocollis uti potes illis in promptu sicut OpenVPN et GRE-super-IPSEC.

Lepidium sativum et redirectionem negotiationis interest

Omnino interretialem commercium prohibere potes, ne foris proficiscaris. Sed, fere, velocitas locorum contentorum laborandi multum ab hoc laborabit. Plus, band requisita in VPS multo altior erit.

Ergo negotiatio aliquo modo secludere debebimus ut sites saeptum et selective iter in cuniculum. Etiamsi aliqua negotiatio "extra" ibi pervenit, multo melius est quam omnia per cuniculum pellere.

Ad negotiationem administrandam, BGP protocollo utemur et itinera commonebo ad retiacula necessaria a nostris VPS ad clientes. AVIS sumamus daemonem BGP, ut est una maxime utilitatis et commodissima.

IP

Omnia perspicua sunt cum IP interclusione: simpliciter nuntiamus omnia IPS ab VPS obsessa. Problema est circiter 600 milia subnetorum in indice ab API praescriptorum, et maior pars eorum sunt /32 exercituum. Hic numerus viarum infirma client iter itineris potest confundere.

Cum igitur album dispensando, placuit retiacula /24 perorare si 2 vel plures hostiae in eo sunt. Ita numerus itinerum ad C milia deminutus est. Hanc scriptionem sequentur.

Domains

Plures multiplex est et plures modi sunt. Exempli gratia, perlucidum Squid in unoquoque itinere clientis instituere potes et ibi HTTP intercludere et explorare in handshake TLS ut URL rogatum in casu primo et dominium a SNI in secundo obtineat.

Sed ex omnibus recentibus TLS1.3+eSNI, HTTPS analysis minuitur et minus realistica cotidie fit. Et infrastructura in parte clientis magis implicata fit - uti saltem OpenWRT habebis.

Quapropter viam responsionum intercipiendi DNS queries capere decrevi. Hic quoque omnia genera DNS-super-TLS/HTTPS super capita nostra volitare incipiunt, sed hanc partem in cliente (iam) regere possumus - vel inactivare vel proprio servo pro DoT/DoH uti.

Quomodo hijack DNS?

Possunt etiam hic esse plures aditus.

  • Intercipiens DNS negotiationis per PCAP vel NFLOG
    Utraeque hae modi interceptio in utilitate implentur sidmat. Sed non diu subnixum est et primitivum functionis est, ideo etiam ligamen pro eo scribere debes.
  • Vesci servo log analysis
    Infeliciter, recursores nescio quomodo responsa aperiunt, sed petitiones tantum. Principio, hoc logicum est, quia responsa dissimiles petitiones implicatae habent structuram et difficile est eas in forma textu scribere.
  • DNSTap
    Feliciter multi ex eis iam DNSTap ad hec adiuvant.

Quid est DNSTap?

Bypass ILV consequat cum DNSTap et BGP

Haec protocollo clientis est innixa Protocollo Buffers et Frame fluminum ut DNS structurae interrogationes et responsiones transferat a DNS ad exactorem ministrum. Essentialiter, DNS server transmittit petitionem et responsionem metadatam (typum nuntium, clientem/servatorem IP, etc.) plus plenum DNS nuntii in forma (binarii) in qua cum illis in retiacula operatur.

Refert intellegere quod in paradigma DNSTap, servo DNS clientis agit, et publicanus ut ministrator agit. Hoc est, DNS server coniungit decumanum, et non vice versa.

Hodie DNSTap sustentatur in omnibus servientibus popularibus DNS. Sed, exempli gratia, in multis distributionibus ligatis (sicut Ubuntu LTS) saepe aliqua de causa sine eius auxilio compilavit. Itaque reaedificando non pugnemus, sed recurrentem leviorem et velociorem sumamus - Unbound.

Quomodo capere DNSTap?

Sunt quidam numerus Utilitas CLI operandi cum fluxu rerum DNSTap sunt, sed ad problema solvendum apta non sunt. Itaque decrevi birotam meam fingere, quae omnia, quae necessaria sunt, faciam; dnstap-bgp

Opus algorithmus:

  • Cum emissus est, index dominiorum e fasciculo texto onerat, eas invertit (habr.com -> com.habr), lineas fractas, duplicatas et subdomains (i.e. si in indice habr.com et www.habr.com continet, excludit; oneratur solum primo) et aedificat praepositionem ligno ad inquisitionem vivam per hoc indicem
  • Agens pro servo DNSTap, nexum ex servo DNS exspectat. In principio, bases tam UNIX quam TCP sustinet, sed DNS servientes tantum scio unix basibus sustinere.
  • Ineuntes DNSTap fasciculi primum in structuram Protobufum deseriantur, deinde ipsum nuntium binarii DNS, in uno e Protobuf agrorum positum, ad gradum DNS RR relatum est.
  • Inhibetur utrum hospes rogatus (vel dominium parentis sui) sit in indice onusto, sin minus, responsio ignoratur
  • Solummodo A/AAAA/CNAME RRs eliguntur ex responsione et IPv4/IPv6 inscriptiones respondentes ab illis extrahuntur.
  • IP inscriptiones condiuntur cum configurabili TTL et proscriptae sunt omnibus pares BGP conformatus
  • Cum responsionem acceptam demonstrans iam IP conditivo, eius TTL updated est
  • Post TTL exspirat, introitus a cella removetur et e BGP nuntia

Additional functionality:

  • Re- legendi indices ditionum per SIGHUP
  • Sync cache cum aliis exemplis dnstap-bgp per HTTP/JSON
  • duplicans cache in disco (in BoltDB database) ad contenta sua post sileo
  • Subsidium mutandi ad alium spatium retis (cur hoc opus sit infra dicetur)
  • IPv6 support

constrictas:

  • IDN domains nondum sustentata
  • Pauci BGP occasus

collectas RPM et DEB * packages facilem institutionem. Omnes recentes OSes cum systemd relativo laborare debent, quia... nullas habent clientelas.

ratio

Ita, incipiamus omnes partes simul convenire. Quam ob rem topologiam retis huius modi aliquid accipere debemus:
Bypass ILV consequat cum DNSTap et BGP

Logica operis, ut opinor, ex icone perspicua est.

  • Cliens noster instar DNS conformatus habet, et DNS petitiones per VPN ire debent. Hoc necessarium est ut provisor DNS interceptis ad impedimentum uti non possit.
  • Cum client website aperit, petitionem DNS mittit sicut "quid IP habet xxx.org?"
  • solutus, xxx.org resolvit (vel e cella sumit) responsionem clienti mittit xxx.org talem et talem IP habet, simul duplicans per DNSTap.
  • dnstap-bgp iactetur hae inscriptiones in PRAEPES per BGP si domain in clausus album
  • PRAEPES ostentat iter ad IPS cum next-hop self clientis iter
  • Facis subsequentes ex cliente ad has IPS per cuniculum perveniunt

In calculonis, mensam separatam intra volucrem utor ad itinera ad situs clausus nec ullo modo cum OS secat.

Incommodum est in hoc schemate: primum SYN fasciculum ex cliente maxime probabile est tempus ire per provisorem domesticum, quia Iter statim nuntiatur. Hic possibilia sunt bene secundum quomodo provisor interclusio facit. Si tantum negotiatio guttae ceciderit, dubium non est. Et si eam ad aliquem DPI reducat, speciales effectus sunt possibilis.

Mirabilia etiam possibilia sunt cum clientibus non observatis DNS TTL, quae ad clientem ducere possunt monumentis nonnullis e putri suo cella e putridis cella petendi solvendi.

In praxi, nec prima nec secunda mihi problemata effecit, sed variari passagium tuum.

Servo Tuning

pro evolvit otia scripsi; munus pro Ansible. Configurare potest tam servientes quam clientes in Linux (pro distributionibus destructarum destinatis). Omnes occasus satis manifesti sunt et in inventory.yml. Hoc munus e magno fabularum libro abscissum est, ut errores contineat - petitiones viverra grata :)

Per principales partes eamus.

BGP

Cum duo BGP daemones in eandem exercitum currunt, quaestio fundamentalis oritur: AVIS non vult BGP perspiciens cum locali exercitu (vel cum aliquo interfaciente locali). A verbo absolute. Google ac lectionum electronicarum notas adiuverunt, id consilio factum esse affirmant. Sit aliquo modo, sed non inveni.

Alium BGP daemonem tentare potes, sed amo avem et ubique utor, plura creare nolo.

Propterea spatium spatii retis intra dnstap-bgp abscondi, quod per interfaciem veth coniungitur radici: similis est fistula, cuius fines in diversis spatiis haerent. In singulis his finibus adiungimus inscriptiones privatas p2p IP quae exercitum non excedunt, ut aliquid esse possint. Haec eadem est mechanismus , qua accessus processus interne adhibetur omnium ventus Docker et alia continentia.

quare scriptum est scriptum et iam supra dictum est, functionem quam capillorum ad aliud spatium traheret, dnstap-bgp appositum est. Propter hoc, necesse est ut radix currere vel binaria per praefectum cap_SYS_ADMIN datum.

Exemplum scriptor creandi spatio nominali

#!/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

dnstap-bgp.conf

namespace = "dtap"
domains = "/var/cache/rkn_domains.txt"
ttl = "168h"

[dnstap]
listen = "/tmp/dnstap.sock"
perm = "0666"

[bgp]
as = 65000
routerid = "192.168.149.2"

peers = [
    "192.168.149.1",
]

bird.conf

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";
...

DNS

Defalta, in Ubuntu, binarius solutus cum profile AppArmor coagmentatus est, quod vetat quominus cum basibus quibusvis DNSTap coniungatur. Hanc profile vel delere potes vel inactivare:

# cd /etc/apparmor.d/disable && ln -s ../usr.sbin.unbound .
# apparmor_parser -R /etc/apparmor.d/usr.sbin.unbound

Hoc verisimiliter additum est fabulae. Specimen esset, sane, figuram corrigere et iura necessaria edere, sed nimis piger eram.

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

Download et dispensando lists

Scriptor de downloading et dispensando indicem IP oratio
Instruit indicem, praepositionem compendiat pfx. Quod dont_add и dont_summarize potes indicare IPS et retiacula quae omittenda vel non perstringuntur. Hoc mihi opus est, quia... me VPS subnet erat in blocklist :)

Ridiculum est quod RosKomSvoboda API impedit petitiones cum agente Pythone defalta usoris. Similis illi got scriptor kiddy. Unde eam mutamus in Ognelis.

Nunc enim cum IPv4 tantum operatur, quia... IPv6 particula parva est, sed facile erit figere. Nisi etiam uti 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)

Update scriptor
Semel in die per coronam curro, forte pretium est semel singulis 4 horis currere, quia... Haec, opinor, renovationis tempus est quod RKN a provisoribus requirit. Plus, habent aliquas alias impedimenta super- urgentes quae citius adveniant.

An sequuntur;

  • Prima scripta decurrit et updates index viarum (rkn_routes.list) AVIS
  • Reload PRAEPES
  • Updates expurgat indicem ditionum pro dnstap-bgp
  • Reload 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

Scripta sunt sine magna cogitatione, ut si quid emendari videas, pete.

Clientem setup

Exempla hic pro iter itineris Linux dabo, sed in casu Mikrotik/Cisco etiam simplicius esse debet.

PRIMO ERIGI AVIS;

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;
}

Hoc modo componemus itinera ab BGP recepta cum nucleo mensa excitante numero CCXXII.

Post haec, satis est nucleum rogare ut hanc tabulam inspiciat priusquam in defalta videaris;

# 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

Hoc est, omne quod superest DHCP configurare in itinere ad distribuendum cuniculum IP inscriptionem servo DNS et schema paratum est.

defectuum oeconomicorum

Cum algorithmus hodiernus ad album ditionum generandum et dispensandum, inter alia includit; youtube.com et ejus CDNs.

Et hoc perducit quod omnia videos mittentur per VPN, quae totum canalem tardant. Poterit esse operae pretium componendum indicem ditionum popularium exceptionum quae RKN adhuc nimis debilis est ad impediendum. Et omittitur eis cum parsing.

conclusio,

Descriptus methodus permittit te praeterire fere omnem interclusionem quae nunc provisoribus efficiendi.

In principle, dnstap-bgp ad quodvis alios fines adhiberi potest ubi opus est certa administratione negotiationis secundum rationem domain nomen. Vos iustus considerare debes quod hodie mille situs in eadem IP inscriptione (post aliquot Cloudflare, exempli gratia) pendere potest, ut haec methodus paulo accuratius humilis habeat.

Sed necessitatibus interclusio haec abunde est.

Additiones, emendationes, gratae petitiones collige!

Source: www.habr.com

Add a comment