วิธีปิดใช้งานการกำหนดค่าอัตโนมัติบน IPv6 ใน Linux


22

ฉันจะปิดใช้งานการกำหนดค่าอัตโนมัติของ IPv6 ใน Linux อย่างถาวรได้อย่างไร เมื่อฉันพยายามลบที่อยู่จากอินเตอร์เฟสด้วยตนเองด้วย:

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

มันจะปรากฏขึ้นอีกไม่กี่วินาทีต่อมาฉันต้องการให้มันหายไปอย่างถาวร แต่ไม่ต้องปิดการใช้งาน IPv6 ทั้งหมดด้วยกัน

คำตอบ:


21

การกำหนดค่าอัตโนมัติสามารถปิดใช้งานชั่วคราวสำหรับ eth1 ด้วย:

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

หรือสำหรับอินเตอร์เฟสทั้งหมดด้วย:

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

การเปิดใช้งานใหม่โดยใช้ 1 แทน 0 ในการโทร

/etc/sysctl.confปิดการใช้งานอย่างถาวรสามารถทำได้ด้วยรายการไปยัง บน Debian Etch (อาจเป็นรุ่นใหม่กว่า) โดยไม่ตั้งค่าaccept_raระบบจะตั้งค่าอัตโนมัติโดยใช้ Link local adress ( fe80..)

ดังที่ Gart กล่าวไว้ด้านล่างการกำหนดค่าที่อยู่อัตโนมัติและการค้นหาเราเตอร์จะถูกปิดใช้งานหากโฮสต์นั้นเป็นเราเตอร์และaccept_raไม่ใช่2เช่น

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

และ

net.ipv6.conf.<iface|all|default>.accept_ra=0net.ipv6.conf.<iface|all|default>.accept_ra=1หรือ

ifaceอินเตอร์เฟสของคุณอยู่ที่ไหน


3
นอกจากนี้การกำหนดค่าที่อยู่อัตโนมัติและการค้นหาเราเตอร์จะถูกปิดการใช้งานหากโฮสต์นั้นเป็นเราเตอร์เช่นnet.ipv6.conf.all.forwarding=1ตั้งค่าไว้
Gart

4

net.ipv6.conf.all.accept_ra = 0 ข้างต้นไม่ควรทำเนื่องจาก RA จำเป็นสำหรับการบ่งชี้ on-link และ off-link สำหรับคำนำหน้า (ตาม RFC5942) เช่นเดียวกับการกำหนดค่าอัตโนมัติของจำนวนอื่น ๆ พารามิเตอร์เช่น MTU, Neighbor Discovery timeouts เป็นต้น

หากคุณต้องการปิดการใช้งาน autoconfiguration ให้ตั้งค่า autoconf sysctl ดังกล่าวข้างต้นหรือปิด A (บิต autoconfiguration บิต) ใน Prefix Information Option (PIO) ใน RA


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

สิ่งนี้ใช้ไม่ได้กับ Debian Wheezy หลังจากตรวจสอบ /etc/sysctl.conf ฉันต้องใช้

sudo sysctl -w net.ipv6.conf.default.autoconf=0

3

sysctlแก้ปัญหาไม่ได้ทำงานให้เราบน Ubuntu 18.04 ไบโอนิค เราแก้ไขมันโดย:

การแก้ไข/etc/netplan/01-netcfg.yamlกำหนดค่า:

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

eth0คุณอาจจะต้องใช้ชื่ออินเตอร์เฟซของคุณแทน หลังจากที่คุณบันทึกไฟล์ดำเนินการ:

netplan apply หรือ reboot

หากคุณได้รับ IPv6 IP จากการกำหนดค่าอัตโนมัติและคุณต้องการลบออกโดยไม่ต้องรีบูตเครื่องคุณสามารถดำเนินการได้:

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

แน่นอนคุณต้องเปลี่ยน IP และอุปกรณ์ในคำสั่งนี้


สิ่งนี้เพิ่งทำให้วันของฉันเป็นรอยขีดข่วนหัวของฉันเมื่อไม่กี่เดือนนี้: D
anthonysomerset

2
ฉันมักจะเกา Google จนกว่าฉันจะพบมัน
Jeroen Vermeulen - MageHost

1
สิ่งนี้ใช้งานได้เมื่อฉันลองใช้ แต่ปัญหาการเปิดรับปิดเป็นสิ่งที่อันตรายมากตามที่ระบุไว้โดย Mark S - ดูเหมือนจะใช้งานได้ แต่ในภายหลังคุณอาจพบว่าคุณขาดแพ็คเก็ตเนื่องจากมีการกระจายตัวของจุดหรือเราเตอร์ล้มเหลว ถูกนำมาใช้. นอกจากนี้ยังแบ่งการส่ง Ping เหตุผลที่ฉันพยายามทำเช่นนี้คือการจับคู่ระเบียน SPF ของฉันในจดหมายขาออกได้อย่างน่าเชื่อถือ แต่แล้วฉันก็รู้ว่าฉันควรใช้ netmask ในการบันทึกแทนเพราะในช่วงที่อยู่ IPv6 มีประสิทธิภาพอยู่ในเครื่องไม่ใช่ที่อยู่เดียว .
Phil McKerracher

2

ปัญหากับ Ubuntu 18 และ ipv6 คือ systemd-networkd ควบคุมพารามิเตอร์เคอร์เนลดังนั้นแม้ว่าหนึ่งอาจปิดการใช้งาน ipv6 กับ sysctl, networkd จะมีความสุขมากกว่าที่จะเปิดให้คุณหากการกำหนดค่าไม่ได้ระบุไว้เป็นอย่างอื่น

โซลูชันของฉันเพื่อปิดใช้งาน ipv6 คือการกำหนดค่า link-local ใน netplan เป็น scalar ที่ว่างเปล่า (หากคุณไม่มี IP-4 ของ link-local)

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

การกำหนดค่าจะรวบรวมการกำหนดค่าสำหรับ networkd ที่จะโพสต์ใน /run/systemd/network/10-netplan-eth0.network และที่จะโน้มน้าวใจ networkd ที่จะไม่วาง ipv6 สำหรับ eth0

หากคุณต้องการปิดการใช้งาน ipv6 บนลูปแบ็คก็สามารถทำได้อย่างง่ายดายโดยการตั้งค่าพารามิเตอร์เคอร์เนล net.ipv6.conf.all.disable_ipv6 เป็น 1 networkd ดูเหมือนจะไม่ควบคุมลูปแบ็ค

sysctl -w net.ipv6.conf.all.disable_ipv6=1

ฉันชอบโซลูชันที่สะอาดมากของคุณ เนื่องจากเราไม่ใช้ที่อยู่ link-local เพื่อเพิ่มสเกลาร์ที่ว่างเปล่าทางออกที่สมบูรณ์แบบ หลังจากนี้เราต้องรีบูตเซิร์ฟเวอร์เนื่องจากการใช้ netplan เก็บที่อยู่ IPv6 ที่กำหนดไว้แล้วบนทั้งสองอินเตอร์เฟสอีเธอร์เน็ตของเรา แต่หลังจากรีบูตทุกอย่างทำงานเหมือนที่คุณพูด ฉันไม่คิดว่ามีเหตุผลที่ต้องกังวลกับการปิดใช้งาน IPv6 บนอินเทอร์เฟซแบบวนรอบดังนั้นฉันจึงข้ามส่วน sysctl ขอบคุณ!
Zoltan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.