jilir / wl500g

Automatically exported from code.google.com/p/wl500g
0 stars 0 forks source link

"fake message with non-255 Hop" - IPv6 + Win7 #155

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Поставил 1.9.2.7-d-r2174
Постоянно в логах вижу:
ICMP NDISC: fake message with non-255 Hop Limit received: 1
(это от измерителя загрузки канала, он 
специально хоп 1 ставит)
или:
ICMP NDISC: fake message with non-255 Hop Limit received: 64
(это кажется от IPv6 туннеля, там 64 стоит)

Пожалуйста, уберите эту диагностику и её 
обработку, никакие они не fake, нормальные ICMP.

Original issue reported on code.google.com by ache...@gmail.com on 1 Oct 2010 at 9:47

GoogleCodeExporter commented 9 years ago
Ваши программы нарушают RFC. Если вы не 
согласны, приведите ссылки на документы.

Original comment by lly.dev on 2 Oct 2010 at 6:17

GoogleCodeExporter commented 9 years ago
Хмм, да, RFC2461 везде требует 255.
Однако, это не мои программы, это Windows 7. Я 
полагаю, из-за пропуска таких NDISC IPv6 
начинает работать в Windows 7 только где-то 
минут через 5-10 после ребута (до этого нет 
адреса рутера).
Так что, с одной стороны, закрывать тикет.
С другой - у всех скоро будет Windows 7 и эта 
проблема.

Original comment by ache...@gmail.com on 2 Oct 2010 at 12:46

GoogleCodeExporter commented 9 years ago
Увы, IPv6 стек в ядрах 2.4 далёк от полноты, да и 
ip6 conntrack недоделан. Надо либо закрывать 
правилами ip6tables, либо разбираться, что с 
этим траффиком делать. Возможно, что-то 
необходимо сбекпортить из 2.6.

Например, см. 
http://tomatousb.org/forum/t-267570/need-xt-hl-support-in-k26-kernel-for-ipv6-fi
rewalling

HL для IPv6 в 2.4 есть, можно включить. 

Original comment by lly.dev on 2 Oct 2010 at 1:14

GoogleCodeExporter commented 9 years ago
измеритель загрузки крив.
на роутере включен ipv6 или нет?

Original comment by v...@orient-96.ru on 2 Oct 2010 at 1:22

GoogleCodeExporter commented 9 years ago
[deleted comment]
GoogleCodeExporter commented 9 years ago
>измеритель загрузки крив.
Не при чём измеритель загрузки, он IPv4, 
забудьте. Это я сначала с ICMPv4 попутал 
диагностику, а потом посмотрел в ядре, в 
каком она месте и по какому поводу.

>на роутере включен ipv6 или нет?
На рутере туннель в tunnelbroker. WinXP по IPv6 он 
подхватывает сразу, а вот Win7 через долгое 
ожидание.

Original comment by ache...@gmail.com on 2 Oct 2010 at 8:00

GoogleCodeExporter commented 9 years ago
пока не подтверждаю. в локалке 2 штуки win7, 
такой же тунель, все работает без лишних 
ошибок.

Original comment by v...@orient-96.ru on 2 Oct 2010 at 8:27

GoogleCodeExporter commented 9 years ago
Оно когда адрес рутера с трудом получит, 
минут через 5-10 после заргузки, тоже дальше 
без ошибок.
Можно в интерфейсе адаптера адрес рутера 
прописать, и тогда сразу без ошибок, но 
речь-то о том, что определение соседства 
работает криво и лог заполнен вот таким:
Oct  2 19:32:02 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 19:44:31 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 19:45:44 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 19:57:01 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 19:58:25 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 19:59:52 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 20:00:26 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 64
Oct  2 20:05:08 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 20:06:20 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 20:10:25 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 1
Oct  2 20:11:01 kernel: ICMP NDISC: fake message with non-255 Hop Limit 
received: 64
Это одна машина и рутер. Чтобы понять, кто 
кому и куда шлёт ICMPv6 эти, надо в рутере 
tcpdump'ом ковыряться, но очень лениво.

Original comment by ache...@gmail.com on 2 Oct 2010 at 8:38

GoogleCodeExporter commented 9 years ago
Кстати, это какая-то особенность именно Win7. 
Пробовал с FreeBSD - сразу подхватывает.

Original comment by ache...@gmail.com on 2 Oct 2010 at 8:41

GoogleCodeExporter commented 9 years ago
Кстати, 2.6 так-же дропает пакеты с hop-limit != 255, 
только молча. см. net/ipv6/ndisc.c

        if (ipv6_hdr(skb)->hop_limit != 255) {
                ND_PRINTK2(KERN_WARNING
                           "ICMPv6 NDISC: invalid hop-limit: %d\n",
                           ipv6_hdr(skb)->hop_limit);
                return 0;
        }

вполне возможно, что в каких-то случаях win7 
не хватает информации от radvd и нужно 
расширить radvd.conf. Например, 
http://www.kutukupret.com/2010/08/05/router-advertisement-daemon-radvd/

