ฉันใช้เวลาหลายชั่วโมง (มากเกินไป!) ค้นคว้าและสำรวจโซลูชันต่างๆ ก่อนที่จะโพสต์ที่นี่ แต่คุณไม่รู้หรือว่าฉันพบคำตอบของตัวเองภายในไม่ถึงชั่วโมงต่อมา คำตอบของ Intika ในที่สุดคำถามอื่นก็พาฉันไปที่ ทิศทางที่ถูกต้อง. ฉันแน่ใจว่ามีวิธีแก้ไขปัญหาเกี่ยวกับเนมสเปซเครือข่าย ฯลฯ แต่นี่เป็นวิธีที่ง่ายที่สุดในการบรรลุจุดสิ้นสุดที่เราต้องการ
iptables -t mangle -A OUTPUT -m เจ้าของ --gid-เจ้าของ "นักเรียน" -j MARK --set-mark 42
iptables -t nat -A POSTROUTING -o enp1s0.20 -m เครื่องหมาย --mark 42 -j SNAT --to-source 192.168.20.10
กฎ ip เพิ่ม fwmark 42 ตาราง 42
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 192.168.20.2 dev enp1s0.20 ตาราง 42
บันทึก netfilter-ถาวร
vlan IP คือ 192.168.20.10; เกตเวย์ที่กรองคือ 192.168.20.2
หมายเหตุ 1: iptables-save ไม่ทำให้สิ่งนี้คงอยู่เมื่อรีบูต; netfilter-persistent เท่านั้นที่จะบันทึกการเปลี่ยนแปลง iptables
หมายเหตุ 2: สิ่งนี้ไม่ได้บันทึกการกำหนดค่าเส้นทาง ip จำเป็นต้องตั้งค่าให้โหลดซ้ำทุกครั้งที่เปิดใช้งานอินเทอร์เฟซใหม่ (ถอดปลั๊ก รีบูต ฯลฯ) เพื่อให้การกำหนดค่านี้คงอยู่ คุณต้องกำหนดค่าไฟล์ที่เหมาะสมใน /etc/netplan เนื่องจากฉันไม่สามารถแยกวิเคราะห์ไวยากรณ์หรือค้นหาตัวอย่างที่เกี่ยวข้องได้ ฉันจึงผนวก iptables ดั้งเดิม -j ลดลง
กฎและบันทึกสิ่งนี้ (ด้วย netfilter-persistent) เพื่อให้ในกรณีที่มีการรีเซ็ตเครือข่ายแบบอัตโนมัติ การเข้าถึงของนักเรียนทั้งหมดจะถูกบล็อก จากนั้นฉันได้เขียนสคริปต์ง่าย ๆ เพื่อลบบรรทัดนั้นออกจากตารางตัวกรองและเพิ่ม เส้นทางไอพี
สายอีกครั้ง
#!/bin/bash
# ลบบล็อกถาวรในกลุ่ม 'นักเรียน' ออกจากตารางตัวกรอง: sudo iptables -D OUTPUT -p tcp -m multiport --dport 80,443 -m Owner --gid-owner "students" -j DROP
# เพิ่มนโยบายเส้นทางที่ไม่คงอยู่เมื่อรีสตาร์ทเครือข่ายโดยไม่แก้ไขการกำหนดค่า netplan:
เส้นทาง sudo ip เพิ่มค่าเริ่มต้นผ่าน 192.168.20.2 dev enp1s0.20 ตาราง 42
echo "ควรกำหนดค่าการเข้าถึงที่กรองสำหรับกลุ่ม 'นักเรียน'"
ทางออก