Некоторые хосты IPv6 отправляют весь трафик, даже в той же подсети, на маршрутизатор

Я заметил проблему с маршрутизацией IPv6 в нашей локальной сети. Большинство клиентских компьютеров являются тонкими клиентами LTSP. Они получают один адрес через SLAAC. Tracepath6 к хостам в одной подсети показывает, что весь трафик является прямым. Но ноутбук, над которым я работаю (Linux Mint 17, стандартный сетевой менеджер), дает себе два IPv6-адреса и устанавливает маршруты, по которым весь трафик сначала идет к маршрутизатору, включая трафик в той же подсети. :

tracepath6 xxxx:1b0:5256:1337:10:50:0:8
 1?: [LOCALHOST]                        0.183ms pmtu 1500
 1:  xxxx:1b0:5256:1337:10:50:0:1                          1.217ms

Вопросы:

1) Почему некоторые хосты получают на один, а некоторые больше адресов? Я видел, как это происходит чаще.

2) Почему эта машина решает направлять весь трафик через маршрутизатор?

Маршрутизатор - dnsmasq, и на самом деле имеет только SLAAC:

Jan 22 11:34:36 gatekeeper dnsmasq-dhcp[9796]: IPv6 router advertisement enabled
Jan 22 11:34:36 gatekeeper dnsmasq-dhcp[9796]: DHCP, IP range 10.102.20.1 -- 10.102.20.254, lease time 12h
Jan 22 11:34:36 gatekeeper dnsmasq-dhcp[9796]: DHCP, IP range 10.101.20.1 -- 10.101.20.254, lease time 12h
Jan 22 11:34:36 gatekeeper dnsmasq-dhcp[9796]: DHCP, IP range 10.100.0.100 -- 10.100.0.254, lease time 12h
Jan 22 11:34:36 gatekeeper dnsmasq-dhcp[9796]: DHCP, IP range 10.50.20.1 -- 10.50.20.254, lease time 12h
Jan 22 11:34:36 gatekeeper dnsmasq-dhcp[9796]: SLAAC on xxxx:1b0:5256:1337:: prefix valid 2h

Это мой eth0:

eth0      Link encap:Ethernet  HWaddr 18:67:b0:34:2d:dd
          inet addr:10.50.20.158  Bcast:10.50.255.255  Mask:255.255.0.0
          inet6 addr: fe80::1a67:b0ff:fe34:2ddd/64 Scope:Link
          inet6 addr: xxxx:1b0:5256:1337:2532:eb1a:1151:d2f0/64 Scope:Global
          inet6 addr: xxxx:1b0:5256:1337:1a67:b0ff:fe34:2ddd/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12094 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17250 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2848542 (2.8 MB)  TX bytes:3002689 (3.0 MB)

Это маршруты IPv4:

> route -n 
Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.50.0.1       0.0.0.0         UG    0      0        0 eth0
10.50.0.0       0.0.0.0         255.255.0.0     U     1      0        0 eth0

Это маршруты IPv6:

Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
fe80::/64                      ::                         U    256 1     0 eth0
::/0                           fe80::213:3bff:fe0f:c02c   UG   1   0     0 eth0
::/0                           fe80::213:3bff:fe0f:c02c   UGDAe 1024 0     0 eth0
::/0                           ::                         !n   -1  1   261 lo
::1/128                        ::                         Un   0   3   243 lo
xxxx:1b0:5256:1337:1a67:b0ff:fe34:2ddd/128 ::                         Un   0   1     0 lo
xxxx:1b0:5256:1337:2532:eb1a:1151:d2f0/128 ::                         Un   0   1    86 lo
fe80::1a67:b0ff:fe34:2ddd/128  ::                         Un   0   1   178 lo
ff00::/8                       ::                         U    256 1     0 eth0
::/0                           ::                         !n   -1  1   261 lo

Следующая строка отсутствует на хосты, которые напрямую достигают других хостов:

::/0                           fe80::213:3bff:fe0f:c02c   UG   1   2     0 eth0

fe80 :: 213: 3bff: fe0f: c02c действительно является локальным адресом канала для маршрутизатора на стороне LAN.

