ฉันสามารถผูกที่อยู่บล็อกขนาดใหญ่เข้ากับส่วนต่อประสานได้หรือไม่


26

ฉันรู้ว่าเครื่องมือ ip ช่วยให้คุณผูกหลายที่อยู่กับอินเทอร์เฟซ (เช่นhttp://www.linuxplanet.com/linuxplanet/tutorials/6553/1/ ) แม้ว่าตอนนี้ฉันกำลังพยายามสร้างบางสิ่งที่อยู่ด้านบนของ IPv6 และมันจะมีประโยชน์มากที่จะมีที่อยู่บล็อกทั้งหมด (เช่น a / 64) ที่มีอยู่เพื่อให้โปรแกรมสามารถเลือกที่อยู่ใดก็ได้จากช่วงและ ผูกไว้กับที่ จำเป็นต้องพูดการแนบ IP ทุกตัวจากช่วงนี้ไปยังอินเทอร์เฟซอาจใช้เวลาสักครู่

Linux รองรับการเชื่อมโยงที่อยู่ทั้งหมดกับส่วนต่อประสานหรือไม่


distros ที่แตกต่างกันมีวิธีการจัดการที่แตกต่างกัน เลือกหนึ่ง.
Ignacio Vazquez-Abrams

อูบุนตูในตอนนี้ แต่แน่นอนว่าโซลูชั่นที่ใช้งานได้บน distros เป็นที่ต้องการแน่นอน
p-static

บทช่วยสอนนี้ผูกที่อยู่เดียวภายในบล็อก (/ 24) / 24 เพียงแค่ระบุว่ามันอยู่ในบล็อกมันควรจะทำงานเหมือนกันสำหรับ IPv6
BillThor

Cross-distro จะเขียนสคริปต์ที่ใช้ "ip addr add" Red Hat, Ubuntu และ SuSE มีสคริปต์เครือข่ายที่แตกต่างกัน ...
Sean Reifschneider

1
@ChandraNakka สิ่งนี้มีประโยชน์กับคุณไหม?
kasperd

คำตอบ:


31

ลินุกซ์ 2.6.37 และสนับสนุนดังกล่าวข้างต้นนี้ผ่านทางคุณลักษณะที่เรียกว่าAnyIP เช่นถ้าฉันวิ่ง

ip route add local 2001:db8::/32 dev lo

บนเครื่อง Ubuntu 11.04 เครื่องจะยอมรับการเชื่อมต่อที่อยู่ใด ๆ ในเครือข่าย 2001: db8 :: / 32


1
มี AnyIP solution สำหรับ ipv4 หรือไม่?
Coaku

ใช้งานกับ Ubuntu 14.04 ได้หรือไม่
จันทรานาคก้า

สิ่งนี้ดูเหมือนว่าจะใช้งานได้และฉันสามารถ ping ช่วงของที่อยู่ได้ แต่เมื่อฉันเรียกใช้ip route listหรือไม่ip -6 route listพบเส้นทางที่เพิ่ม คุณจะระบุการบล็อกที่อยู่ AnyIP อย่างไร
Colton

สิ่งนี้ใช้ได้กับที่อยู่ในเครื่อง แต่ฉันไม่สามารถ ping หรือเข้าถึง IP เหล่านี้จากแหล่งภายนอก มีวิธีแก้ไขไหม? (ฉันพยายามแทนที่แท้จริงด้วย eth0 แต่ก็ไม่มีอะไรสามารถเข้าถึงได้)
BrainStone

@BrainStone คุณต้องติดตั้ง ndppd สำหรับสิ่งนั้นหรือรับ prefix จากผู้ให้บริการของคุณ
Arya

6

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

ip addr add 192.168.5.0/24 dev lo

จากนั้นทำสิ่งนี้:

$ nmap -sP -oG - 192.168.5.0/24

# Nmap 5.21 scan initiated Tue Dec  7 11:38:28 2010 as: nmap -sP -oG - 192.168.5.0/24 
Host: 192.168.5.0 ()    Status: Up
Host: 192.168.5.1 ()    Status: Up
Host: 192.168.5.2 ()    Status: Up
[...]
Host: 192.168.5.254 ()  Status: Up
Host: 192.168.5.255 ()  Status: Up
# Nmap done at Tue Dec  7 11:38:46 2010 -- 256 IP addresses (256 hosts up) scanned in 0.11 seconds

ด้วยเส้นทางที่เหมาะสมในสถานที่นี้จะทำสิ่งที่คุณต้องการ ... สำหรับที่อยู่ IPv4 คุณได้ถามเกี่ยวกับ IPv6 และฉันไม่มีประสบการณ์ใด ๆ กับ IPv6 แต่มีโอกาสที่ดีที่มันจะทำงานในลักษณะเดียวกัน

ฉันอ่านเกี่ยวกับสิ่งนี้ที่นี่แต่เดิม(ไปยังด้านล่างของบทความ) โปรดทราบว่าบทความนี้ยังกล่าวถึงวิธีการกำหนดที่อยู่หลายแห่งอย่างชัดเจนให้กับอินเทอร์เฟซโดยใช้ฟีเจอร์ CentOS / Red Hat ที่ฉันไม่เคยรู้จักมาก่อน


เย็น! ฉันลองสิ่งนี้กับ IPv6 บน Ubuntu (Lucid & Hardy) โดยไม่มีโชค ฉันคิดว่านี่จะเป็นคุณสมบัตินักฆ่าสำหรับ IPv6 - คุณสามารถแมปที่อยู่ทำวัตถุฐานข้อมูลหรือใช้ที่อยู่เป็นรหัสเซสชัน
เจอรัลด์รวงผึ้ง

2
ไม่คุณไม่ควรเพิ่มที่อยู่ ip -6 route add local <ip> dev loแต่เพิ่มเส้นทาง:
Navin

2

ดังนั้นฉันเห็นตัวเลือกน้อยที่นี่:

  1. ใช้สคริปต์เพื่อผูกที่อยู่ทั้งหมดในอินเทอร์เฟซทีละรายการ

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

  3. คุณสามารถเล่นลูกเล่นกับกฎ NAT เพื่อทำการเขียนบล็อกของ Ips ที่ถูกส่งไปยังเครื่องหนึ่งเป็น IP ภายในเครื่องเดียวบนเครื่องนั้น ... แต่คุณจะต้องจบลงด้วย IP ภายในหนึ่งต่อ IP ที่คุณต้องการจ่ายจริง ๆ ให้ความสนใจซึ่งนำคุณกลับไปสู่โซลูชัน 1

ถ้าฉันเป็นคุณฉันแค่เขียนสคริปต์ตัวเล็กในตัวเลือก 1 หรือใช้สคริปต์จากที่นี่ :

#!/bin/sh
if [ "$#" -ne "4" ]; then
        echo Usage:
        echo " $0 interface ip range netmask"
        echo " examples:"
        echo "  1) Assuming you want to bind the IP range 192.168.0.1..192.168.0.254 to eth0 with netmask 255.255.255.0:"
        echo "  $0 eth0 192.168.0. 1..254 255.255.255.0"
        echo "  2) Assuming you want to bind the IPv6 range 2001:41d0:1:5000::1-2001:41d0:1:5000::254 to eth0 with netmask /56"
        echo "  $0 eth0 2001:41d0:1:5000:: 1..254 56"
else
        echo "Attempting to assign the IP range $2($3) to interface $1 with netmask $4"
        for ip in $(eval echo "{$3}"); do ifconfig -v $1 add $2$ip netmask $4; done
fi

สคริปต์ดังกล่าวจะตั้งชื่อที่ไหน
Skaperen

2

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


1

"Anyip" ที่อธิบายข้างต้นไม่ได้ผลสำหรับฉันใน centos 7 ฉันต้องสร้างสคริปต์เพื่อสร้างที่อยู่ ipv6 ตอนบูต ต้องการทำเช่นนั้นฉันได้เพิ่มต่อไปนี้ใน / etc / crontab:

@reboot root /path/to/bashscript

นี่คือสคริปต์ทุบตีเพื่อสร้างที่อยู่ 3000 ipv6 ประมาณ:

#!/bin/bash
INETP="2a00:xxxx:xxxx:xxxx::"
PRE="64"
INTE="eth0"
IP1=/sbin/ip
echo -n "Adding IPv6 addresses..."
for i in {3..3000}
do
$IP1 -6 addr add ${INETP}$(printf '%x\n' $i)/${PRE} dev ${INTE}
done
echo "Done!"

วิธีนี้ใช้งานได้จนกว่าคุณจะถึงที่อยู่ประมาณ 4000 ที่อยู่ หากคุณพยายามกำหนดค่าที่อยู่มากกว่าที่จะไม่ทำงาน มีหลายสถานการณ์ที่ต้องการกำหนดทั้ง / 96 หรือ / 64 ให้กับโฮสต์เดียวไม่มีวิธีที่วิธีการของคุณจะขยายขนาดนั้น
kasperd

@kasperd ที่คุณสามารถทำให้ anyip กลไกที่เรียกว่า "อธิบาย" โดย Gerald Combs ข้างต้นทำงานบน Centos 7 หรือ Debian 8?
Nicolas Guérinet

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