Score:2

จะเปิดใช้งานโหมด Promiscuous อย่างถาวรบน NIC ที่จัดการโดย NetworkManager ได้อย่างไร

ธง th

ฉันกำลังพยายามเชื่อมต่อ NIC สองตัวจากหลายตัวเพื่อทำหน้าที่เหมือนฮับสวิตชิ่ง
ในการทำเช่นนั้น ต้องเปิดใช้งานโหมดสำส่อนบน NIC
แม้ว่าฉันจะตั้งค่าเป็น âpromisc onâ ด้วยคำสั่ง âip linkâ การตั้งค่าจะถูกรีเซ็ตเมื่อฉันรีบูตเครื่องพีซี

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

สภาพแวดล้อมคือ Ubuntu Desktop 20.04 LTS
ด้วยเหตุนี้ การกำหนดค่าเครือข่ายจึงขึ้นอยู่กับ NetworkManager

ตัวอย่างของการกำหนดค่าขั้นต่ำแสดงอยู่ด้านล่าง:

Vagrant.configure("2") ทำ |config|
  config.vm.define :บริดจ์ทำ |เครื่อง|
    machine.vm.box = "เบนโตะ/อูบุนตู-20.04"
    machine.vm.network :private_network, auto_config: เท็จ, virtualbox__intnet: "intnet_a"
    machine.vm.network :private_network, auto_config: เท็จ, virtualbox__intnet: "intnet_b"

    machine.vm.provision "shell" แบบอินไลน์: <<-SHELL
      apt-รับการปรับปรุง
      apt-get install -y ผู้จัดการเครือข่าย
      แมว > /etc/netplan/50-bridge.yaml << 'EOS'
เครือข่าย:
  รุ่น: 2
  อีเธอร์เน็ต:
    eth1:
      ที่อยู่:
        - 0.0.0.0/32
    eth2:
      ที่อยู่:
        - 0.0.0.0/32
  สะพาน:
    br0:
      อินเทอร์เฟซ:
        - eth1
        - eth2
อีโอเอส
      echo 'เครือข่าย: { เวอร์ชัน: 2, เรนเดอร์: NetworkManager }' > /etc/netplan/99-NetworkManager.yaml
      สมัครเน็ตแพลน
    เปลือก
  จบ
จบ

คำสั่ง "ip link" เปิดใช้งานสถานะ PROMISC ของ NIC ดังที่แสดงด้านล่าง

$ sudo ip link set dev eth1 promisc on
$ sudo ip link ตั้งค่า dev eth2 promisc บน
$ ip addr
[...]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[...]

อย่างไรก็ตาม หลังจากรีบูตระบบปฏิบัติการแล้ว สถานะ PROMISC จะถูกรีเซ็ต

$ sudo รีบูต
[...]
$ ip addr
[...]
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[...]

ในตัวอย่างนี้ ฉันใช้ Vagrant เพื่อจุดประสงค์ในการแสดงสภาพแวดล้อมที่ทำซ้ำได้
คนจรจัดไม่ใช่ข้อกำหนด สิ่งที่ฉันต้องการใช้จริงๆ คือ Ubuntu บนพีซีจริง
เพียงแค่เปิดใช้งานโหมดสำส่อนผ่านการเรียกใช้การจัดสรรคนพเนจร ไม่ แก้ปัญหานี้.

Score:0
ธง th

ฉันพบหลายวิธีและแก้ไขตัวเอง

วิธีที่ 1: ใช้ NetworkManager-dispatcher

$ sudo bash -c 'cat > /etc/NetworkManager/dispatcher.d/50-promisc' <<'EOS'
#!/usr/bin/bash -e
กรณี "$2" ใน
    ขึ้น)
        ถ้า [[ "$1" = "eth1" ]] || [[ "$1" = "eth2" ]]; แล้ว
            ip link ตั้งค่า dev $1 promisc on
        ไฟ
        ;;
เอสแซค
อีโอเอส
$ sudo chmod u=rwx,g=rx,o=rx /etc/NetworkManager/dispatcher.d/50-promisc
$ sudo รีบูต
[...]
$ ip addr
[...]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[...]

ลงทะเบียนสคริปต์สำหรับ NetworkManager-ดิสแพตเชอร์ ซึ่งจะเปิดใช้งาน promisc เมื่อ NIC เป้าหมาย (eth1 หรือ eth2) อยู่ในสถานะ up

วิธีที่ 2: ลงทะเบียนบริการ one-shot ใน systemd ที่ล่าช้าจนกว่าหน่วย network-online.target จะเริ่มทำงาน

$ sudo bash -c 'cat > /etc/systemd/system/bridge-promisc.service' <<'EOS'
[หน่วย]
คำอธิบาย=ทำให้อินเตอร์เฟสทำงานในโหมดที่หลากหลายเมื่อบู๊ต
After=network-online.target

[บริการ]
Type=วันช็อต
ExecStart=/usr/sbin/ip ลิงก์ตั้งค่า dev eth1 promisc บน
ExecStart=/usr/sbin/ip ลิงก์ตั้งค่า dev eth2 promisc บน
หมดเวลาStartSec=0
RemainAfterExit=ใช่

[ติดตั้ง]
ต้องการโดย=default.target
อีโอเอส
$ sudo systemctl เปิดใช้งานบริดจ์-promisc
$ sudo รีบูต
[...]
$ ip addr
[...]
3: eth1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP กลุ่มเริ่มต้น qlen 1,000
    ลิงค์/อีเธอร์ xx:xx:xx:xx:48:57 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงก์/อีเธอร์ xx:xx:xx:xx:c4:f5 brd ff:ff:ff:ff:ff:ff
[...]

ฉันคิดว่าวิธีนี้สามารถใช้กับรูปแบบที่ไม่ใช้ NetworkManager

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา