將整個 IPv6 /64 塊添加到 debian 上的網路介面
我嘗試使用將整個 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_FREEBIND
or選項IP_TRANSPARENT
將前綴路由到主機的正確方法是聯繫您的提供商,如果他們還沒有為您提供的話。他們可能有一個 DHCPv6 伺服器,如果您只是向它發送正確的 DHCPv6 請求,它可以向您委派一個前綴。
如果由於某種原因您無法獲得真正的路由前綴,但您可以從您的一個網路介面上可用的連結前綴訪問任意數量的地址,您可以通過以下方式將其中的一部分轉換為路由前綴讓守護程序響應該範圍內每個 IPv6 地址的鄰居發現請求。
不建議使用這樣的守護程序,除非作為最後的手段,因為它會不必要地消耗所有鄰居的記憶體。這種守護程序有一些實現,看起來很有希望的是ndppd。(我沒有具體的經驗,因為我是在用硬編碼的連結前綴編寫自己的程式碼後才知道的。)
看起來你已經讓本地路線工作了。正如您所注意到的,它必須分配給
lo
介面才能工作。最後,使用此範圍內地址的應用程序需要一個 IP 選項才能綁定到未明確分配給主機上特定網路介面的地址。這是一個可以使用的程式碼片段:
const int one = 1; setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));