การเพิ่มทั้งบล็อก IPv6 / 64 ให้กับเครือข่ายอินเทอร์เฟซบนเดเบียน


15

ฉันพยายามเพิ่มทั้งบล็อก IPv6 (/ 64) ลงในส่วนต่อประสานที่ใช้

ip route add local 2001:41d0:2:ad64::/64 dev lo

เช่นอธิบายไว้ที่นี่บนเซิร์ฟเวอร์ Debian ของฉัน แต่ฉันดูเหมือนจะหายไปบางสิ่งบางอย่าง

ถ้าฉัน ping ตัวอย่าง2001:41d0:2:ad64::feทุกอย่างในพื้นที่ทำงานได้ดี แต่ถ้าฉันลองจากเครื่องระยะไกลมันไม่ทำงาน ฉันลองเพิ่มเส้นทางใน eth0:

ip route add local 2001::41d0:2:ad64::/64 dev eth0

ตอนนี้ฉันไม่สามารถปิงที่อยู่ตัวอย่างใด ๆ ในเครื่องได้!

ฉันหายไปเล็กน้อยเนื่องจากดูเหมือนว่าจะพลาดบางสิ่ง แต่ฉันไม่พบคำตอบที่นี่

สั้น: ฉันต้องการ2001:41d0:2:ad64::/64ที่จะผูกพันกับ eth0 เพื่อให้ทุก IP บล็อกนี้มีจะสามารถเข้าถึงได้จากอินเทอร์เน็ตบนเครื่องของฉัน

ฉันหวังว่าใครบางคนที่นั่นสามารถชี้ทางที่ถูกต้องให้ฉันได้ ขอบคุณล่วงหน้า.

คู่มือจาก ISP ไม่ต้องให้ฉันเพิ่มแต่ละ IPv6 เพื่อติดต่อ explictly ฉันต้องการที่จะบอกเป็นนัย

การกำหนดค่าการทำงานพร้อมการเชื่อมโยงที่อยู่ IP แบบอธิบาย

/ etc / เครือข่าย / อินเตอร์เฟซ:

auto eth0
iface eth0 inet static
        address my.ip.v4
        netmask 255.255.255.0
        network my.network.address.ip
        broadcast my.broadcast.address.ip
        gateway my.gateway.ip

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff
        up ip addr add 2001:41d0:2:ad64::1/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::1/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::2/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::2/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::3/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::3/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::4/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::4/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::5/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::5/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::6/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::6/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::7/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::7/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::8/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::8/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::9/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::9/64 dev eth0
        up ip addr add 2001:41d0:2:ad64::a/64 dev eth0
        down ip addr del 2001:41d0:2:ad64::a/64 dev eth0

วิธีแก้ปัญหาลอง # 1

ฉันลองเปิดใช้งานเส้นทางท้องถิ่นอีกครั้งตามที่ @kasperd แนะนำ

เนื้อหาของ / etc / network / interfaces ของฉัน

auto lo
iface lo inet loopback
    post-up ip route add local 2001:41d0:2:ad64::/64 dev lo
    pre-down ip route del local 2001:41d0:2:ad64::/64 dev lo

auto eth0
iface eth0 inet static
        # <snip of ipv4 config>

iface eth0 inet6 static
        address 2001:41d0:2:ad64::fe
        netmask 64
        gateway 2001:41d0:2:adff:ff:ff:ff:ff

ตารางเส้นทางท้องถิ่น:

# ip -6 route show table local
local ::1 dev lo  proto none  metric 0
local 2001:41d0:2:ad64::fe dev lo  proto none  metric 0
local 2001:41d0:2:ad64::/64 dev lo  metric 1024
local fe80::225:90ff:fe06:6bbe dev lo  proto none  metric 0
ff00::/8 dev eth0  metric 256

ผลลัพธ์ของtraceroute(พีซีในบ้านของฉัน):

  1    <1 ms    <1 ms    <1 ms  fritz.box [xxx]

  2    20 ms    21 ms    24 ms  2002:c058:6301::1
  3    21 ms    22 ms    24 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    44 ms    31 ms    40 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6     *        *       35 ms  ams-5-6k.nl.eu [2001:41d0::8d1]
  7    37 ms    39 ms    36 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    37 ms    70 ms    36 ms  chi-3-4m.il.us [2001:41d0::176]
  9  Zielhost nicht erreichbar.

Ablaufverfolgung beendet.

traceroute6 บนเซิร์ฟเวอร์:

traceroute to 2001:41d0:2:ad64::23 (2001:41d0:2:ad64::23), 30 hops max, 80 byte packets
 1  2001:41d0:2:ad64::a (2001:41d0:2:ad64::a)  0.028 ms  0.009 ms  0.008 ms

