Bagaimana cara menonaktifkan konfigurasi otomatis pada IPv6 di Linux?

22

Bagaimana saya bisa menonaktifkan konfigurasi otomatis IPv6 di Linux secara permanen? Ketika saya mencoba menghapus alamat dari antarmuka secara manual dengan:

ip -6 addr del 2001:0db8:85a3:0000:0000:8a2e:0370:7334/64 dev eth1

Ini akan muncul kembali beberapa detik kemudian, saya ingin itu hilang secara permanen, tetapi tanpa menonaktifkan IPv6 bersama-sama.

Grumbel
sumber

Jawaban:

21

Konfigurasi otomatis dapat dinonaktifkan sementara untuk eth1 dengan:

sudo sysctl -w net.ipv6.conf.eth1.autoconf=0
sudo sysctl -w net.ipv6.conf.eth1.accept_ra=0

atau untuk semua antarmuka dengan:

sudo sysctl -w net.ipv6.conf.all.autoconf=0
sudo sysctl -w net.ipv6.conf.all.accept_ra=0

Pengaktifan kembali berfungsi dengan menggunakan 1 alih-alih 0 dalam panggilan.

Menonaktifkannya secara permanen dapat dilakukan dengan entri ke /etc/sysctl.conf. Pada Debian Etch (mungkin pada yang lebih baru juga), tanpa pengaturan accept_ra, sistem akan melakukan konfigurasi otomatis menggunakan alamat lokal Tautan ( fe80..)

Seperti Gart disebutkan di bawah ini, konfigurasi alamat otomatis dan penemuan router akan dinonaktifkan jika tuan rumah itu sendiri adalah router dan accept_ratidak 2, yaitu

net.ipv6.conf.<iface|all|default>.forwarding=1

dan

net.ipv6.conf.<iface|all|default>.accept_ra=0 atau net.ipv6.conf.<iface|all|default>.accept_ra=1.

di mana ifaceantarmuka Anda

Grumbel
sumber
3
Juga, konfigurasi alamat otomatis dan penemuan router akan dinonaktifkan jika host itu sendiri adalah router, yaitu net.ipv6.conf.all.forwarding=1diatur.
Gart
4

net.ipv6.conf.all.accept_ra = 0 di atas tidak boleh dilakukan, karena RA diperlukan untuk indikasi on-link dan off-link untuk awalan (sesuai RFC5942), serta konfigurasi otomatis sejumlah lainnya. parameter, seperti MTU, batas waktu Neighbor Discovery dll.

Jika Anda ingin menonaktifkan konfigurasi otomatis, matikan sysctl autoconf seperti di atas, atau matikan A (bit konfigurasi otomatis) di Opsi Informasi Awalan (PIO) di RA.

Tanda
sumber
3
sudo sysctl -w net.ipv6.conf.all.autoconf=0

Ini tidak berhasil untuk saya di Debian Wheezy. Setelah memeriksa /etc/sysctl.conf saya perlu menggunakan

sudo sysctl -w net.ipv6.conf.default.autoconf=0
Nick B.
sumber
3

The sysctlsolusi tidak bekerja untuk kita pada Ubuntu 18.04 Bionic. Kami menyelesaikannya dengan:

Mengedit /etc/netplan/01-netcfg.yaml, konfigurasikan:

network:
  ...
  ethernets:
    eth0:
      ...
      dhcp6: no
      accept-ra: no

Anda mungkin perlu menggunakan nama antarmuka bukan eth0. Setelah Anda menyimpan file, jalankan:

netplan apply atau reboot

Jika Anda telah menerima IP IPv6 dari konfigurasi otomatis dan Anda ingin menghapusnya tanpa me-reboot, Anda dapat menjalankan:

ip -6 addr del 1111:2222:1:0:aaaa:bbbb:cccc:dddd/64 dev eth0 

Tentu saja Anda perlu mengganti IP dan perangkat dalam perintah ini.

Jeroen Vermeulen - MageHost
sumber
ini baru saja membuat hari saya menggaruk-garuk kepala saya selama beberapa bulan: D
anthonysomerset
2
Saya biasanya hanya menggaruk Google sampai saya menemukannya.
Jeroen Vermeulen - MageHost
1
Ini bekerja ketika saya mencobanya, tetapi masalahnya adalah mematikan accept-ra cukup berbahaya, seperti yang disebutkan oleh Mark S - tampaknya berfungsi tetapi kemudian Anda mungkin menemukan paket Anda hilang karena mereka mengenai titik fragmentasi atau router failover. digunakan. Juga merusak ping. Alasan saya mencoba melakukan ini adalah untuk mencocokkan catatan SPF saya dengan surat keluar, tetapi kemudian saya menyadari bahwa saya seharusnya menggunakan netmask dalam catatan sebagai gantinya karena dalam IPv6 berbagai alamat secara efektif dimiliki oleh mesin, bukan satu alamat. .
Phil McKerracher
2

Masalah dengan Ubuntu 18 dan ipv6 adalah bahwa systemd-networkd mengontrol parameter kernel, jadi meskipun seseorang mungkin menonaktifkan ipv6 dengan sysctl, networkd akan lebih dari senang untuk mengaktifkannya untuk Anda, jika konfigurasi tidak menyatakan sebaliknya.

Solusi saya untuk menonaktifkan ipv6 adalah mengkonfigurasi tautan-lokal di netplan ke skalar kosong (asalkan Anda tidak memiliki IP tautan-lokal ipv4)

network:
     version: 2
     renderer: networkd
     ethernets:
     eth0:
        ..
        link-local: [ ]

Konfigurasi akan mengkompilasi konfigurasi untuk networkd yang akan diposting di /run/systemd/network/10-netplan-eth0.network dan itu akan meyakinkan networkd untuk tidak memasang ipv6 untuk eth0

Jika Anda mungkin ingin menonaktifkan ipv6 juga di loopback, itu mudah dicapai dengan mengatur parameter kernel net.ipv6.conf.all.disable_ipv6 ke 1. networkd tampaknya tidak mengontrol loopback.

sysctl -w net.ipv6.conf.all.disable_ipv6=1
Daniel
sumber
Saya sangat suka solusi Anda yang sangat bersih. Karena kami tidak menggunakan alamat tautan-lokal, menambahkan skalar kosong merupakan solusi sempurna. Setelah ini, kami harus me-reboot server karena netplan berlaku menjaga alamat IPv6 yang sudah ditetapkan pada kedua antarmuka ethernet kami. Tetapi setelah reboot, semuanya berfungsi seperti yang Anda katakan. Saya tidak berpikir ada alasan untuk mengganggu menonaktifkan IPv6 pada antarmuka loopback, jadi saya hanya melewatkan bagian sysctl. Terima kasih!
Zoltan