Debian'da bir ağ arabirimine tam bir IPv6 / 64 bloğu ekleme


15

Kullanarak bir arabirime bir bütün IPv6 (/ 64) blok eklemeyi denedim

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

gibi tarif burada benim Debian sunucu üzerinde, ama bir şey eksik görünüyor.

Örneğin 2001:41d0:2:ad64::feyerel olarak ping yaparsam her şey yolunda gider, ancak uzaktaki bir makineden denersem işe yaramaz. Daha sonra eth0'da rotayı eklemeyi denedim:

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

Şimdi yerel olarak herhangi bir örnek adrese ping bile yapamadım!

Bir şey eksik gibi göründüğüm için biraz kayboldum ama cevabı burada bulamıyorum.

Kısacası: 2001:41d0:2:ad64::/64Bu bloğun içerdiği her IP'nin makinemdeki internetten erişilebilmesi için eth0'a bağlı olmak istiyorum .

Umarım dışarıdaki biri bana doğru yolu gösterebilir. Şimdiden teşekkürler.

Kılavuz ISP tarafından sağlanan explictly arayüzüne her IPv6 eklemek için beni gerektirir. Bunun ima edilmesini istiyorum.

Explict IP adresi bağlama ile çalışma yapılandırması

/ Etc / network / interfaces:

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

Çözüm # 1'i deneyin

@Kasperd önerdiği gibi yerel rotayı yeniden etkinleştirmeyi denedim.

/ Etc / network / arayüzlerimin içeriği

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

Yerel yönlendirme tablosu:

# 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

Çıktı traceroute(benim yerel ev bilgisayarım):

  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 sunucuda:

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 sunucuda:

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 çıkış (uzak sunucuda ping ve tracerouting sırasında):

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

tracert ağ geçidine:

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 ağ geçidine:

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

Yani hala sadece yerel (sunucu) çalışıyor ama uzaktan (benim pc) değil.


Uzak bir makineden bir izlemeyi denediniz mi? İz nerede başarısız olur?
Zoredache

Tüm ana bilgisayarlar aynı ağdaysa, herhangi bir yolunuz olmamalıdır.
Spack

İkinci ip routekomutunuzda IPv6 adresinde bir yazım hatası var.
Michael Hampton

@ Paket eth0'ın bütün bir ipv6 / 64 önekini (gelen trafik) dinlemesini istiyorum, @ michael-hampton düzeltildi, sadece bu soruyu yazarken oldu, @Zoredache 2001:41d0:2:adff:ff:ff:ff:ffSadece zaman aşımı olacak ISPs Gateway'de başarısız oluyor .
Hikaru-Shindo

Geçmişte yaptığım araştırmalardan bu mümkün değil. Yerel olarak çalışmasının nedeni, yönlendirme tablonuzun paketleri nereye yönlendireceğini bilmesidir . Bu öneki kenar yönlendiricinize statik bir yol olarak eklediyseniz, LAN istemcilerinin bağlanabildiğini görürsünüz.
Nathan C

Yanıtlar:


13

Geçmişte benzer bir şeye ihtiyacım vardı. Bunu çalıştırmak için üç adımın gerekli olduğunu buldum:

  • Bir öneki ana bilgisayara yönlendirmeniz gerekir
  • Ana bilgisayarda yerel bir rotaya ihtiyacınız var
  • Uygulamaların soketlerde IP_FREEBINDveya IP_TRANSPARENTseçeneğini ayarlaması gerekir

Ana bilgisayara yönlendirilen bir önek almanın doğru yolu, size bir tane sağlamıyorsa sağlayıcınızla iletişim kurmayı içerir. Doğru DHCPv6 isteğini gönderirseniz, size bir önek atayabilen bir DHCPv6 sunucusu olabilir.

Gerçek bir yönlendirilmiş önek bir nedenden dolayı elde edilmek imkansızsa, ancak ağ arabirimlerinizden birinde bulunan bir bağlantı önekinden istediğiniz sayıda adres kullanma erişiminiz varsa, bunun bir kısmını yönlendirilmiş bir önek haline dönüştürebilirsiniz. bu aralıktaki her IPv6 adresi için komşu bulma isteklerine yanıt veren bir daemon olması.

