Tukuna te aukati ILV me DNSTap me BGP

Tukuna te aukati ILV me DNSTap me BGP

Kua tino whiua te kaupapa, e mohio ana ahau. Hei tauira, he nui tuhinga, engari ko te wahi IP anake o te rarangi poraka ka whakaarohia ki reira. Ka tapiritia ano e matou nga rohe.

Na te mea ko nga kooti me te RKN te aukati i nga mea katoa ki te taha matau me te taha maui, a kei te whakapau kaha nga kaiwhakarato kia kaua e taka ki raro i nga whaina i tukuna e Revizorro, he tino nui nga mate e pa ana ki te aukati. A, i roto i nga waahi "i runga i te ture" kua aukatihia he maha nga mea whai hua (kia ora, rutracker)

Ka noho ahau ki waho o te mana whakahaere o te RKN, engari i noho oku matua, oku whanaunga me oku hoa ki te kainga. No reira i whakatauhia kia puta he huarahi ngawari mo nga tangata kei tawhiti atu i te IT ki te karo i te aukati, me kore rawa e whai waahi.

I roto i tenei tuhipoka, kaore au e whakaahua i nga mea whatunga matua i roto i nga waahanga, engari ka whakaahuahia e au nga maataapono whanui me pehea te whakatinanatanga o tenei kaupapa. Na ko te mohio ki te mahi a te whatunga i roto i te whanui me te Linux i roto i te waa me whai.

Nga momo raka

Tuatahi, me whakamaumahara tatou ki nga mea e aukatia ana.

He maha nga momo raka i roto i te XML i utaina mai i te RKN:

  • IP
  • Ingoa
  • URL

Mo te ngawari, ka whakaitihia e matou ki te rua: IP me te rohe, a ka tangohia noa e matou te rohe mai i te aukati i te URL (he tino tika, kua mahia e ratou tenei mo matou).

tangata pai mai Roskomsvoboda i mohio he mea whakamiharo API, ma reira e whiwhi ai tatou i nga mea e hiahiatia ana:

Te uru ki nga waahi aukati

Ki te mahi i tenei, me hiahia etahi VPS iti ke, he pai ki te hokohoko kore mutunga - he maha enei mo te 3-5 taara. Me tango e koe i roto i te tata ki waho kia kore e tino nui te ping, engari ano, kia mahara ko te Ipurangi me te matawhenua kaore i te rite tonu. A, i te mea kaore he SLA mo te 5 taara, he pai ake te tango i nga waahanga 2+ mai i nga kaiwhakarato rereke mo te aukati i te he.

I muri mai, me whakarite e matou he kohanga whakamuna mai i te pouara kiritaki ki te VPS. Ka whakamahia e ahau a Wireguard hei mea tere me te ngawari ki te whakarite. He pouara kiritaki ano kei runga i a Linux (APU2 tetahi mea ranei i OpenWRT). Mo etahi o Mikrotik / Cisco, ka taea e koe te whakamahi i nga tikanga e waatea ana ki a raatau penei i te OpenVPN me te GRE-over-IPSEC.

Te tautuhi me te anga whakamua o te hokohoko o nga paanga

Ka taea e koe te whakakore i nga hokohoko Ipurangi katoa ma nga whenua ke. Engari, ko te mea pea, ko te tere o te mahi me nga ihirangi o te rohe ka tino mamae mai i tenei. Ano, ko nga whakaritenga bandwidth i runga i te VPS ka nui ake.

No reira, me wehe kee tatou i nga waka ki nga waahi kua aukatihia, ka tohua ki te kauhanga. Ahakoa ka tae etahi o nga waka "atu" ki reira, he pai ake i te peia nga mea katoa i roto i te kauhanga.

Hei whakahaere i nga waka, ka whakamahia e matou te kawa BGP me te panui i nga huarahi ki nga whatunga e tika ana mai i a maatau VPS ki nga kaihoko. Me tango a BIRD tetahi o nga daemon BGP tino mahi me te watea.