ping6 บนเซิร์ฟเวอร์:

PING 2001:41d0:2:ad64::23(2001:41d0:2:ad64::23) 56 data bytes
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=1 ttl=64 time=0.029 ms
64 bytes from 2001:41d0:2:ad64::23: icmp_seq=2 ttl=64 time=0.057 ms
^C
--- 2001:41d0:2:ad64:23 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.029/0.043/0.057/0.014 ms

tcpdump เอาท์พุท (ในขณะที่กระตุกและติดตามบนเซิร์ฟเวอร์ระยะไกล):

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

tracert ไปที่เกตเวย์:

Routenverfolgung zu vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff] über maximal 3
0 Abschnitte:

  1    <1 ms    <1 ms    <1 ms  fritz.box [2002:5476:1b4c:0:c225:6ff:fe40:b2b0]

  2    23 ms    22 ms    26 ms  2002:c058:6301::1
  3    24 ms    40 ms    23 ms  10gigabitethernet6.switch2.fra1.he.net [2001:470
:0:150::1]
  4    28 ms    37 ms    39 ms  100ge3-1.core1.ams1.he.net [2001:470:0:2d4::1]
  5     *        *        *     Zeitüberschreitung der Anforderung.
  6    38 ms    33 ms     *     ams-5-6k.nl.eu [2001:41d0::8d1]
  7    36 ms    39 ms    38 ms  rbx-g2-a9.fr.eu [2001:41d0::ab1]
  8    36 ms    35 ms    35 ms  vss-3-6k.fr.eu [2001:41d0:2:adff:ff:ff:ff:ff]

Ablaufverfolgung beendet.

ping ไปที่เกตเวย์:

Ping wird ausgeführt für 2001:41d0:2:adff:ff:ff:ff:ff mit 32 Bytes Daten:
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=36ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=34ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=38ms
Antwort von 2001:41d0:2:adff:ff:ff:ff:ff: Zeit=57ms

Ping-Statistik für 2001:41d0:2:adff:ff:ff:ff:ff:
    Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 34ms, Maximum = 57ms, Mittelwert = 41ms

ดังนั้นจึงยังคงทำงานในพื้นที่ (เซิร์ฟเวอร์) แต่ไม่ใช่จากระยะไกล (พีซีของฉัน)


คุณเคยลองใช้ traceroute จากเครื่องระยะไกลหรือไม่? การติดตามล้มเหลวที่ไหน
Zoredache

หากโฮสต์ทั้งหมดอยู่ในเครือข่ายเดียวกันคุณไม่ควรมีเส้นทางใด ๆ
Spack

ip routeคำสั่งที่สองของคุณมีการพิมพ์ผิดในที่อยู่ IPv6
Michael Hampton

@ แพ็คฉันต้องการให้ eth0 รับฟังคำนำหน้าทั้ง ipv6 / 64 (ปริมาณข้อมูลขาเข้า), @ michael-hampton ได้รับการแก้ไขมันเป็นเพียงขณะที่พิมพ์คำถามนี้ @Zoredache มันล้มเหลวที่ ISPs Gateway 2001:41d0:2:adff:ff:ff:ff:ffหลังจากนั้นมันจะหมดเวลา
Hikaru-Shindo

จากการวิจัยที่ฉันเคยทำในอดีตมันเป็นไปไม่ได้ เหตุผลที่ใช้งานในพื้นที่นั้นเป็นเพราะตารางเส้นทางของคุณรู้ที่จะแพ็คเก็ตเส้นทาง หากคุณเพิ่มคำนำหน้านี้เป็นเส้นทางแบบคงที่ในเราเตอร์ขอบของคุณแล้วคุณจะเห็นลูกค้า LAN สามารถเชื่อมต่อ
Nathan C

คำตอบ:


13

ฉันต้องการสิ่งที่คล้ายกันในอดีต ฉันพบว่ามีสามขั้นตอนในการทำงาน:

  • คุณต้องกำหนดเส้นทางคำนำหน้าไปยังโฮสต์
  • คุณต้องมีเส้นทางท้องถิ่นในโฮสต์
  • แอปพลิเคชันต้องตั้งค่าIP_FREEBINDหรือIP_TRANSPARENTตัวเลือกในซ็อกเก็ต

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

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

การใช้ daemon ดังกล่าวไม่แนะนำให้ใช้เป็นทางเลือกสุดท้ายเนื่องจากจะใช้หน่วยความจำโดยไม่จำเป็นจากเพื่อนบ้านทั้งหมดของคุณ มีการใช้งานไม่กี่ภูตดังกล่าวหนึ่งที่มีลักษณะ promissing ก็คือndppd (ฉันไม่มีประสบการณ์ที่เฉพาะเจาะจงกับมันเนื่องจากฉันเพิ่งเรียนรู้เกี่ยวกับมันหลังจากที่ฉันเขียนของตัวเองด้วยลิงก์คำนำหน้า hardcoded ของฉัน)