Но чтобы решить проблему заочно, без 
анализа tcpdump'ом, нужно знать IPv6 на все 200%... 
Кому то придётся быть первым ;-)

Original comment by lly.dev on 3 Oct 2010 at 7:13

GoogleCodeExporter commented 9 years ago
У меня есть подозрение, что этот экземпляр 
Win7 не умеет (или делает это некорректно) 
запрашивать radvd, а просто ждёт анонса. 
Попробуй поиграть с параметром MaxRtrAdvInterval в 
/etc/radvd.conf, а лучше настрой Win7.

Original comment by lly.dev on 3 Oct 2010 at 8:29

GoogleCodeExporter commented 9 years ago
Неприятный какой-то нестабильный эффект 
даже у меня - при некоторых перезагрузках 
бывает сразу подхватывает, а бывает ждёт, 
как я описал. Вот ещё такое в логах бывает:

Oct  3 17:23:58 radvd[110]: received RS or RA with invalid hoplimit 1 from 
fe80::<линк-адрес-карты-машины>

"MaxRtrAdvInterval 30;" лечит в любом случае. Вот 
такие баги и глюки в Вин7. Как обойти, 
понятно. Благодарю всех за помощь.

Original comment by ache...@gmail.com on 3 Oct 2010 at 2:23

GoogleCodeExporter commented 9 years ago
Понятно, некорректный запрос RS. В идеале, 
выяснить бы почему Win7 так поступает, но для 
этого нужен специалист по виндам.
Попробуй задать вопрос на http://www.sixxs.net

Original comment by lly.dev on 3 Oct 2010 at 3:13

GoogleCodeExporter commented 9 years ago
Мда, всё гораздо хуже, чем я ожидал - 
изначально был RFC2461 (hoplimit=255), его должен 
заменить RFC4861 http://www.faqs.org/rfcs/rfc4861.html также с 
hoplimit=255. Но где-то сбоку притулился RFC4286 с 
hoplimit = 1 !!!

Единственный вариант - спрашивать автора 
radvd или на sixxs.net

Original comment by lly.dev on 3 Oct 2010 at 4:08

GoogleCodeExporter commented 9 years ago
Так типы ж разные
rfc4286:
IGMP Type
0x30 Multicast Router Advertisement
0x31 Multicast Router Solicitation
0x32 Multicast Router Termination
ICMPv6 Type
151 Multicast Router Advertisement |
152 Multicast Router Solicitation  |
153 Multicast Router Termination

rfc4861 uses message types introduced in RFC 2461:
ICMPv6 Type
133 Router Solicitation
134 Router Advertisement
135 Neighbor Solicitation
136 Neighbor Advertisement
137 Redirect

Original comment by v...@orient-96.ru on 3 Oct 2010 at 5:02

GoogleCodeExporter commented 9 years ago
Хе, а вот на номера то я и не поглядел :( - ICMPv6 
и там и там, значит одинаково...

radvd обрабатывает 133, значит win7 неправа.

Original comment by lly.dev on 3 Oct 2010 at 5:09

GoogleCodeExporter commented 9 years ago
Запустил Netmon микрософтовский. Видно, что 
шлёт 133 и 135 как с хоп 1, так и с хоп 255. Причём, 
с хоп 1 только c fe80-линка, а с хоп 255 c адреса 
от туннелброкера.

Original comment by ache...@gmail.com on 3 Oct 2010 at 5:28

GoogleCodeExporter commented 9 years ago
Так туннель устанавливается не с роутера а 
с win7 ? А причём тогда роутер?

Original comment by lly.dev on 3 Oct 2010 at 5:39

GoogleCodeExporter commented 9 years ago
Туннель с рутера. Туннельброкер ещё даёт 
сетку/64, которую рутер раздаёт, или самому 
можно из неё присваивать.

Original comment by ache...@gmail.com on 3 Oct 2010 at 5:43

GoogleCodeExporter commented 9 years ago
Сетка эта для раздачи указывается в LAN IPv6 
Setting / Static IPv6 address / Netsize (bits of hostpart).
(не сказать, что это с очевидностью следует 
из названий полей)

Original comment by ache...@gmail.com on 3 Oct 2010 at 6:01

GoogleCodeExporter commented 9 years ago
Если адрес от tunnelbroker'а прописан вручную, то 
зачем ей(win7) Router solicitation(133)?? 135-й (NS) то 
понятно...

Original comment by lly.dev on 3 Oct 2010 at 6:12

GoogleCodeExporter commented 9 years ago
Если прописать вручную, это просто 
постоянный адрес адаптера, как alias, но она 
не знает, куда с него слать на физическом 
уровне, поэтому RS.
Я пробовал вначале и автоматом. Тогда 
просто адрес этот долго не появляется.

Original comment by ache...@gmail.com on 3 Oct 2010 at 6:18

GoogleCodeExporter commented 9 years ago
Разобрался. Это гадил файрвол PC Tools Firewall Plus 
(он типа "умеет" IPv6). И просто отключать его 
при тестах не помогало, помогло uninstall.

Original comment by ache...@gmail.com on 9 Oct 2010 at 10:42