IP

Ma te aukati i te IP, he maamaa nga mea katoa: ka panui noa matou i nga IP aukati katoa me te VPS. Ko te raruraru kei te 600 mano nga kupengaroto kei roto i te rarangi ka hoki mai te API, a ko te nuinga o ratou he /32 kaihautu. Ka taea e tenei maha o nga huarahi te whakapoauau i nga pouara kiritaki ngoikore.

Na reira, i te wa e tukatuka ana i te rarangi, i whakatauhia kia whakarapopotohia ki te whatunga / 24 mena he 2 neke atu ranei nga kaihautu. No reira, i whakaitihia te maha o nga huarahi ki ~100 mano. Ko te tuhinga mo tenei ka whai ake.

Nga Rohe

He uaua ake, he maha nga huarahi. Hei tauira, ka taea e koe te whakauru i te Squid marama ki runga i ia pouara kiritaki ka mahi i te wawaotanga HTTP ki reira ka titiro ki roto i te ruru ringa TLS kia whiwhi ai i te URL i tonoa i te keehi tuatahi me te rohe mai i te SNI i te tuarua.

Engari na nga momo TLS1.3 + eSNI hou, kei te iti haere te tātaritanga HTTPS i ia ra. Ae, kei te uaua haere nga hanganga o te taha kiritaki - me whakamahi koe i te OpenWRT iti rawa.

Na reira, i whakatau ahau ki te whai i te huarahi mo te haukoti i nga whakautu ki nga patai DNS. I konei ano hoki, ka timata nga DNS-over-TLS / HTTPS ki runga i to mahunga, engari ka taea e matou (mo tenei wa) te whakahaere i tenei waahanga i runga i te kiritaki - ka whakakorehia, ka whakamahi ranei i to ake tūmau mo DoT / DoH.

Me pehea te haukoti i te DNS?

I konei hoki, tera pea he maha nga huarahi.

  • Te haukoti i nga waka DNS ma PCAP, NFLOG ranei
    Ka whakatinanahia enei tikanga e rua mo te haukoti i roto i te whaipainga Sidmat. Engari kaore ano kia tautokona mo te wa roa, he tino maamaa te mahi, no reira me tuhi tonu koe i tetahi taputapu mo taua mea.
  • Te tātari i nga raarangi tūmau DNS
    Kia aroha mai, kaore e taea e nga recursors mohio ki ahau te takiuru whakautu, engari ko nga tono anake. I roto i te kaupapa, he arorau tenei, na te mea, kaore i rite ki nga tono, he hanganga uaua nga whakautu me te uaua ki te tuhi i roto i te tuhinga.
  • DNSTap
    Waimarie, he maha o ratou kei te tautoko i a DNSTap mo tenei kaupapa.

He aha te DNSTap?

Tukuna te aukati ILV me DNSTap me BGP

He kawa-kiritaki i runga i nga Kawa Buffers me te Frame Stream mo te whakawhiti mai i te tūmau DNS ki te kaikohi i nga uiuinga me nga whakautu DNS. Ko te mea nui, ka tukuna e te tūmau DNS te patai me te whakautu metadata (momo karere, kiritaki/tūmau IP, me etahi atu) me te whakaoti i nga karere DNS i roto i te puka (rua) e mahi tahi ana me ratou i runga i te whatunga.

He mea nui ki te mohio kei roto i te DNSTap paradigm, ka mahi te tūmau DNS hei kaihoko me te kaikohi hei tūmau. Arā, ko te tūmau DNS e hono ana ki te kaikohi, ehara i te mea rereke.

I tenei ra kei te tautokohia a DNSTap ki nga kaiwhakarato DNS rongonui katoa. Engari, hei tauira, ko te BIND i roto i nga tohatoha maha (penei i te Ubuntu LTS) ka hangaia mo etahi take kaore he tautoko. No reira kaua tatou e whakararuraru i te whakahiato, engari me mau ki te recursor mama me te tere - Unbound.