Изменить: поведение, которое я наблюдал, могло быть случайным. Я несколько раз перезагружал один из тонких клиентов, и tracepath6 иногда показывает трафик, проходящий через маршрутизатор, иногда напрямую к хостам. Кажется, почти при каждой перезагрузке все по-другому. Таблица маршрутизации каждый раз остается точно такой же, даже если я включу / отключу параметр dnsmasq off-link .

Edit2: IPv4 всегда имеет маршрут, в котором указано, что для вашей собственной подсети он должен просто отправить, например, через eth0. Итак, когда я добавляю этот маршрут в IPv6, трафик больше не проходит через маршрутизатор:

/sbin/route -A inet6 add xxxx:1b0:5256:1337::/64 dev eth0

Итак, почему xxxx: 1b0: 5256: 1337 :: / 64 не включен по умолчанию (на любом компьютере Вот)? Разве не должен присутствовать маршрут, который сообщает ядру, что для текущей подсети просто отправляйте через Ethernet (или wlan, что угодно)?

Edit3: Я просто посмотрел с помощью tcpdump + wirehark и увидел, что флаг L , On-Link, не установлен в объявлении маршрутизатора, несмотря на то, что отключенное соединение не установлено:

dhcp-range=xxxx:1b0:5256:1337::, ra-only, inifite
1
задан 22 January 2016 в 15:52
2 ответа

По-видимому, DNSMasq, не устанавливающий связь, - это ошибка, исправленная в версии 2.63, слишком новая для Debian 7. В любом случае необходимо обновить до Debian 8, так что сделаем это сегодня.

Редактировать, обновление завершено. Строка конфигурации DNSmasq была изменена на:

dhcp-range=::,ra-only,constructor:eth1,infinite

Теперь добавлен маршрут для локальной подсети.

2
ответ дан 3 December 2019 в 17:37

1) Почему некоторые хосты получают на один, а некоторые больше адресов? Я видел это случается чаще.

Хосты IPv6 всегда получают локальный адрес канала. Остальные адреса зависят от комбинации флагов в RA и настроек хоста. RA может сигнализировать хосту, что сервер DHCPv6 может выдавать адреса, по которым хост может действовать. Если RA содержит префиксы, разрешающие автоконфигурацию, и хост не отключил автоконфигурацию, то используется SLAAC.

В исходных спецификациях говорилось, что идентификатор интерфейса (последние 64 бита IPv6-адреса)создаются из адреса канального уровня (обычно MAC-адреса). Но тогда можно было бы отслеживать устройства в Интернете. Представьте себе службу Google или Dropbox, к которой часто обращаются: к какой бы сети вы ни подключили свой ноутбук или мобильный телефон, подсеть изменится, но идентификатор интерфейса всегда будет одним и тем же. Поэтому в наши дни операционные системы предоставляют расширения конфиденциальности.

Расширения конфиденциальности регулярно меняют идентификатор интерфейса. Точные таймеры зависят от реализации, но предположим, что они меняются каждый час. Каждый час ваше устройство настраивает для себя новый IPv6-адрес. Старые адреса устарели, и, как только ваше программное обеспечение перестанет их использовать, они будут удалены. Таким образом, вы можете получить несколько адресов.

Также: когда RA содержит несколько префиксов с установленным флагом автоконфигурации, ваше устройство настроит адреса для каждого из них.

2) Почему этот компьютер выбирает маршрутизацию всех трафик через маршрутизатор?

Это обычно зависит от флага On-Link в префиксах в RA. Если установлен флаг подключения, устройство может создать маршрут для / 64 к интерфейсу. Если флаг не установлен, то устройство не может знать, являются ли другие адреса в префиксе подключенными, и оно отправляет все эти пакеты на шлюз по умолчанию.

Конечно, ваше устройство всегда может выбрать (намеренно или из-за ошибка), чтобы игнорировать флаг включения и в любом случае отправлять все на шлюз по умолчанию.

2
ответ дан 3 December 2019 в 17:37

Теги

Похожие вопросы