Menambahkan seluruh blok IPv6 / 64 ke antarmuka jaringan di debian

15

Saya mencoba menambahkan seluruh blok IPv6 (/ 64) ke antarmuka menggunakan

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

seperti dijelaskan di sini di server Debian saya, tetapi saya sepertinya kehilangan sesuatu.

Jika saya ping misalnya 2001:41d0:2:ad64::fesecara lokal semuanya berfungsi dengan baik, tetapi jika saya mencoba dari mesin jarak jauh tidak berfungsi. Saya kemudian mencoba menambahkan rute pada eth0:

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

Sekarang saya bahkan tidak bisa melakukan ping alamat contoh apa pun secara lokal!

Saya agak tersesat karena saya sepertinya kehilangan sesuatu tetapi saya tidak dapat menemukan jawabannya di sini.

Singkatnya: Saya ingin 2001:41d0:2:ad64::/64terikat dengan eth0 sehingga setiap IP yang berisi blok ini dapat dijangkau dari internet di mesin saya.

Saya harap seseorang di luar sana dapat menunjukkan saya dengan cara yang benar. Terima kasih sebelumnya.

The panduan yang disediakan oleh ISP memang membutuhkan saya untuk menambahkan setiap IPv6 ke antarmuka secara eksplisit. Saya ingin ini tersirat.

Konfigurasi yang berfungsi dengan explict binding address ip

/ 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

Solusi coba # 1

Saya mencoba mengaktifkan kembali rute lokal seperti yang disarankan @kasperd.

Konten dari saya / 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

Tabel perutean lokal:

# 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

Output dari traceroute(PC rumah lokal saya):

  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 di server:

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 di server:

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 output (saat melakukan ping dan tracerouting di server jauh):

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

tracert ke gateway:

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 ke gateway:

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

Jadi masih hanya berfungsi secara lokal (server) tetapi tidak dari jarak jauh (pc saya).

Hikaru-Shindo
sumber
Jadi, apakah Anda sudah mencoba traceroute dari mesin jarak jauh? Di mana jejaknya gagal?
Zoredache
Jika semua host berada di jaringan yang sama, Anda seharusnya tidak memiliki rute apa pun.
Spack
ip routePerintah kedua Anda memiliki salah ketik di alamat IPv6.
Michael Hampton
@ Paket Saya ingin eth0 untuk mendengarkan seluruh awalan ipv6 / 64 (lalu lintas masuk), @ michael-hampton diperbaiki, hanya saat mengetik pertanyaan ini, @Zoredache Gagal di ISP Gateway 2001:41d0:2:adff:ff:ff:ff:ffsetelah itu hanya akan kehabisan waktu.
Hikaru-Shindo
Dari penelitian yang saya lakukan di masa lalu, ini tidak mungkin. Alasan kerjanya secara lokal adalah karena tabel perutean Anda tahu ke mana harus merutekan paket. Jika Anda menambahkan awalan ini sebagai rute statis di router tepi Anda, maka Anda akan melihat klien LAN dapat terhubung.
Nathan C

Jawaban:

13

Saya membutuhkan sesuatu yang serupa di masa lalu. Saya menemukan bahwa ada tiga langkah yang diperlukan untuk membuatnya bekerja:

  • Anda perlu merutekan awalan ke host
  • Anda memerlukan rute lokal di tuan rumah
  • Aplikasi perlu mengatur opsi IP_FREEBINDatau IP_TRANSPARENTpada soket

Cara yang tepat untuk mendapatkan awalan yang dialihkan ke host melibatkan menghubungi penyedia Anda, jika mereka belum memberikannya kepada Anda. Mereka mungkin memiliki server DHCPv6, yang dapat mendelegasikan awalan kepada Anda, jika Anda hanya mengirim permintaan DHCPv6 yang tepat.

