Linux: blocca IPv6 per determinate applicazioni / nomi host


8

Problema e scopo

Non otteniamo IPv6 dal nostro ISP, quindi ho un tunnel IPv6 che funziona bene ma, ovviamente, non è molto veloce. E non proprio affidabile. Mi piace avere IPv6 disponibile "per ogni evenienza" ma voglio che determinati host (domini) siano connessi solo con IPv4.

Protocollo predefinito

Mi sembra che tutte le applicazioni provino prima IPv6; questa è probabilmente un'impostazione glibc. Starei bene se questo valore predefinito venisse invertito (per tutte le applicazioni).

netfilter

Sarebbe possibile bloccare indirizzi / reti IPv6 con Netfilter ma ci sono due problemi:

  1. Ciò provocherebbe un ritardo mentre l'app attende un timeout IPv6 prima di provare IPv4?
  2. Alcuni domini sembrano essere misti che sembrano caos. Separare google.com e youtube.com sembra qualcosa che non vuoi fare se puoi evitarlo.

Ho appena notato che la pagina man per ip routedice per il tipo di routing unreachable:

I mittenti locali ricevono un errore EHOSTUNREACH.

Lo stesso succede con DROP o REJECT di Netfilter? Un tale errore non dovrebbe causare un ritardo rilevante.

Filtro DNS

Un'altra soluzione (piuttosto semplice se ciò è possibile) sarebbe quella di filtrare i record AAAA per determinati domini. Se ciò non è (facilmente) possibile: è possibile collegare il server DNS e Netfilter in modo che io sappia che "l'indirizzo IP X appartiene al dominio Y" in modo da poterlo aggiungere a Netfilter? Qualcosa di più elegante che registrare tutto e accedere al registro?

La strada da percorrere?

Quali (altre) possibilità ci sono e qual è la più semplice?


2
Non noterai nulla con ciò che implementa Happy Eyeballs ( RFC 6555 ), come i moderni browser web.
Michael Hampton,

Il DNS non è progettato per funzionare in questo modo. In ogni caso, potresti provare un servizio tunnel più affidabile.
Michael Hampton,

Risposte:


16

È possibile controllare la selezione dell'indirizzo con /etc/gai.conf. Il file di configurazione è ben documentato e contiene già i valori predefiniti, quindi puoi iniziare a modificare.

Le impostazioni predefinite interessanti qui sono:

label  ::1/128       0
label  ::/0          1
label  2002::/16     2
label ::/96          3
label ::ffff:0:0/96  4
precedence  ::1/128       50
precedence  ::/0          40
precedence  2002::/16     30
precedence ::/96          20
precedence ::ffff:0:0/96  10

L'ultima riga offre la preferenza più bassa a tutti gli indirizzi IPv4.

Se si desidera dare una preferenza superiore a tutto IPv4, è possibile modificarlo in:

precedence ::ffff:0:0/96  100

Se si desidera solo dare una preferenza maggiore a specifici indirizzi IPv4 o blocchi, è possibile specificarli anche. Ricorda che devi usare un IPv6 mappato IPv4 in esadecimale.

Quindi, per dare la preferenza a 203.0.113.0/24 su tutto IPv6, dovresti aggiungere:

label ::ffff:cb00:7100/120 5
precedence ::ffff:cb00:7100/120 100

Riavvia le applicazioni in esecuzione per farle raccogliere le modifiche apportate.


Sui sistemi derivati ​​Debian, /etc/gai.confè già presente. Sui sistemi derivati ​​Red Hat, è assente, ma un file di esempio si trova in /usr/share/doc/glibc-common-*/gai.conf; basta copiarlo su /etc.


Non l'avevo mai sentito prima; ottimo suggerimento anche se non è una soluzione DNS.
Hauke ​​Laging,

Hai chiesto il metodo più semplice ... :)
Michael Hampton,

4

OK, ecco una risposta completamente diversa.

Inserisci gli host offensivi con connettività IPv6 scadente /etc/hostscon il loro indirizzo IPv4 corrispondente.

Per esempio:

199.7.53.74 whois.verisign-grs.com

Ricordati di rimuoverli quando migliora la loro (in questo caso) o la tua connettività IPv6.


1
Sarebbe facile per un singolo host con un singolo IP. Come ho già detto, si tratta di **. Youtube.com. Pertanto, molti nomi host sono interessati. In teoria questo sarebbe facile con DNS: "Blocca i record AAAA per tutto in .youtube.com". Il tuo approccio sarebbe quello di inserire tutti questi indirizzi (probabilmente non cambiano spesso né la loro struttura di dominio né i loro IP e sarebbe OK avere un controllo dello script che ogni giorno) /etc/hosts. Se nessuno esce con "Il software del server DNS XY può filtrare in questo modo !!" Probabilmente finirò con quello.
Hauke ​​Laging,

Conosco quasi tutti i pacchetti di server DNS noti e nessuno fa ciò che sembra desiderare, facilmente o per niente. Ora se vuoi scrivere il tuo codice personalizzato ... ma la vera soluzione ovviamente è migliorare la tua connettività IPv6. Prova un altro broker tunnel?
Michael Hampton,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.