ดูเหมือนว่าคุณจะได้รับเส้นทางในท้องถิ่นแล้ว ดังที่คุณสังเกตเห็นว่าจะต้องมีการกำหนดให้กับloอินเทอร์เฟซเพื่อให้สามารถใช้งานได้

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

const int one = 1;
setsockopt(fd, SOL_IP, IP_FREEBIND, &one, sizeof(one));

ฉันมีคำนำหน้าคงที่ที่ส่งไปยังเซิร์ฟเวอร์ของฉันโดย ISP (พวกเขาไม่ได้ให้ DHCP ทั้งสำหรับ IPv4 และ IPv6) ฉันต้องการให้ IPv6 ทั้งหมดในบล็อกนี้ / 64 สามารถเข้าถึงได้จากภายนอก (ส่วนใหญ่ของแอปพลิเคชันของฉันเชื่อมโยงกับ :: ซึ่งควรเป็นที่อยู่ที่มีอยู่ทั้งหมดหากฉันไม่เข้าใจผิด) ตอนนี้ฉันต้องการให้ IP ทั้งหมดเหล่านี้พร้อมใช้งานบน eth0 ดังนั้นหากฉันพยายามเชื่อมต่อกับ IPv6 ใด ๆ ในบล็อกนั้นแอปพลิเคชันใด ๆ ที่ฟังพอร์ตที่ระบุจะสามารถตอบได้ (ตัวอย่างเช่นแต่ละ IP ควรตอบ ping อย่างถูกต้อง)
Hikaru-Shindo

หากคุณเชื่อมโยงกับ :: ไม่จำเป็นต้องใช้ตัวเลือก IP_TRANSPARENT ด้วยคำนำหน้าที่ส่งไปยังเซิร์ฟเวอร์ของฉันและเส้นทางภายในเครื่องฉันสามารถผูก :: และรับการเชื่อมต่อที่ทำกับที่อยู่ IPv6 ตามอำเภอใจในช่วงนั้น ping6 ทำงานได้ดี ฉันกำลังทดสอบสิ่งนี้บน Ubuntu 12.04 แต่ฉันคาดหวังว่ามันจะทำงานบนเคอร์เนลล่าสุดในการกระจายอื่น ๆ เช่นกัน หากไม่ได้ผลสำหรับคุณฉันขอแนะนำให้คุณดูปริมาณการใช้เครือข่ายโดยใช้tcpdump -pni eth0 'host 2001:41d0:2:ad65::fe'
kasperd

มันยังไม่ทำงาน ฉันให้ข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่าในคำถามของฉันอาจช่วยได้
Hikaru-Shindo

คุณบอกว่าคุณมี / 64 เส้นทางไปยังเซิร์ฟเวอร์ แต่ตัวอย่างในคู่มือผู้ให้บริการโฮสต์มีเพียงคำนำหน้าลิงก์และไม่มีคำนำหน้าที่กำหนดเส้นทาง และเอาต์พุต tcpdump และ traceroute6 ดูเหมือนว่าแอดเดรสไม่ถูกกำหนดเส้นทางไปยังเซิร์ฟเวอร์ คุณได้รับที่อยู่ IPv6 เดียวที่ทำงานโดยใช้เอกสารจากผู้ให้บริการหรือไม่
kasperd

1
@Arya เมื่อฉันต้องการสิ่งนี้ฉันสั่งการ/etc/rc.local
kasperd

2

ตอนนี้เป็นปี 2019 หนึ่งคำ: ip_nonlocal_bind (ตั้งแต่เคอร์เนล 4.3 เท่าที่ฉันรู้)

ใช้ ndppd + sysctl net.ipv6.ip_nonlocal_bind = 1 อันสุดท้ายให้คุณเชื่อมโยงกับที่อยู่ IPv6 ใด ๆ (ไม่ต้องใช้ IP_FREEBIND ในกรณีนี้)

คิดว่าคุณทำเช่นนั้น:

ip add add local 2001::41d0:2:ad64::/64 dev lo
ip route add local 2001::41d0:2:ad64::/64 dev eth0
sysctl  net.ipv6.ip_nonlocal_bind = 1

ndppd.conf จะมีลักษณะดังนี้:

route-ttl 30000

proxy eth0 {

   router no

   timeout 500
   ttl 30000
   rule 2001::41d0:2:ad64::/64{
       static
   }
}

เรียกใช้ ndppd และตอนนี้คุณสามารถผูกกับที่อยู่ใด ๆ (ของบล็อกเพิ่ม) และใช้มันตามที่มันเพิ่มเข้ามาเอง

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