Jika awalan yang diarahkan secara nyata karena suatu alasan tidak mungkin Anda dapatkan, tetapi Anda memiliki akses untuk menggunakan alamat sebanyak yang Anda inginkan dari awalan tautan yang tersedia di salah satu antarmuka jaringan Anda, Anda dapat mengubah sebagian darinya menjadi awalan yang dialihkan dengan memiliki daemon menanggapi permintaan penemuan tetangga untuk setiap alamat IPv6 dalam rentang itu.

Menggunakan daemon semacam itu tidak disarankan selain sebagai upaya terakhir, karena daemon ini akan menghabiskan memori dari semua tetangga Anda. Ada beberapa implementasi daemon semacam itu, yang terlihat menjanjikan adalah ndppd . (Saya tidak punya pengalaman khusus dengannya, karena saya baru mempelajarinya setelah saya menulis sendiri dengan awalan tautan saya yang di-hardcode.)

Sepertinya Anda sudah membuat rute lokal berfungsi. Seperti yang Anda perhatikan, itu harus ditugaskan ke loantarmuka agar berfungsi.

Akhirnya aplikasi yang menggunakan alamat dari rentang ini memerlukan opsi IP agar dapat mengikat ke alamat, yang tidak secara eksplisit ditetapkan untuk antarmuka jaringan tertentu pada host. Berikut ini adalah fragmen kode, yang dapat digunakan:

const int one = 1;
setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));
kasperd
sumber
Saya mendapatkan awalan statis yang dialihkan ke server saya oleh ISP (mereka tidak menyediakan DHCP. Baik untuk IPv4 maupun IPv6). Saya ingin semua IPv6 di blok / 64 ini dapat dijangkau dari luar (sebagian besar aplikasi saya mengikat ke :: yang seharusnya semua alamat yang tersedia jika saya tidak salah). Sekarang saya ingin semua IP ini tersedia pada eth0 jadi jika saya mencoba untuk menyambungkan ke IPv6 apa pun di blok yang aplikasi apa pun yang mendengarkan port yang ditentukan akan dapat menjawab (misalnya setiap IP harus menanggapi ping dengan benar).
Hikaru-Shindo
Jika Anda mengikat :: opsi IP_TRANSPARENT tidak diperlukan. Dengan awalan dialihkan ke server saya dan rute lokal di tempat, saya dapat mengikat :: dan menerima koneksi yang dibuat ke alamat IPv6 sewenang-wenang dalam rentang itu. ping6 juga berfungsi. Saya sedang menguji ini di Ubuntu 12.04, tetapi saya berharap ini dapat bekerja pada kernel terbaru pada distribusi lain juga. Jika tidak bekerja untuk Anda, saya sarankan Anda melihat lalu lintas jaringan menggunakantcpdump -pni eth0 'host 2001:41d0:2:ad65::fe'
kasperd
Itu masih tidak berfungsi. Saya memberikan beberapa informasi lebih lanjut tentang konfigurasi dalam pertanyaan saya, mungkin ini membantu.
Hikaru-Shindo
Anda mengatakan bahwa Anda memiliki / 64 diarahkan ke server. Tetapi contoh dalam panduan penyedia hosting hanya memiliki awalan tautan dan tidak ada awalan yang dialihkan. Dan output tcpdump dan traceroute6 terlihat seperti alamat tidak dialihkan ke server. Apakah Anda berhasil mendapatkan satu alamat IPv6 yang berfungsi menggunakan dokumentasi dari penyedia?
kasperd
1
@Arya Ketika saya membutuhkan hal seperti itu, saya memasukkan perintah/etc/rc.local
kasperd
2

Sekarang tahun 2019. Satu kata: ip_nonlocal_bind (karena kernel 4.3 seperti yang saya ketahui).

Gunakan ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1, yang terakhir memungkinkan Anda untuk mengikat ke alamat IPv6 (tidak diperlukan IP_FREEBIND dalam hal ini).

Kira Anda melakukannya:

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 akan terlihat seperti:

route-ttl 30000

proxy eth0 {

   router no

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

jalankan ndppd dan sekarang Anda dapat mengikat ke alamat mana saja (dari blok yang ditambahkan) dan menggunakannya saat ditambahkan sendiri.

Alexander Gnatyna
sumber