คุณสามารถกำหนดค่าเครือข่ายที่แตกต่างกันในการประมวลผลโดยใช้namespaces เครือข่ายลินุกซ์ ในทางทฤษฎีแล้วมันเป็นไปได้ที่จะกำหนดค่าPAM * เพื่อตั้งค่าผู้ใช้แต่ละคนในเนมสเปซเครือข่ายของตัวเองแยกต่างหาก
การตั้งค่าทั่วไปอาจอธิบายถึงการสร้างอินเทอร์เฟซบริดจ์ Linux เพื่อเชื่อมต่อเนมสเปซกับเครือข่าย การตั้งค่าที่เรียบง่ายเล็กน้อยสามารถเก็บถาวรได้โดยใช้ipvlan (รวมอยู่ในเคอร์เนลเวอร์ชัน 3.19 ขึ้นไป) หรืออุปกรณ์macvlan (สำหรับระบบไร้สายคุณไม่สามารถใช้macvlan ได้ ) เอกสารคู่มือเคอร์เนล Linux มีตัวอย่างโดยละเอียดสำหรับการตั้งค่าipvlanในเนมสเปซเครือข่าย
ทำตามตัวอย่างในเอกสารประกอบ:
สร้างเนมสเปซเครือข่ายns0
ip netns add ns0
สร้าง ipvlan slave บน eth0 (อุปกรณ์หลัก)
ip link add link eth0 ipvl0 type ipvlan mode l2
กำหนดทาสให้กับเนมสเปซเครือข่ายns0
ip link set dev ipvl0 netns ns0
กำหนดค่าอุปกรณ์ทาสในเนมสเปซเครือข่ายns0
ip netns exec ns0 ip link set dev ipvl0 up
ip netns exec ns0 ip link set dev lo up
ip netns exec ns0 ip -4 addr add 127.0.0.1 dev lo
ip netns exec ns0 ip -4 addr add $IPADDR dev ipvl0
ip netns exec ns0 ip -4 route add default via $ROUTER dev ipvl0
ให้โฮสต์และเราเตอร์ที่อยู่ในและ$IPADDR
$ROUTER
เรียกใช้แอปพลิเคชันของคุณในเนมสเปซเครือข่ายโดยใช้ ip exec
ip netns exec ns0 <command>
su <user> -c -- <command>
การเรียกใช้คำสั่งในฐานะผู้ใช้ที่แตกต่างกันให้ใช้ตามปกติ
* แก้ไข:จากทฤษฎีสู่การปฏิบัติ: ฉันได้เขียนโมดูล PAM ง่าย ๆ เพื่อสาธิตวิธีการเปลี่ยนเนมสเปซเครือข่ายต่อผู้ใช้ คุณต้องกำหนดค่าip netns
เนมสเปซเครือข่ายด้วยเช่นด้านบนและแม็พผู้ใช้เฉพาะกับเนมสเปซที่ระบุ หลังจากนั้นกระบวนการผู้ใช้ทั้งหมดจะอยู่ในเนมสเปซที่กำหนดค่าแทนที่จะเป็นกระบวนการเริ่มต้น รหัสเป็นเจ้าภาพบน GitHub ใช้ที่อันตรายของคุณเอง
ubuntu 14.04
ฉันได้รับเท่านั้น:Garbage instead of arguments "mode ...". Try "ip link help"
.