Son çare dışında böyle bir arka plan programı kullanılması tavsiye edilmez, çünkü tüm komşularınızdan gereksiz yere bellek tüketecektir. Böyle bir daemonun birkaç uygulaması var, umut verici görünen bir ndppd . (Bununla ilgili özel bir deneyimim yok, çünkü sadece bağlantı önekim sabit kodlanmış olarak kendimi yazdıktan sonra öğrendim.)

Yerel rotayı zaten çalıştırmışsınız gibi görünüyor. Fark ettiğiniz gibi, loçalışabilmesi için arayüze atanması gerekir .

Son olarak, bu aralıktaki adresleri kullanan uygulamaların, ana bilgisayardaki belirli bir ağ arabirimine açıkça atanmamış adreslere bağlanabilmesi için bir IP seçeneğine ihtiyacı vardır. İşte kullanılabilecek bir kod parçası:

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

ISS tarafından sunucuma yönlendirilen statik bir önek var (DHCP sağlamazlar. IPv4 veya IPv6 için ne de yoktur). Bu / 64 bloğundaki tüm IPv6'ların dışarıdan ulaşılabilir olmasını istiyorum (uygulamalarımın çoğu bağlanır :: yanılmıyorsam tüm adresler olmalıdır). Şimdi tüm bu IP'lerin eth0'da mevcut olmasını istiyorum, bu yüzden bu blokta herhangi bir IPv6'ya bağlanmaya çalışırsam, belirtilen bağlantı noktasını dinleyen herhangi bir uygulama yanıtlayabilecektir (örneğin her IP, ping'e doğru yanıt vermelidir).
Hikaru-Shindo

:: adresine bağlanırsanız IP_TRANSPARENT seçeneğine gerek yoktur. Sunucuma ve yerel rotaya yönlendirilen bir önek ile ::'ye bağlanabilir ve bu aralıktaki isteğe bağlı IPv6 adreslerine yapılan bağlantıları alabilirim. ping6 da çalışır. Bunu Ubuntu 12.04'te test ediyorum, ancak diğer dağıtımlarda da herhangi bir çekirdek üzerinde çalışmasını bekliyorum. Sizin için çalışmıyorsa, kullanarak ağ trafiğine bir göz tcpdump -pni eth0 'host 2001:41d0:2:ad65::fe'
atmanızı öneririm

Hala çalışmıyor. Sorumdaki yapılandırma hakkında birkaç bilgi daha verdim, belki bu yardımcı olabilir.
Hikaru-Shindo

Sunucuya yönlendirilmiş / 64'ünüz olduğunu söylüyorsunuz. Ancak, barındırma sağlayıcısının kılavuzundaki örneklerde yalnızca bir bağlantı öneki vardır ve yönlendirilmiş önek yoktur. Ve tcpdump ve traceroute6 çıktısı adreslerin sunucuya yönlendirilmediğine benziyor. Sağlayıcının belgelerini kullanarak tek bir IPv6 adresi çalıştırmayı başardınız mı?
kasperd

1
@Arya Böyle bir şeye ihtiyacım olduğunda emir /etc/rc.local
verdim

3

2019 yılı. Bir kelime: ip_nonlocal_bind (bildiğim gibi 4.3 çekirdekten beri).

Ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1 kullanın, sonuncusu herhangi bir IPv6 adresine bağlanmanıza izin verir (bu durumda IP_FREEBIND gerekmez).

Sanırım bunu yaptın:

ip add add local 2001::41d0:2:ad64::/64 dev lo
ip route add local 2001::41d0:2:ad64::/64 dev eth0
sysctl  net.ipv6.ip_nonlocal_bind = 1

ndppd.conf şöyle görünecektir:

route-ttl 30000

proxy eth0 {

   router no

   timeout 500
   ttl 30000
   rule 2001::41d0:2:ad64::/64{
       static
   }
}

ndppd'yi çalıştırın ve şimdi herhangi bir adrese (eklenen bloğun) bağlanabilir ve kendisini eklediği gibi kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.