Как мы все знаем, адрес IPv4 для localhost
is 127.0.0.1
(адрес обратной связи). Что такое IPv6 - адрес для localhost
и 0.0.0.0
как мне нужно , чтобы блокировать некоторые рекламные хосты.
Как мы все знаем, IPv4-адрес
localhost
- это127.0.0.1
(адрес обратной связи).
Фактически, любой IPv4-адрес 127.0.0.0/8
является адресом обратной связи.
В IPv6 прямым аналогом диапазона обратной петли является ::1/128
. Итак ::1
(полная форма 0:0:0:0:0:0:0:1
) - это единственный адрес обратной петли IPv6.
Хотя имя хоста localhost
обычно разрешается в 127.0.0.1
или ::1
, я видел случаи, когда кто-то привязывал его к IP-адресу, который не является адресом обратной связи. Это немного безумие ... но иногда люди так поступают.
Я говорю «это безумие», потому что этим вы можете нарушить предположения приложения; например, приложение может попытаться выполнить обратный поиск по петлевому IP-адресу и не получить ожидаемый результат. В худшем случае приложение может случайно отправить конфиденциальный трафик по незащищенной сети ... хотя вам, вероятно, придется совершить и другие ошибки, чтобы «добиться» этого.
Блокировка 0.0.0.0
не имеет смысла. В IPv4 он никогда не маршрутизируется. Эквивалент в IPv6 - это ::
адрес (полная форма 0:0:0:0:0:0:0:0
) ... который также никогда не маршрутизируется.
0.0.0.0
И ::
адреса зарезервированы для обозначения «любой адрес». Так, например, программа, предоставляющая веб-службу, может привязаться к 0.0.0.0
порту 80 для приема HTTP-соединений через любой из IPv4-адресов хоста. Эти адреса недействительны в качестве адреса источника или назначения для IP-пакета.
Наконец, в некоторых комментариях был задан вопрос по ::/128
сравнению с ::/0
против ::
.
В чем разница?
Строго говоря, первые два - это нотация CIDR, а не IPv6-адреса. Фактически они указывают диапазон IP-адресов. CIDR состоит из IP-адреса и дополнительного числа, определяющего количество бит в сетевой маске. Эти два вместе определяют диапазон адресов; т.е. набор адресов, образованный игнорированием битов, замаскированных из данного адреса.
Так:
::
означает только IPv6-адрес 0:0:0:0:0:0:0:0
::/128
означает 0:0:0:0:0:0:0:0
с сетевой маской, состоящей из 128 бит. Это дает диапазон сети с одним адресом в нем.::/0
означает 0:0:0:0:0:0:0:0
с маской сети, состоящей из 0 бит. Это дает диапазон сети с 2 128 адресами в нем .; т.е. это все адресное пространство IPv6!Для получения дополнительной информации прочитайте страницы Википедии об адресах IPv4 и IPv6 и нотации CIDR:
::1
- адрес обратной связи в IPv6.
В URL используйте квадратные скобки []
:
http://[::1]/
http://[::1]:80/
Заключение литерала IPv6 в квадратные скобки для использования в URL-адресах определено в RFC 2732 - Формат для буквальных адресов IPv6 в URL-адресах .
Локальный хост ipv6 - это ::1
. Неуказанный адрес ::
. Это определено в разделе 2.5 RFC 4291 .
Просто для полноты: существуют IPv6-адреса с отображением IPv4 , где вы можете встроить IPv4-адрес в IPv6-адрес (может не поддерживаться каждым оборудованием IPv6).
Пример: я запускаю сервер на своей машине, к которому можно получить доступ через http://127.0.0.1:19983/solr
. Если я обращаюсь к нему через IPv4-сопоставленный IPv6-адрес, я получаю к нему доступ через http://[::ffff:127.0.0.1]:19983/solr
(который будет преобразован в http://[::ffff:7f00:1]:19983/solr
)
Для использования в /etc/hosts
В качестве простого метода блокировки рекламы, приводящего к сбою разрешения домена, широко используется адрес 0.0.0.0, поскольку он вызывает немедленный сбой запроса, даже не пытаясь, поскольку это недопустимый или маршрутизируемый адрес. Это по сравнению с использованием 127.0.0.1 в этом месте, где он, по крайней мере, проверит, прослушивает ли ваш собственный компьютер запрошенный порт 80, прежде чем произойдет сбой с «отказом в соединении». Любой из этих адресов, используемых в файле hosts для домена, остановит попытки выполнения любых запросов по реальной сети, но 0.0.0.0 получил признание, потому что он более «оптимален» по вышеуказанной причине. «127» IP-адресов будут пытаться поразить ваш собственный компьютер, а любой другой IP-адрес вызовет отправку запроса на маршрутизатор, чтобы попытаться маршрутизировать его, но для 0.0.0.0 там '
При этом достаточно иметь любой IP-адрес, указанный в вашем файле hosts для блокируемого домена, и вам не нужно и не нужно также помещать адрес ipv6 в файл hosts, если - возможно - вы не включить ipv4. Хотя я был бы очень удивлен, если бы это было так. И тем не менее, я думаю, что наличие хоста в / etc / hosts с плохим адресом ipv4, когда у вас не включен ipv4, все равно даст вам результат, который вы ищете, а именно, чтобы он потерпел неудачу, вместо того, чтобы искать реальный DNS, скажем, adserver-example.com, и получить обратно IP v4 или v6.