คุณจะกำหนดหนึ่ง IP ต่อผู้ใช้อย่างไร


11

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

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

การสตรีมจะทำได้จากภายในเครือข่ายภายในบ้านเท่านั้น ตัวเครื่องมี IP อยู่ 3 ตัวในอินเตอร์เฟสเดียว

คำตอบ:


21

คุณสามารถกำหนดค่าเครือข่ายที่แตกต่างกันในการประมวลผลโดยใช้namespaces เครือข่ายลินุกซ์ ในทางทฤษฎีแล้วมันเป็นไปได้ที่จะกำหนดค่าPAM * เพื่อตั้งค่าผู้ใช้แต่ละคนในเนมสเปซเครือข่ายของตัวเองแยกต่างหาก

การตั้งค่าทั่วไปอาจอธิบายถึงการสร้างอินเทอร์เฟซบริดจ์ Linux เพื่อเชื่อมต่อเนมสเปซกับเครือข่าย การตั้งค่าที่เรียบง่ายเล็กน้อยสามารถเก็บถาวรได้โดยใช้ipvlan (รวมอยู่ในเคอร์เนลเวอร์ชัน 3.19 ขึ้นไป) หรืออุปกรณ์macvlan (สำหรับระบบไร้สายคุณไม่สามารถใช้macvlan ได้ ) เอกสารคู่มือเคอร์เนล Linux มีตัวอย่างโดยละเอียดสำหรับการตั้งค่าipvlanในเนมสเปซเครือข่าย

ทำตามตัวอย่างในเอกสารประกอบ:

  1. สร้างเนมสเปซเครือข่ายns0

    ip netns add ns0
    
  2. สร้าง ipvlan slave บน eth0 (อุปกรณ์หลัก)

    ip link add link eth0 ipvl0 type ipvlan mode l2
    
  3. กำหนดทาสให้กับเนมสเปซเครือข่ายns0

    ip link set dev ipvl0 netns ns0
    
  4. กำหนดค่าอุปกรณ์ทาสในเนมสเปซเครือข่าย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

  5. เรียกใช้แอปพลิเคชันของคุณในเนมสเปซเครือข่ายโดยใช้ 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".
Sim

1
ฉันได้อัปเดตคำตอบสำหรับรุ่นเคอร์เนลแล้ว Ubuntu 14.04 ดูเหมือนจะไม่รวมรุ่นเคอร์เนลที่เพียงพอ ฉันไม่สามารถคิดถึงวิธีแก้ปัญหาที่อนุญาตให้คุณกำหนดค่าที่อยู่ IP แยกต่างหากเมื่อคุณใช้งานแบบไร้สาย หากคุณใช้อีเทอร์เน็ตคุณสามารถแทนที่ipvlanด้วยmacvlanในคำสั่ง3และทำตามตัวอย่างที่เหลือ
sebasth

คุณหมายถึงในคำสั่ง 2 หรือไม่ ตัวแปร$IPADDRและ$ROUTERจะต้องมีการจัดไว้ให้โดยผมหรือเป็นผู้ที่ตั้งอยู่แล้ว?
Sim

1
อันที่จริงคำสั่ง2 คุณต้องให้การกำหนดค่าเครือข่ายของคุณเอง
sebasth

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