Интерфейс wlan1 игнорирует IPv6 SLAAC (объявления маршрутизатора ICMPv6)
Я установил 15.04 на свой Thinkpad W520. Однако я не могу заставить работать IPv6 на интерфейсе wlan1:
ifconfig wlan1
wlan1 Link encap:Ethernet HWaddr 8c:70:5a:d2:65:bc
inet addr:10.0.1.61 Bcast:10.0.1.255 Mask:255.255.255.0
inet6 addr: fe80::8e70:5aff:fed2:65bc/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1534790 errors:0 dropped:0 overruns:0 frame:0
TX packets:1281764 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:618961336 (618.9 MB) TX bytes:249411071 (249.4 MB)
В Wireshark я могу видеть сообщения ICMPv6 RA:
No. Time Source Destination Protocol Length Info
3 775.989536000 fe80::bac7:5dff:fec8:50e ff02::1 ICMPv6 150 Router Advertisement from b8:c7:5d:c8:05:0e
Frame 3: 150 bytes on wire (1200 bits), 150 bytes captured (1200 bits) on interface 0
Ethernet II, Src: Apple_c8:05:0e (b8:c7:5d:c8:05:0e), Dst: IPv6mcast_01 (33:33:00:00:00:01)
Internet Protocol Version 6, Src: fe80::bac7:5dff:fec8:50e (fe80::bac7:5dff:fec8:50e), Dst: ff02::1 (ff02::1)
Internet Control Message Protocol v6
Type: Router Advertisement (134)
Code: 0
Checksum: 0x215a [correct]
Cur hop limit: 64
Flags: 0x48
Router lifetime (s): 1800
Reachable time (ms): 0
Retrans timer (ms): 0
ICMPv6 Option (Source link-layer address : b8:c7:5d:c8:05:0e)
ICMPv6 Option (Prefix information : 2601:xxxx:xxxx:47fc::/64)
ICMPv6 Option (Route Information : Medium 2601:xxxx:xxxx:47fc::/64)
ICMPv6 Option (Recursive DNS Server 2601:xxxx:xxxx:47fc:bac7:5dff:fec8:50e)
Sysctl accept_ra включен:
net.ipv6.conf.wlan1.accept_dad = 1
net.ipv6.conf.wlan1.accept_ra = 1
net.ipv6.conf.wlan1.accept_ra_defrtr = 0
net.ipv6.conf.wlan1.accept_ra_from_local = 0
net.ipv6.conf.wlan1.accept_ra_pinfo = 0
net.ipv6.conf.wlan1.accept_ra_rt_info_max_plen = 0
net.ipv6.conf.wlan1.accept_ra_rtr_pref = 0
net.ipv6.conf.wlan1.accept_redirects = 1
net.ipv6.conf.wlan1.accept_source_route = 0
net.ipv6.conf.wlan1.autoconf = 1
net.ipv6.conf.wlan1.dad_transmits = 1
net.ipv6.conf.wlan1.disable_ipv6 = 0
net.ipv6.conf.wlan1.force_mld_version = 0
net.ipv6.conf.wlan1.force_tllao = 0
net.ipv6.conf.wlan1.forwarding = 0
net.ipv6.conf.wlan1.hop_limit = 64
net.ipv6.conf.wlan1.max_addresses = 16
net.ipv6.conf.wlan1.max_desync_factor = 600
net.ipv6.conf.wlan1.mc_forwarding = 0
net.ipv6.conf.wlan1.mldv1_unsolicited_report_interval = 10000
net.ipv6.conf.wlan1.mldv2_unsolicited_report_interval = 1000
net.ipv6.conf.wlan1.mtu = 1500
net.ipv6.conf.wlan1.ndisc_notify = 0
net.ipv6.conf.wlan1.proxy_ndp = 0
net.ipv6.conf.wlan1.regen_max_retry = 3
net.ipv6.conf.wlan1.router_probe_interval = 60
net.ipv6.conf.wlan1.router_solicitation_delay = 1
net.ipv6.conf.wlan1.router_solicitation_interval = 4
net.ipv6.conf.wlan1.router_solicitations = 3
net.ipv6.conf.wlan1.suppress_frag_ndisc = 1
net.ipv6.conf.wlan1.temp_prefered_lft = 86400
net.ipv6.conf.wlan1.temp_valid_lft = 604800
net.ipv6.conf.wlan1.use_tempaddr = 2
net.ipv6.neigh.wlan1.anycast_delay = 100
net.ipv6.neigh.wlan1.app_solicit = 0
net.ipv6.neigh.wlan1.base_reachable_time_ms = 30000
net.ipv6.neigh.wlan1.delay_first_probe_time = 5
net.ipv6.neigh.wlan1.gc_stale_time = 60
net.ipv6.neigh.wlan1.locktime = 0
net.ipv6.neigh.wlan1.mcast_solicit = 3
net.ipv6.neigh.wlan1.proxy_delay = 80
net.ipv6.neigh.wlan1.proxy_qlen = 64
net.ipv6.neigh.wlan1.retrans_time_ms = 1000
net.ipv6.neigh.wlan1.ucast_solicit = 3
net.ipv6.neigh.wlan1.unres_qlen = 31
net.ipv6.neigh.wlan1.unres_qlen_bytes = 65536
Таблица маршрутизации IPv6:
$ route -6
Kernel IPv6 routing table
Destination Next Hop Flag Met Ref Use If
fe80::/64 :: U 256 0 0 wlan1
::/0 :: !n -1 1 11529 lo
::1/128 :: Un 0 7 32 lo
fe80::8e70:5aff:fed2:65bc/128 :: Un 0 1 0 lo
ff00::/8 :: U 256 1 0 wlan1
::/0 :: !n -1 1 11529 lo
Соседи IPv6:
$ ip -6 neigh
fe80::bac7:5dff:fec8:50e dev wlan1 lladdr b8:c7:5d:c8:05:0e router STALE
... и я могу проверить связь с локальным адресом моего жилого шлюза:
$ ping6 -I wlan1 fe80::bac7:5dff:fec8:50e
PING fe80::bac7:5dff:fec8:50e(fe80::bac7:5dff:fec8:50e) from fe80::8e70:5aff:fed2:65bc wlan1: 56 data bytes
64 bytes from fe80::bac7:5dff:fec8:50e: icmp_seq=2 ttl=64 time=277 ms
64 bytes from fe80::bac7:5dff:fec8:50e: icmp_seq=3 ttl=64 time=0.848 ms
64 bytes from fe80::bac7:5dff:fec8:50e: icmp_seq=4 ttl=64 time=13.4 ms
64 bytes from fe80::bac7:5dff:fec8:50e: icmp_seq=5 ttl=64 time=1.32 ms
64 bytes from fe80::bac7:5dff:fec8:50e: icmp_seq=6 ttl=64 time=0.934 ms
64 bytes from fe80::bac7:5dff:fec8:50e: icmp_seq=7 ttl=64 time=1.66 ms
^C
Есть идеи, что это может быть и как это исправить?
Благодарю.
1 ответ
Проблема в некоторых ваших настройках sysctl:
net.ipv6.conf.wlan1.accept_ra = 1
Это хорошо: принять рекламу маршрутизатора
net.ipv6.conf.wlan1.accept_ra_defrtr = 0
Но этот говорит вашей системе не принимать маршрут по умолчанию от RA. RA действительно объявляет маршрутизатор как шлюз по умолчанию. Если вы хотите, чтобы ваша система изучала это, вы должны установить это на 1
,
net.ipv6.conf.wlan1.accept_ra_pinfo = 0
Это говорит вашей системе не принимать префиксную информацию от RA. Он не сможет узнать, какие префиксы находятся на ссылке, и не сможет автоматически настроить его адреса из-за этого.
net.ipv6.conf.wlan1.accept_ra_rt_info_max_plen = 0
Ваш RA также содержит более конкретный маршрут для 2601:xxxx:xxxx:47fc::/64
, Этот параметр говорит ядру не принимать маршруты больше, чем /0
, Если вы хотите принять это /64
тогда вам нужно установить это значение как минимум 64
,
net.ipv6.conf.wlan1.autoconf = 1
Это хорошо. Тем не менее, вы не включили всю информацию о вашем сообщении RA. Это будет работать только в том случае, если для параметра информации о префиксе в RA установлен флаг Autoconf (A) и этот флаг не отображается в вашем вопросе.