Ipv6

一些 IPv6 主機將所有流量(即使在同一子網中)發送到路由器

  • January 22, 2016

我注意到我們 LAN 的 IPv6 路由問題。大多數客戶端 PC 都是 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 有時會顯示通過路由器的流量,有時會直接流向主機。似乎每次重新啟動都不同。路由表每次都完全相同,如果我啟用/禁用 dnsmasqoff-link選項也是如此。

Edit2:例如,IPv4 始終有一條路由表明,對於您自己的子網,它應該只通過 eth0 發送。因此,當我在 IPv6 中添加此路由時,流量不再通過路由器:

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

那麼,為什麼xxxx:1b0:5256:1337::/64預設不包括在內(在此處的任何機器上)?不應該存在一條告訴核心對於目前子網,只需通過乙太網(或 wlan,等等)發送出去的路由嗎?

Edit3:我剛剛查看了 tcpdump+wireshark,發現L路由器廣告中未設置標誌 On-Link,儘管未設置離線連結:

dhcp-range=xxxx:1b0:5256:1337::, ra-only, inifite

顯然,DNSMasq 沒有設置 on-link 是 2.63 中修復的錯誤,對於 Debian 7 來說太新了。無論如何都需要升級到 Debian 8,所以今天就這樣做。

編輯,升級完成。DNSmasq 配置行更改為:

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

現在添加了本地子網的路由。

  1. 為什麼有些主機得到一個地址而有些主機得到更多地址?我經常看到這種情況發生。

IPv6 主機始終獲得鏈路本地地址。其他地址取決於 RA 中的標誌和主機設置的組合。RA 可以向主機發出信號,表明 DHCPv6 伺服器可能會分發地址,主機可以根據這些地址進行操作。如果 RA 包含允許自動配置的前綴並且主機沒有禁用自動配置,則使用 SLAAC。

最初的規範說 interface-id(IPv6 地址的最後 64 位)是從鏈路層地址(通常是 MAC 地址)構造的。但這樣就可以通過網際網路跟踪設備。想像一下經常聯繫的服務 Google 或 Dropbox:無論您將筆記型電腦或手機連接到何種網路,子網都會發生變化,但 interface-id 將始終保持不變。因此,如今作業系統提供了隱私擴展。

隱私擴展使您的 interface-id 定期更改。確切的計時器取決於實現,但我們假設它每小時更改一次。您的設備每小時都會為自己配置一個新的 IPv6 地址。舊地址已被棄用,一旦您的軟體停止使用它們,它們就會被刪除。這樣你就可以得到多個地址。

另外:當 RA 包含多個設置了自動配置標誌的前綴時,您的設備將在每個前綴中配置地址。

2)為什麼這台機器選擇通過路由器路由所有流量?

這通常取決於 RA 前綴中的 On-Link 標誌。如果設置了 on-link 標誌,則設備可以創建/64到介面的路由。如果未設置該標誌,則設備無法知道前綴中的其他地址是否處於連結狀態,並將所有這些數據包發送到預設網關。

當然,您的設備始終可以選擇(有意或由於錯誤)忽略 on-link 標誌並將所有內容髮送到預設網關。

引用自:https://serverfault.com/questions/751020