Saya tidak sepenuhnya yakin bahwa solusi saya benar, tetapi setidaknya saya dapat menjelaskan lebih banyak tentang apa yang sedang terjadi.
Latar Belakang
Linux sebenarnya memiliki beberapa tabel perutean, dan tabel tersebut dicari satu per satu dalam urutan prioritas tertentu hingga tabel dengan rute yang cocok ditemukan. Secara opsional, Anda dapat mencari beberapa tabel perutean berdasarkan alamat sumber atau protokol; lihat ip-rule(8)
halaman manual.
Masalahnya adalah tabel perutean "lokal", yang memiliki prioritas 0, setinggi mungkin. Tabel "lokal" diisi secara otomatis oleh kernel dan menampung antarmuka "jelas" dan rute siaran. Untuk IPv6 di Linux, ini tampaknya mencakup seluruh blok multicast.
Masalahnya
Saya akan menggunakan iproute2 alat daripada route
yang lebih tradisional , karena itu akan menunjukkan kepada saya semua yang perlu saya ketahui.
Di kotak Linux saya:
$ ip -6 route show table local
local ::1 via :: dev lo proto none metric 0
local fe80::213:a9ff:fe91:5bcb via :: dev lo proto none metric 0
local fe80::250:b6ff:fe44:37d1 via :: dev lo proto none metric 0
ff00::/8 dev eth0 metric 256
ff00::/8 dev eth1 metric 256
$ ip -6 route show table main
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev eth1 proto kernel metric 256
ff15::/16 dev eth1 metric 1024
ff00::/8 dev eth1 metric 1024
$ ip -6 rule show
0: from all lookup local
32766: from all lookup main
... Dan paket multicast saya untuk ff15::1 (5==site-local,>link-local) berakhir di eth0, karena tabel perutean "lokal" cocok terlebih dahulu dan menimpa tabel "utama", meskipun tabel "utama" memiliki rute yang lebih spesifik. Perilaku penggantian ini benar dalam skema perutean kebijakan yang lebih besar, tetapi pilihan penambahan otomatis ff00::/8 ke tabel lokal patut dipertanyakan bagi saya.
Solusi Saya
Saya tidak memiliki cukup pengalaman untuk mengetahui apakah ini ide yang bagus, tetapi:
# ip -6 route add ff15::/16 dev eth1 table local
dan sekarang paket ff15::1 saya dialihkan melalui eth1.
Ini agak sesuai dengan semantik tabel lokal, karena dialihkan langsung melalui perangkat. Rasanya kurang pas (mengingat pengelolaan otomatis dan "Anda tidak perlu melihat tabel ini"), tetapi ini adalah solusi terbaik yang saya temukan.