Могу ли я добавить пользовательский адрес IPv6 на интерфейс обратной связи хоста A и выполнить ping с хоста B?
Я пытался добавить что-то вроде этого ::ffff:5:4:3:2
, однако ip -6 route
говорит, что это место назначения находится unreachable
на error 101
, но я могу пропинговать его с хоста A. Когда я устанавливаю этот адрес на tap0
, например, маршрут доступен, но по-прежнему «не пропингован» с хоста B. Я не могу понять, какие адреса допускает loopback, почему мой custom недоступен, почему я могу пропинговать его с хоста A, как включить route_localnet
и rp_filter
для IPv6.
ОС: ArchLinux, ядро 4.10.
Я знаю, как это сделать для IPv4, но IPv6 работает совершенно (или нет?) по-другому.
решение1
Да. Так же, как вы можете сделать это с IPv4, это называется маршрутизацией. Вы должны сообщить одному хосту, как достичь другого хоста.
Допустим, у нас есть два хоста: A и B.
У хоста A есть адрес обратной связи по умолчанию, ::1
а также ваш пользовательский адрес на интерфейсе обратной связи. (В моем примере пользовательский адрес будет fd56:dcaa:2099::1
. Я выбрал его из уникального локального адреса. Вам следуетиспользовать адреса ULAдля таких целей.)
У хоста A также есть интерфейс Ethernet, назовем его eth0
. В IPv6 он будет иметь локальный адрес IPv6-соединения. У него могут быть и другие адреса IPv6. Вы можете найти их, запустив ip -6 addr eth0
. Вот пример из моей системы:
$ ip -6 addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2601:404:ce00:adc0:9d6c:9e16:a9a9:b03b/64 scope global temporary dynamic
valid_lft 593594sec preferred_lft 74600sec
inet6 2601:404:ce00:adc0:bc87:129a:ed5d:814/64 scope global temporary deprecated dynamic
valid_lft 78769sec preferred_lft 0sec
inet6 2601:404:ce00:adc0:1453:3734:6742:4500/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 2591820sec preferred_lft 604620sec
inet6 fe80::5520:a68f:5416:a68c/64 scope link
valid_lft forever preferred_lft forever
В этом списке четыре разных адреса (у вас их может быть больше). Для наших целей вам нужен тот, после которого написано "scope link". В моей системе (и в моем примере) это fe80::5520:a68f:5416:a68c
.
На хосте B у нас также есть интерфейс eth0
. Чтобы хост B мог достичь специального адреса обратной связи хоста A, хост B должен знать, где его найти. Это можно сделать, добавив запись в таблицу маршрутизации хоста B:
# ip route add fd56:dcaa:2099::1 via fe80::5520:a68f:5416:a68c dev eth0
Мы сообщаем ядру хоста B, что он может достичь fd56:dcaa:2099::1
(специального адреса хоста A на его интерфейсе обратной связи) по адресу fe80::5520:a68f:5416:a68c
(локального адреса связи хоста A на его eth0
интерфейсе), но хост B должен попытаться достичь fe80::5520:a68f:5416:a68c
изхост B eth0
Интерфейс. (В этом и заключается сложность адресов локальной связи. Сам адрес имеет смысл только в контексте данного сегмента сети. Изучите сетевую модель OSI для получения более подробной информации.)
После того как эта запись будет внесена в таблицу маршрутизации хоста B, вы сможете выполнить ping-запрос на пользовательский адрес хоста A с хоста B, поскольку хост B теперь знает, что для достижения этого адреса нужно использовать локальный адрес связи хоста A в качестве маршрутизатора.
решение2
Поскольку обратные адреса и интерфейс предназначены для одного хоста. Не предназначены для связи с другим устройством.