Ipv6

將整個 IPv6 /64 塊添加到 debian 上的網路介面

  • August 16, 2019

我嘗試使用將整個 IPv6 (/64) 塊添加到介面

ip route add local 2001:41d0:2:ad64::/64 dev lo

就像在我的 Debian 伺服器上描述一樣,但我似乎遺漏了一些東西。

例如,如果我2001:41d0:2:ad64::fe在本地 ping 一切正常,但如果我從遠端機器上嘗試,它就不起作用。然後我嘗試在 eth0 上添加路由:

ip route add local 2001::41d0:2:ad64::/64 dev eth0

現在我什至無法在本地 ping 任何範例地址!

我有點迷茫,因為我似乎遺漏了一些東西,但我在這裡找不到答案。

簡而言之:我想2001:41d0:2:ad64::/64綁定到 eth0,這樣這個塊包含的每個 IP 都可以從我機器上的 Internet 訪問。

我希望有人能指出我正確的方法。提前致謝。

ISP 提供的指南確實要求我將每個 IPv6 顯式添加到介面中。我希望它是隱含的。

具有顯式 IP 地址綁定的工作配置

/etc/網路/介面:

auto eth0
iface eth0 inet static
       address my.ip.v4
       netmask 255.255.255.0
       network my.network.address.ip
       broadcast my.broadcast.address.ip
       gateway my.gateway.ip

iface eth0 inet6 static
       address 2001:41d0:2:ad64::fe
       netmask 64
       gateway 2001:41d0:2:adff:ff:ff:ff:ff
       up ip addr add 2001:41d0:2:ad64::1/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::1/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::2/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::2/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::3/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::3/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::4/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::4/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::5/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::5/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::6/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::6/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::7/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::7/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::8/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::8/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::9/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::9/64 dev eth0
       up ip addr add 2001:41d0:2:ad64::a/64 dev eth0
       down ip addr del 2001:41d0:2:ad64::a/64 dev eth0

解決方案嘗試#1

我嘗試按照@kasperd 的建議重新啟用本地路由。

我的 /etc/network/interfaces 的內容

auto lo
iface lo inet loopback
   post-up ip route add local 2001:41d0:2:ad64::/64 dev lo
   pre-down ip route del local 2001:41d0:2:ad64::/64 dev lo

auto eth0
iface eth0 inet static
       # <snip of ipv4 config>

iface eth0 inet6 static
       address 2001:41d0:2:ad64::fe
       netmask 64
       gateway 2001:41d0:2:adff:ff:ff:ff:ff

本地路由表:

# ip -6 route show table local
local ::1 dev lo  proto none  metric 0
local 2001:41d0:2:ad64::fe dev lo  proto none  metric 0
local 2001:41d0:2:ad64::/64 dev lo  metric 1024
local fe80::225:90ff:fe06:6bbe dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256

traceroute(我的本地家用電腦)的輸出:

 1    <1 ms    <1 ms    <1 ms  fritz.box [xxx]

 2    20 ms    21 ms    24 ms  2002:c058:6301::1
 3    21 ms    22 ms    24 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
 4    44 ms    31 ms    40 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
 5     *        *        *     Zeitüberschreitung der Anforderung.
 6     *        *       35 ms  ams-5-6k.nl.eu [2001:41d0::8d1]
 7    37 ms    39 ms    36 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
 8    37 ms    70 ms    36 ms  chi-3-4m.il.us [2001:41d0::176]
 9  Zielhost nicht erreichbar.

Ablaufverfolgung beendet.

traceroute6在伺服器上:

traceroute to 2001:41d0:2:ad64::23 (2001:41d0:2:ad64::23), 30 hops max, 80 byte packets
1  2001:41d0:2:ad64::a (2001:41d0:2:ad64::a)  0.028 ms  0.009 ms  0.008 ms

ping6在伺服器上:

PING 2001:41d0:2:ad64::23(2001:41d0:2:ad64::23) 56 data bytes
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=2 ttl=64 time=0.057 ms
^C
--- 2001:41d0:2:ad64:23 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.029/0.043/0.057/0.014 ms

tcpdump輸出(在遠端伺服器上 ping 和跟踪路由時):

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

tracert到網關:

Routenverfolgung zu vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff] über maximal 3
0 Abschnitte:

 1    <1 ms    <1 ms    <1 ms  fritz.box [2002:5476:1b4c:0:c225:6ff:fe40:b2b0]

 2    23 ms    22 ms    26 ms  2002:c058:6301::1
 3    24 ms    40 ms    23 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
 4    28 ms    37 ms    39 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
 5     *        *        *     Zeitüberschreitung der Anforderung.
 6    38 ms    33 ms     *     ams-5-6k.nl.eu [2001:41d0::8d1]
 7    36 ms    39 ms    38 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
 8    36 ms    35 ms    35 ms  vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff]

Ablaufverfolgung beendet.

ping到網關:

Ping wird ausgeführt für 2001:41d0:2:adff:ff:ff:ff:ff mit 32 Bytes Daten:
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=36ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=34ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=38ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=57ms

Ping-Statistik für 2001:41d0:2:adff:ff:ff:ff:ff:
   Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
   (0% Verlust),
Ca. Zeitangaben in Millisek.:
   Minimum = 34ms, Maximum = 57ms, Mittelwert = 41ms

所以它仍然只是在本地(伺服器)工作,而不是從遠端(我的電腦)工作。

我過去需要類似的東西。我發現完成這項工作需要三個步驟:

  • 您需要將前綴路由到主機
  • 您需要主機上的本地路由
  • 應用程序需要在套接字上設置IP_FREEBINDor選項IP_TRANSPARENT

將前綴路由到主機的正確方法是聯繫您的提供商,如果他們還沒有為您提供的話。他們可能有一個 DHCPv6 伺服器,如果您只是向它發送正確的 DHCPv6 請求,它可以向您委派一個前綴。

如果由於某種原因您無法獲得真正的路由前綴,但您可以從您的一個網路介面上可用的連結前綴訪問任意數量的地址,您可以通過以下方式將其中的一部分轉換為路由前綴讓守護程序響應該範圍內每個 IPv6 地址的鄰居發現請求。

不建議使用這樣的守護程序,除非作為最後的手段,因為它會不必要地消耗所有鄰居的記憶體。這種守護程序有一些實現,看起來很有希望的是ndppd。(我沒有具體的經驗,因為我是在用硬編碼的連結前綴編寫自己的程式碼後才知道的。)

看起來你已經讓本地路線工作了。正如您所注意到的,它必須分配給lo介面才能工作。

最後,使用此範圍內地址的應用程序需要一個 IP 選項才能綁定到未明確分配給主機上特定網路介面的地址。這是一個可以使用的程式碼片段:

const int one = 1;
setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));

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