Me pehea te hopu DNSTap?

He etahi tau Ko nga taputapu CLI mo te mahi me te awa o nga huihuinga DNSTap, engari kaore e pai mo te whakatau i o maatau raru. Na reira, i whakatau ahau ki te hanga i taku ake pahikara hei mahi i nga mea katoa e tika ana: dnstap-bgp

Mahi algorithm:

  • Ina whakarewahia, ka utaina he rarangi o nga rohe mai i te konae tuhinga, ka huri (habr.com -> com.habr), ka aukati i nga raina pakaru, nga taarua me nga roheroto (ara, mena kei roto i te rarangi he habr.com me www.habr.com, ka utaina ko te mea tuatahi anake) ka hanga he rakau prefix mo te rapu tere i roto i tenei rarangi
  • Ko te mahi hei tūmau DNSTap, ka tatari mo te hononga mai i te tūmau DNS. Ko te tikanga, ka tautokohia e ia nga turanga UNIX me te TCP, engari ko nga kaiwhakarato DNS e mohio ana ahau ka taea anake te whakamahi i nga turanga UNIX.
  • Ko nga paatete DNSTap taumai ka whakakorehia i te tuatahi ki roto i te hanganga Protobuf, katahi ko te karere DNS takirua ano, kei roto i tetahi o nga mara Protobuf, ka poroa ki te taumata o nga rekoata DNS RR.
  • Ka tirohia mena kei roto te kaihautu i tonohia (ko tona rohe matua ranei) i te rarangi utaina, ki te kore, ka warewarehia te whakautu
  • Ko nga A/AAAA/CNAME RR anake ka tohua mai i te whakautu ka tangohia nga wahitau IPv4/IPv6 e rite ana mai i a raatau.
  • Ko nga wahitau IP kei te keteroki ki te TTL ka taea te whirihora me te panui ki nga hoa BGP katoa kua whirihora
  • Ina whiwhi urupare e tohu ana ki tetahi IP kua keteroki, ka whakahouhia tana TTL
  • Ka mutu te TTL, ka tangohia te urunga mai i te keteroki me nga panui BGP

Taumahinga taapiri:

  • Te panui ano i te rarangi o nga rohe na SIGHUP
  • Te pupuri i te keteroki ki te tukutahi me etahi atu waa dnstap-bgp mā HTTP/JSON
  • Tāritehia te keteroki i runga i te kōpae (i roto i te pātengi raraunga BoltDB) ki te whakaora i ona ihirangi i muri i te tiimatanga
  • Tautoko mo te huri ki tetahi mokowāingoa whatunga rereke (he aha te take i hiahiatia ai tenei ka whakaahuahia i raro nei)
  • Tautoko IPv6

Whakamutanga:

  • Kaore ano kia tautokona nga rohe IDN
  • He iti nga tautuhinga BGP

I kohia e ahau RPM me DEB mōkihi mō te tāutanga ngāwari. Me mahi i runga i nga OS hou katoa me te systemd. karekau he herenga.

Ko te kaupapa

Na, me timata taatau ki te whakakotahi i nga waahanga katoa. Ko te mutunga, me whiwhi tatou i tetahi mea penei i tenei topology whatunga:
Tukuna te aukati ILV me DNSTap me BGP

Ko te arorau o te mahi, ki taku whakaaro, he marama mai i te hoahoa:

  • Kua whirihorahia e te kiritaki to tatou tūmau hei DNS, me haere hoki nga patai DNS ki runga i te VPN. He mea tika tenei kia kore e taea e te kaiwhakarato te whakamahi i te aukati DNS ki te aukati.
  • I te whakatuwheratanga o te waahi, ka tukuna e te kiritaki he patai DNS penei "he aha nga IP o xxx.org"
  • here ka whakatau i te xxx.org (ka tangohia mai ranei i te keteroki) ka tukuna he whakautu ki te kaihoko "Kei a xxx.org te IP penei me te penei", ka kape whakarara ma te DNSTap
  • dnstap-bgp ka panui i enei wahitau i roto i HE WHAKAMAHI mā te BGP mena kei te rarangi aukati te rohe
  • HE WHAKAMAHI ka panui he ara ki enei IP me next-hop self pouara kiritaki
  • Ko nga paatete o muri mai i te kiritaki ki enei IP ka haere ma te kohanga

