เราจะสร้างส่วนเชื่อมต่อแบบหลายตัวบน Linux ได้อย่างไร


11

การสร้างอีเธอร์เน็ตปลอมหุ่นอินเตอร์เฟซบนลินุกซ์ครั้งแรกที่เราเริ่มต้นโปรแกรมควบคุมหุ่นอินเตอร์เฟซที่ใช้ด้านล่างคำสั่ง: / sbin / modprobe หุ่น
จากนั้นเรากำหนดนามแฝงของ Interface Ethernet ให้กับ Dummy Driver เราเพิ่งเริ่มต้นข้างต้น

แต่จะให้ข้อผิดพลาดร้ายแรงต่อไปนี้ที่บอกว่า: FATAL: ไม่พบโมดูลหุ่นจำลอง

นอกจากนี้ที่พา ธ cd / sys / อุปกรณ์ / virtual / net #เราจะเห็นว่ามีอินเตอร์เฟสเสมือนที่มีชื่อต่อไปนี้:
dummy0 / lo / sit0 / tunl0 /

ifconfig -a

dummy0:   Link encap:Ethernet  HWaddr aa:3a:a6:cd:91:2b    
          BROADCAST NOARP  MTU:1500  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo:     Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0  
          inet6 addr: ::1/128 Scope:Host  
          UP LOOPBACK RUNNING  MTU:16436  Metric:1  
          RX packets:111 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:111 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:8303 (8.1 KiB)  TX bytes:8303 (8.1 KiB)

sit0:      Link encap:UNSPEC  HWaddr 00-00-00-00-FF-00-00-00-00-00-00-00-00-00-00-00    
          NOARP  MTU:1480  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

tunl0:  Link encap:IPIP Tunnel  HWaddr   
          NOARP  MTU:1480  Metric:1  
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0   
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)  

ดังนั้นคำสั่ง modprobe ไม่สามารถโหลดโมดูลเคอร์เนลได้
เราจะโหลดโมดูลเคอร์เนลโดยใช้modprobeหรือ insmod เพื่อเริ่มต้นไดรเวอร์อินเตอร์เฟสแบบจำลองได้อย่างไร?
เราสามารถสร้างส่วนเชื่อมต่อแบบจำลองหลายตัวในโมดูลที่โหลดครั้งเดียวได้หรือไม่?


เมื่อคุณพูดถึง Ethernet virtual interface คุณไม่จำเป็นต้องโหลดโมดูลจำลองใด ๆ คุณสามารถสร้างมันโดยใช้คำสั่ง ifconfig เช่น eth0: 1, eth0: 2, ฯลฯ
supriady

คุณสามารถตั้งค่าที่อยู่ IP ต่าง ๆ ซับเน็ตและเกตเวย์บนอีเทอร์เน็ตเสมือนอินเตอร์เฟสโดยใช้คำสั่ง ifconfig เพียงเพิ่มบน rc.local และโหลดในการบู๊ตคุณไม่จำเป็นต้องสร้างไฟล์กำหนดค่าอินเตอร์เฟสอีเทอร์เน็ตเสมือน
supriady

1
@supriady ฉันไม่ได้ถามเกี่ยวกับอินเทอร์เฟซเสมือน ฉันรู้ว่าเราสามารถกำหนด IP เสมือนให้กับอินเตอร์เฟสโดยใช้ ifconfig เช่น eth0: 1 และอื่น ๆ แต่ที่นี่ที่อยู่ Mac h / w จะเหมือนกันสำหรับแต่ละอินเตอร์เฟสเสมือนที่สร้างขึ้น คำถามของฉันคือวิธีการสร้างส่วนต่อประสานหลายตัวเช่น dummy0 ที่แสดงด้านบนมีที่อยู่ Mac H / w ที่แตกต่างจากส่วนต่อประสานจริง
Kushal

เพียงเพื่อให้แน่ใจว่าคุณตระหนักดีว่าอินเตอร์เฟสเหล่านี้จะไม่สามารถมองเห็นได้จากภายนอกเครื่องใช่ไหม?
Julie Pelletier

