У меня есть настройки с двумя сетевыми интерфейсами: eth0
и tap0
, соединенные br0
bridge name bridge id STP enabled interfaces
br0 8000.************ no eth0
tap0
Ни eth0
ни tap0
имеют IP-адреса, кроме локального IPv6-адреса eth0
:
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet6 fe80::XXXX:XXXX:XXXX:XXXX/64 scope link
valid_lft forever preferred_lft forever
41: tap0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc fq_codel master br0 state DOWN group default qlen 100
link/ether YY:YY:YY:YY:YY:YY brd ff:ff:ff:ff:ff:ff
Мост, однако, имеет статический адрес IPv4 и настроенный без сохранения состояния адрес IPv6. Поскольку мне нужно, чтобы этот IPv6-адрес без состояния был настроен, если бы он был для eth0
, я настроил MAC для tap0
чтобы он был больше, чем для eth0
(таким образом, brctl выберет eth0
MAC в качестве br0
MAC). В результате IP-адрес, который назначает себе br0
, тот же, что eth0
выбрал бы без каких-либо других интерфейсов.
Обратите внимание, что расширения конфиденциальности отключены (на all
а также на любых определенных интерфейсах).
Итак, br0
выглядит так:
42: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
inet 192.168.X.Y/24 brd 192.168.X.255 scope global br0
valid_lft forever preferred_lft forever
inet6 ZZZZ:ZZZZ:ZZZZ:ZZZZ:ZZZZ:ZZZZ:ZZZZ:ZZZZ/64 scope global
valid_lft 7123sec preferred_lft 3523sec
inet6 fe80::ZZZZ:ZZZZ:ZZZZ:ZZZZ/64 scope link
valid_lft forever preferred_lft forever
Таким образом, есть один публичный и один локальный IPv6-адрес, и публичный адрес совпадает с MAC (так как он выбирается без сохранения состояния). Когда я сейчас отправляю пакеты ICMPv6, я не получаю ответ:
PING google.com(2a00:1450:4001:80e::1008) 56 data bytes
^C
--- google.com ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms
Однако при проверке с помощью tcpdump я вижу отправленные пакеты и ответы, поступающие между сервером и моим IP-адресом, т.е. я фактически вижу ответ в дампе пакетов, и он адресован IPv6-адресу br0
. Я попытался указать каждый интерфейс с ping6 -I <interface>
без успеха.
Так что сейчас у меня нет идей: я отправляю пакеты, получаю ответ на правильный адрес, но система, похоже, отбрасывает его, а не принимает. Почему он отказывается от них? Это можно отладить?
Изменить: у меня есть маршруты IPv6, работает ip -6 route
:
XXXX:XXX:XXXX:XXXX::/64 dev br0 proto kernel metric 256 expires 6997sec
fe80::/64 dev br0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
default via fe80::XXX:XXXX:XXXX:XXXX dev br0 proto ra metric 1024 expires 1597sec
Первая строка - это мой префикс, назначенный интернет-провайдером, как сообщается в моем маршрутизаторе (Fritz Box), и это кажется правильным, поскольку это должна быть моя локальная сеть (я прав?), Поэтому мне не нужен шлюз. Два других - это локальные адреса ссылок, так что опять хорошо.
Последний маршрут - это то, что должно быть интересным, верно? IP, который я там нахожу, похоже, соответствует моему роутеру. Я могу пропинговать его, но только если указать интерфейс, то есть, запустив ping6 <ip>
получим:
connect: Invalid argument
Но ping6 -I br0 <ip>
работает:
PING <ip>(<ip>) from <myip> br0: 56 data bytes
64 bytes from <ip> icmp_seq=1 ttl=64 time=0.534 ms
64 bytes from <ip> icmp_seq=2 ttl=64 time=0.393 ms
64 bytes from <ip> icmp_seq=3 ttl=64 time=0.350 ms
64 bytes from <ip> icmp_seq=4 ttl=64 time=0.369 ms
^C
--- <ip> ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.350/0.411/0.534/0.075 ms
Конечно, <ip>
- это IP-адрес маршрутизатора, то есть адрес fe80::...
сверху. Я не могу найти точку в конфигурации моего маршрутизатора, где он говорит мне этот адрес, однако я нахожу его уникальный локальный адрес (ULA), и он начинается с fd80::
но кроме того, он идентичен, поэтому я довольно уверен, что это мои маршрутизаторы Адрес IPv6.
Однако: я могу посмотреть IP-адреса моих маршрутизаторов, используя nslookup -query=AAAA fritz.box
который выдает два ответа: ULA (fd00::...
) и IPv6-адрес, назначенный провайдером в префиксе (2a02:...
) с тем же суффиксом (я предполагаю, что он выбирает это, используя SLAAC с его MAC). Здесь не отображается IP-адрес, начинающийся с fe00:...
который вводится в маршрут.
Может быть, у кого-то есть объяснение этому странному поведению ...