Bagaimana cara menonaktifkan IPv6-mapped IPv6?

17

Di kotak Linux saya, saya memiliki berbagai daemon yang dapat mengikat semua antarmuka yang mendukung IPv6 ::. Ketika mereka melakukannya, Linux mengirimkan permintaan IPv4 ke daemon yang dipetakan sebagai, misalnya ::ffff:198.51.100.37,.

Saya sebaliknya ingin koneksi IPv4 ditolak dan hanya koneksi IPv6 yang diterima ketika daemon mengikat ::. Untuk menerima koneksi IPv4, saya ingin daemon harus secara eksplisit mengikat 0.0.0.0(juga ::).

Dengan kata lain, saya ingin menjalankan layanan secara eksklusif pada IPv6, dan bukan pada IPv4.

Apakah ada cara untuk menyelesaikan ini?

Michael Hampton
sumber

Jawaban:

22

Ini dikendalikan oleh net.ipv6.bindv6onlysysctl. Tambahkan berikut ini ke /etc/sysctl.confdan jalankan sudo sysctl -puntuk melakukan perubahan.

net.ipv6.bindv6only=1

Aplikasi juga dapat secara eksplisit hanya mengikat ke alamat IPv6 alih-alih mengubah ini secara global, misalnya, nginx memiliki ipv6onlyopsi untuk listendirektif. Ini sesuai dengan IPV6_V6ONLYopsi untuk setsockopt().

Mgorven
sumber
Untungnya saya menemukan bahwa aplikasi (dalam hal ini, OpenSSH) sudah menetapkan IPV6_V6ONLY pada soket ketika saya atur ListenAddress ::jadi saya tidak perlu menggunakan sysctl (dan mengkonfigurasi ulang semua yang lain).
Michael Hampton