I runga i te tūmau, mo nga huarahi ki nga waahi aukati, ka whakamahi ahau i tetahi teepu motuhake i roto i te BIRD a kaore e whiti ki te OS ahakoa he aha.

He raru kei tenei kaupapa: ko te paatete SYN tuatahi mai i te kiritaki, tera pea ka whai wa ki te wehe atu ma te kaiwhakarato kaainga. kaore i te panuitia te huarahi. Na konei ka taea nga whiringa i runga i te huarahi e mahi ai te kaiwhakarato i te aukati. Mena ka whakaheke noa ia i nga waka, karekau he raru. A, ki te tukuna e ia ki etahi DPI, ka taea (te tikanga) nga paanga motuhake.

Kare pea nga kiritaki e whakaute i nga merekara DNS TTL, ka taea e te kiritaki te whakamahi i etahi o nga whakauru mai i tana keteroki pirau, kaua ki te patai ki a Unbound.

I roto i nga mahi, kaore te tuatahi, te tuarua ranei i raru ki ahau, engari ka rereke pea to maero.

Whakaritea Tūmau

Mo te ngawari o te huri, i tuhi ahau tūranga mo Ansible. Ka taea e ia te whirihora i nga kaitoro me nga kaihoko i runga i te Linux (i hangaia mo nga tohatoha-a-nama). Ko nga tautuhinga katoa he tino kitea, ka whakauruhia ki roto inventory.yml. Kua tapahia tenei mahi mai i taku pukapuka takaro nui, na reira kei roto he hapa - tono tono nau mai 🙂

Kia haere ma nga waahanga matua.

BGP

Ko te whakahaere i nga daemon BGP e rua i runga i te kaihautu kotahi he raru nui: Kaore a BIRD e hiahia ki te whakarite BGP peering me te localhost (tetahi atanga rohe ranei). Mai i te kupu katoa. Ko te rapu me te panui i nga rarangi mēra kaore i awhina, ka kii ratou na te hoahoa tenei. Tera pea he huarahi, engari kaore i kitea e au.

Ka taea e koe te whakamatau i tetahi atu BGP daemon, engari he pai ki ahau te BIRD ka whakamahia e au ki nga waahi katoa, kaore au e pai ki te whakaputa hinonga.

Na reira, i huna e ahau te dnstap-bgp ki roto i te mokowāingoa whatunga, e hono ana ki te pakiaka na roto i te atanga veth: he rite ki te paipa, ko nga pito e piri ana ki nga momo ingoa ingoa. I runga i ia pito, ka whakairihia e matou nga wahitau IP p2p motuhake e kore e neke atu i tua atu o te kaihautu, kia taea ai he aha. Ko te tikanga ano tenei mo te uru atu ki nga tukanga o roto arohaina e te katoa Docker me etahi atu ipu.

Mo konei i tuhia ai tuhinga me te mahi kua whakaahuatia ake nei mo te toia i a koe e nga makawe ki tetahi atu mokowāingoa i taapirihia ki dnstap-bgp. Na tenei, me whakahaere hei pakiaka, ka tukuna ranei ki te CAP_SYS_ADMIN rua ma te whakahau setcap.

He tauira tuhi mo te hanga mokowāingoa

#!/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",
]

manu.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

Ma te taunoa, i roto i te Ubuntu, ko te Unbound binary ka mauhia e te AppArmor profile, e aukati ana i te hono atu ki nga momo turanga DNSTap katoa. Ka taea e koe te muku i tenei kōtaha, te whakakore ranei:

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

