การกำหนดที่อยู่ IPv6, ส่วนนำหน้าแบบไดนามิกส่วนท้องถิ่นแบบคงที่


10

เราเตอร์ในเครือข่ายของฉันแจกคำนำหน้า IPv6 ที่กำหนดโดย ISP ของฉัน คำนำหน้านี้เป็นแบบไดนามิก แต่ "เหนียวค่อนข้าง"

ฉันต้องการให้เครื่องของฉันรับค่านำหน้าที่โฆษณาใน RA โดยอัตโนมัติ แต่รวมเข้ากับส่วนที่ผู้ใช้ระบุเฉพาะแทนที่จะสร้างหนึ่งแบบสุ่มหรือตามที่อยู่ MAC มีวิธีง่าย ๆ ที่จะทำเช่นนั้น?


1
ฉันไม่เห็นระบบปฏิบัติการใด ๆ ที่อนุญาตให้คุณทำสิ่งนี้ :(
Sander Steffann

@SanderSteffann ไม่เคยใช้ Linux ใช่ไหม
Michael Hampton

1
@Michael ฉันไม่เคยเห็น OS ที่ให้คุณกำหนดค่า IID โทเค็น ในทางเทคนิคเคอร์เนลสามารถทำได้ แต่ไม่มี OS (ในการกระจาย) รองรับ :(
Sander Steffann

คำตอบ:


11

มีสองวิธีในการทำเช่นนี้ หนึ่งคือวิธีที่ง่ายและหนึ่งคือวิธีที่ยาก

วิธีที่ง่ายคือเรียกใช้เซิร์ฟเวอร์ DHCPv6 บนเครือข่ายของคุณและกำหนดที่อยู่โฮสต์ให้กับอุปกรณ์แต่ละตัวด้วยตัวคุณเอง หรือปล่อยให้เซิร์ฟเวอร์เลือกส่วนของโฮสต์ เซิร์ฟเวอร์ DHCPv6 ที่ฉันได้เห็นจะเก็บส่วนโฮสต์เดิมไว้แม้ว่าคำนำหน้าจะเปลี่ยนไป

วิธีที่ยากคือใช้ip tokenเพื่อตั้งค่าตัวระบุอินเตอร์เฟสโทเค็น นี่คือคำอธิบาย:

การสนับสนุนอินเตอร์เฟสตัวระบุโทเค็น IPv6 ใช้สำหรับการกำหนดที่อยู่โฮสต์ที่รู้จักกันดีให้กับโหนดในขณะที่ยังคงได้รับการเติมหน้าเครือข่ายทั่วโลกจากโฆษณาเราเตอร์ เป้าหมายหลักสำหรับตัวระบุโทเค็นคือแพลตฟอร์มเซิร์ฟเวอร์ที่มักจะกำหนดค่าที่อยู่ด้วยตนเองแทนที่จะใช้ DHCPv6 หรือ SLAAC โดยการใช้ตัวระบุโทเค็นโฮสต์ยังคงสามารถกำหนดคำนำหน้าเครือข่ายของตนโดยใช้ SLAAC แต่จะมีการจัดลำดับใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนหมายเลขนำหน้าเครือข่ายของตนโดยอัตโนมัติ Tokenized IPv6 Identifiers อธิบายไว้ในแบบร่าง: <draft-chown-6man-tokenised-ipv6-identifiers-02>

เหตุผลที่เป็นวิธีที่ยากคือในขณะที่ Linux มีฟังก์ชั่นนี้ไม่มีการแจกจ่าย Linux ฉันรู้ว่ารวมถึงการสนับสนุนสำหรับการกำหนดค่าแบบถาวรและใช้มันในเวลาบูตเช่นที่พวกเขาทำสำหรับที่อยู่ที่กำหนดเองหรือ DHCP ดังนั้นมันอาจจะไม่ทำงานได้ดีสำหรับคุณจนกว่าการกระจายบางอย่างจะทำเช่นนั้น โปรดทราบว่าตอนนี้มันเป็นไปได้ที่จะกำหนดค่าโทเค็น IPv6 ใน NetworkManager และ systemd-networkd; คำตอบล่าสุดมีคำแนะนำการกำหนดค่าเฉพาะ


สุดท้ายหาก ISP ของคุณเปลี่ยนคำนำหน้าเป็นครั้งคราวให้ลองใช้ที่อยู่เฉพาะในเครือข่ายของคุณ ด้วยวิธีนี้อุปกรณ์ทั้งหมดของคุณจะมีที่อยู่ที่ไม่เคยเปลี่ยนซึ่งพวกเขาสามารถพูดคุยกันได้ เราเตอร์ที่สนับสนุน IPv6 ในบ้าน / SOHO (เช่น OpenWrt) มีตัวเลือกในการเปิดใช้งาน ULA ทั่วทั้งเครือข่ายในบ้าน หากมีเราเตอร์หลายตัวในบ้านควรเปิดใช้งานเราเตอร์ที่เชื่อมต่อกับ ISP


ปัญหาที่ถามคำถามจริงคือเราเตอร์ ISP ของฉันส่ง RAs พร้อมอายุการใช้งานสั้น ๆ สิ่งนี้ทำให้เกิดปัญหาใหญ่กับที่อยู่ส่วนบุคคล OTOH ฉันไม่ชอบความคิดในการเปิดเผยที่อยู่ MAC ของฉันต่อโลก
plugwash

ส่วนหนึ่งในพื้นที่คงที่หลีกเลี่ยงปัญหาเกี่ยวกับที่อยู่ความเป็นส่วนตัวโดยไม่ต้องเปิดเผยที่อยู่ MAC ของฉันขอบคุณ
plugwash

คุณรู้วิธีที่จะเพิ่มราชสกุลหลายที่อินเตอร์เฟซเดียวชุดหลาย "คงที่แบบไดนามิก' อยู่ IPv6?
WEDI

@wedi Linux รองรับโทเค็นเดียวต่อหนึ่งอินเตอร์เฟสเท่านั้น โทเค็น IPv6 อาจไม่ใช่วิธีแก้ปัญหาของคุณไม่ว่าจะเป็นอะไรก็ตาม
Michael Hampton

6

Michael ทำข้อสรุปได้ดีมากและเคล็ดลับล่าสุดของ plugwash เป็นสิ่งที่ดีที่สุดที่ฉันพบหลังจากล่าสัตว์มาหลายชั่วโมงสำหรับโซลูชั่น CentOS 7 / RHEL (เช่น systemd และผู้จัดการเครือข่าย) หลังจากทำความคุ้นเคยกับ nmcli (ฉันส่วนใหญ่ยังคงใช้ ifcfg และ ip) - ฉันสามารถใช้มันได้สำเร็จ

แต่ขุดลึกลงไปตามhttps://developer.gnome.org/NetworkManager/stable/settings-ipv6.html NetworkManager สนับสนุนโดยตรงตัวระบุอินเทอร์เฟซ IPv6 tokenized เป็นคุณสมบัติ (จากรุ่น 1.4 สิงหาคม 2559 http://news.softpedia.com/ news / networkmanager-1-4-add-support- สำหรับการตั้งค่า -ipv6-tokenized-interface-identifiers-507601.shtml )

ดังนั้นคุณไม่จำเป็นต้องตั้งค่าตัวจัดการเครือข่าย IPv6 ให้เพิกเฉย แต่คุณควรตั้งค่าเป็น

nmcli connection modify eth0 ipv6.method "auto" # if not already
nmcli connection modify eth0 ipv6.addr-gen-mode "eui64" # use interface token
nmcli connection modify eth0 ipv6.token "::2"

ซึ่งจะเขียนIPV6_TOKEN=::2ถึง / etc / sysconfig / network-script / ifcfg-eth0 เพื่อเอาชีวิตการรีบูต หากต้องการใช้ทันทีให้รีสตาร์ทอินเตอร์เฟสโดย

nmcli connection up id eth0  # restart

3

ขอบคุณ Michael ที่ยืนยันว่า Linux รองรับคุณสมบัติและชี้ไปที่คำสั่งระดับต่ำ คำตอบนี้ครอบคลุมถึงวิธีการใช้งานจริงบนเดสก์ท็อปยืด Debian (พร้อม systemd และ network-manager)

ก่อนอื่นแก้ไขการเชื่อมต่อในตัวจัดการเครือข่ายและตั้งค่า IPv6 ให้เพิกเฉย

ตอนนี้สร้างไฟล์ /etc/NetworkManager/dispatcher.d/pre-up.d/iptoken ไฟล์ควรเป็นเจ้าของโดย root สิทธิ์ 755 และมีเนื้อหาดังต่อไปนี้

#!/bin/sh
ip token set ::2 dev eth0

แทนที่ eth0 ด้วยอุปกรณ์ที่คุณต้องการและ :: 2 ด้วยคำต่อท้ายที่คุณต้องการ


2

ภายใต้ Linux systemd-networkคุณสามารถใช้

เพียงสร้าง.networkไฟล์ใต้/etc/systemd/network/somename.network:

[Match]
Name=e*

[Network]
DHCP=yes
IPv6Token=::1

แทนที่จะe*จับคู่อินเทอร์เฟซทั้งหมดที่เริ่มต้นด้วยeคุณสามารถป้อนชื่ออินเตอร์เฟสแบบเต็ม สิ่งนี้เปิดใช้งาน DHCP {v4, v6} และใช้::1เป็นคำต่อท้าย คุณสามารถเลือกที่อยู่ IPv6 ใด ๆ แต่ 64 บิตแรกจะต้องตั้งค่าเป็นศูนย์

systemd-networkd.serviceหลังจากนี้เปิดใช้งานและเริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.