กรุณาเพิ่มคำถามเอาท์พุทแบบเต็มของmodprobeข้อผิดพลาดและการส่งออกของuname -r
Rui F Ribeiro

คำตอบ:


13

วิธีปกติในการเพิ่มอินเทอร์เฟซจำลองต่าง ๆ คือใช้iproute2 :

# ip link add dummy0 type dummy
# ip link add dummy1 type dummy
# ip link list
...
5: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 22:4e:84:26:c5:98 brd ff:ff:ff:ff:ff:ff
6: dummy1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 9e:3e:48:b5:d5:1d brd ff:ff:ff:ff:ff:ff

แต่ข้อความแสดงข้อผิดพลาดFATAL: ไม่พบโมดูลจำลองแสดงว่าคุณอาจมีเคอร์เนลที่ไม่ได้เปิดใช้งานโมดูลส่วนต่อประสานดังนั้นตรวจสอบให้แน่ใจว่าได้ตรวจสอบการกำหนดค่าเคอร์เนลของคุณแล้วทำการคอมไพล์เคอร์เนลอีกครั้งหากจำเป็น


"ข้อความแสดงข้อผิดพลาด FATAL: ไม่พบโมดูลจำลองแสดงว่าคุณอาจมีเคอร์เนลที่ไม่ได้เปิดใช้โมดูลส่วนต่อประสานโมดูล" => ไม่อาจหมายถึงไดรเวอร์จำลองไม่ได้ถูกสร้างเป็นโมดูล แต่เพิ่มโดยตรงไปยังเคอร์เนลแทน . เห็นได้ชัดว่ามีdummy0อินเตอร์เฟสอยู่ในเครื่องของ OP นอกจากนั้นคำตอบของคุณก็โอเค
xhienne

1
@xhienne ขึ้นอยู่กับ modprobe เวอร์ชันของคุณ แต่kmodอย่างน้อยเวอร์ชันล่าสุดจะรู้เกี่ยวกับ builtins ลองมัน. เช่นและmodprobe unix modprobe -r unix
sourcejedi

7

ในการสร้างส่วนต่อประสานระหว่างการบูทผมแนะนำให้เพิ่มเข้าไป /etc/modules

dummy

ระวังโมดูลที่dummyอนุญาตให้มีสองอินเทอร์เฟซตัวแทนเชิดโดยค่าเริ่มต้นก่อนเคอร์เนล 4.4.x (รุ่นที่ถูกต้องจะตรวจสอบ)

หากคุณต้องการมากกว่านี้คุณต้องสร้าง a /etc/modprobe.d/localหรือ/etc/modprobe.d/dummy.confกำหนดพารามิเตอร์numdummiesด้วยจำนวนอินเทอร์เฟซจำลองที่คุณต้องการ:

options dummy numdummies=4 

ตามความคิดเห็น @Feuermurmel ในเมล็ดใหม่คุณเพิ่มอินเทอร์เฟซจำลองเพิ่มเติมนอกเหนือจากสองอันที่สร้างขึ้นตามค่าเริ่มต้นโดยใช้คำสั่ง:

sudo ip link add dummyX type dummy

อย่างน้อยที่สุดด้วยเคอร์เนล 4.4.0 สามารถเพิ่มอินเตอร์เฟสดัมมี่เพิ่มเติมip link add dumdum type dummyได้
Feuermurmel

@Feuermurmel คุณมีไอเดียถ้ามันทำงานเพื่อเพิ่มมากกว่า 2?
Rui F Ribeiro

มันทำอย่างแน่นอน ทดสอบด้วยตัวเอง:for i in {0..100}; do ip link add blubb-$i type dummy; done
Feuermurmel

@Feermurmel ข่าวดีขอบคุณสำหรับคำแนะนำ คุณอาจต้องการเพิ่มเป็นคำตอบเพิ่มเติม IMO ทั้งสองเกี่ยวข้องกันเนื่องจากยังมีอุปกรณ์ iOT จำนวนมากที่ติดอยู่ในเคอร์เนลเวอร์ชันต่ำ
Rui F Ribeiro

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