Jak wszyscy wiemy, adres IPv4 dla localhost
is 127.0.0.1
(adres sprzężenia zwrotnego). Jaki jest adres IPv6 localhost
i do czego, 0.0.0.0
ponieważ muszę zablokować niektóre hosty reklam.
Jak wszyscy wiemy, adres IPv4 dla
localhost
is127.0.0.1
(adres sprzężenia zwrotnego).
W rzeczywistości każdy adres IPv4 w programie 127.0.0.0/8
jest adresem sprzężenia zwrotnego.
W IPv6 bezpośrednim odpowiednikiem zakresu pętli zwrotnej jest ::1/128
. Tak więc ::1
(długa forma 0:0:0:0:0:0:0:1
) jest jedynym adresem sprzężenia zwrotnego IPv6.
Chociaż nazwa hosta localhost
zwykle jest rozwiązywana na 127.0.0.1
lub ::1
, widziałem przypadki, w których ktoś powiązał ją z adresem IP, który nie jest adresem sprzężenia zwrotnego. To trochę szalone ... ale czasami ludzie to robią.
Mówię „to jest szalone”, ponieważ robiąc to, możesz złamać założenia aplikacji; np. aplikacja może podjąć próbę wyszukiwania wstecznego na adresie IP pętli zwrotnej i nie uzyskać oczekiwanego wyniku. W najgorszym przypadku aplikacja może przez przypadek wysłać wrażliwy ruch przez niezabezpieczoną sieć ... chociaż prawdopodobnie będziesz musiał popełnić również inne błędy, aby to „osiągnąć”.
Blokowanie 0.0.0.0
nie ma sensu. W IPv4 nigdy nie jest trasowany. Odpowiednikiem w IPv6 jest ::
adres (długa forma 0:0:0:0:0:0:0:0
) ... który również nigdy nie jest trasowany.
0.0.0.0
I ::
adresy są zarezerwowane oznacza „dowolny adres”. Na przykład program udostępniający usługę sieciową może łączyć się z 0.0.0.0
portem 80 w celu akceptowania połączeń HTTP za pośrednictwem dowolnego adresu IPv4 hosta. Te adresy nie są prawidłowe jako adresy źródłowe lub docelowe dla pakietu IP.
Wreszcie, niektóre komentarze pytali o ::/128
versus ::/0
versus ::
.
Jaka to różnica?
Ściśle mówiąc, pierwsze dwa to notacja CIDR, a nie adresy IPv6. W rzeczywistości określają zakres adresów IP. CIDR składa się z adresu IP i dodatkowej liczby, która określa liczbę bitów w masce sieci. Oba razem określają zakres adresów; tj. zestaw adresów utworzony przez ignorowanie zamaskowanych bitów z danego adresu.
Więc:
::
oznacza tylko adres IPv6 0:0:0:0:0:0:0:0
::/128
oznacza 0:0:0:0:0:0:0:0
z maską sieci składającą się z 128 bitów. Daje to zakres sieci zawierający dokładnie jeden adres.::/0
oznacza 0:0:0:0:0:0:0:0
z maską sieci składającą się z 0 bitów. Daje to zakres sieci z 2 128 adresami; tzn. jest to cała przestrzeń adresowa IPv6!Aby uzyskać więcej informacji, przeczytaj strony Wikipedii dotyczące adresów IPv4 i IPv6 oraz notacji CIDR:
::1
to adres sprzężenia zwrotnego w IPv6.
W adresie URL użyj nawiasów kwadratowych []
:
http://[::1]/
http://[::1]:80/
Umieszczanie literału IPv6 w nawiasach kwadratowych do użycia w adresie URL jest zdefiniowane w dokumencie RFC 2732 - Format literalnych adresów IPv6 w adresach URL .
Lokalny host ipv6 to ::1
. Nieokreślony adres to ::
. Jest to zdefiniowane w RFC 4291, sekcja 2.5 .
Gwoli ścisłości: istnieją adresy IPv6 odwzorowane na IPv4 , w których można osadzić adres IPv4 w adresie IPv6 (może nie być obsługiwany przez każdy sprzęt IPv6).
Przykład: Uruchamiam serwer na moim komputerze, do którego można uzyskać dostęp przez http://127.0.0.1:19983/solr
. Jeśli uzyskam do niego dostęp za pośrednictwem adresu IPv6 odwzorowanego na IPv4, uzyskam do niego dostęp przez http://[::ffff:127.0.0.1]:19983/solr
(który zostanie przekonwertowany na http://[::ffff:7f00:1]:19983/solr
)
Do użytku w /etc/hosts
jako prostą technikę blokowania reklam, która powoduje niepowodzenie rozwiązania domeny, adres 0.0.0.0 jest szeroko stosowany, ponieważ powoduje natychmiastowe niepowodzenie żądania, nawet bez próby, ponieważ nie jest to prawidłowy lub możliwy do routingu adres. Jest to w porównaniu z używaniem 127.0.0.1 w tym miejscu, gdzie przynajmniej sprawdzi, czy twój własny komputer nasłuchuje na żądanym porcie 80, zanim zakończy się niepowodzeniem z komunikatem „odmowa połączenia”. Każdy z tych adresów używany w pliku hosts dla domeny spowoduje zatrzymanie jakichkolwiek żądań przez rzeczywistą sieć, ale 0.0.0.0 zyskał przychylność, ponieważ jest bardziej „optymalny” z powyższego powodu. „127” adresów IP będzie próbowało trafić na Twój komputer, a każdy inny adres IP spowoduje wysłanie żądania do routera w celu skierowania go, ale w przypadku 0.0.0.0 tam ”
Biorąc to wszystko pod uwagę, posiadanie dowolnego adresu IP wymienionego w pliku hosts, aby domena była blokowana, jest wystarczające i nie potrzebujesz ani nie chcesz umieszczać adresu IPv6 w pliku hosts, chyba że - prawdopodobnie - nie mieć w ogóle włączone IPv4. Byłbym naprawdę zaskoczony, gdyby tak było. Mimo to myślę, że pojawienie się hosta w / etc / hosts ze złym adresem IPv4, gdy nie masz włączonego IPv4, nadal dałoby wynik, którego szukasz, który oznacza niepowodzenie, zamiast sprawdzania prawdziwy DNS, powiedzmy adserver-example.com i odzyskuje adres IP w wersji 4 lub 6.