Me taapiri tenei ki te pukapuka takaro. He pai, he tika, ki te whakatika i te whaarangi me te whakaputa i nga mana e tika ana, engari he mangere ahau.

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

Te tikiake me te tukatuka i nga rarangi

Hōtuhi mo te tango me te tukatuka i te rarangi o nga wahitau IP
Ka tangohia e ia te rarangi, ka whakarapopoto ki te prefix pfx. Ko te kaua_taapiri и kaua_whakapoto ka taea e koe te kii ki nga IP me nga whatunga kia pekehia, kaua ranei e whakarapopototia. I hiahiatia e au. ko te kupengaroto o taku VPS kei roto i te rarangi poraka 🙂

Ko te mea rorirori ko te RosKomSvoboda API poraka nga tono me te kaihoko kaiwhakamahi Python taunoa. Te ahua nei kua riro i te tuhinga-kiddy. Na reira, ka hurihia e matou ki a Ognelis.

I tenei wa, ka mahi noa me IPv4. he iti te wahanga o IPv6, engari ka ngawari te whakatika. Ki te kore koe e whakamahi manu6 hoki.

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)

Hōtuhi hei whakahou
Ka rere ahau i runga i te karauna kotahi i te ra, tera pea he pai ki te toia ia 4 haora. Ko tenei, ki taku whakaaro, ko te wa whakahou e hiahiatia ana e te RKN mai i nga kaiwhakarato. I tua atu, kei a raatau etahi atu aukati tino ohorere, tera pea ka tere ake.

Ka mahia e whai ake nei:

  • Ka whakahaere i te tuhinga tuatahi me te whakahou i te rarangi o nga huarahi (rkn_routes.list) mo te MANU
  • Utaina ano te MANU
  • Whakahou me te horoi i te rarangi o nga rohe mo dnstap-bgp
  • Utaina ano 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

I tuhia kaore he whakaaro nui, na mena ka kite koe i tetahi mea ka taea te whakapai ake - haere.

Tatūnga Kiritaki

I konei ka hoatu e ahau nga tauira mo nga pouara Linux, engari mo te Mikrotik / Cisco me ngawari ake.

Tuatahi, ka whakaturia e matou te BIRD:

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

No reira, ka tukutahia e matou nga huarahi kua riro mai i te BGP me te tepu ararere kernel nama 222.

I muri i tera, he nui noa ki te tono ki te kernel kia titiro ki tenei pereti i mua i te titiro ki te mea taunoa:

# 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

Ko nga mea katoa, ka noho tonu ki te whirihora i te DHCP i runga i te pouara ki te tohatoha i te wahitau IP kauhanga o te tūmau hei DNS, kua rite te kaupapa.

hapehape

Na te algorithm o naianei mo te whakaputa me te tukatuka i te rarangi o nga rohe, kei roto, me era atu mea, youtube.com me ona CDN.

Na tenei ka arahi ki te meka ka haere nga ataata katoa ma te VPN, ka taea te tarai i te hongere katoa. He pai pea te whakahiato i te rarangi o nga waahi rongonui-whakakore e aukati ana i te RKN mo tenei wa, he kikokore nga whekau. Ka pekehia i te wa e mahi ana.

mutunga

Ko te tikanga kua whakaahuatia ka taea e koe te karo tata ki nga aukati katoa e mahia ana e nga kaiwhakarato.

Ko te tikanga, dnstap-bgp ka taea te whakamahi mo tetahi atu kaupapa e hiahiatia ana etahi taumata o te whakahaere waka i runga i te ingoa rohe. Kia maumahara noa i to tatou wa, ka taea e te mano nga waahi te whakairi ki runga i te wahitau IP kotahi (i muri i etahi Cloudflare, hei tauira), na tenei tikanga he iti rawa te tika.

Engari mo nga hiahia o te whakawhiti i nga raka, he nui rawa tenei.

Tāpiritanga, whakatika, tono toia - nau mai!

Source: will.com

Tāpiri i te kōrero