ฉันมีสูตรที่ฉันใช้ในหลายกรณีแล้ว แต่คราวนี้ใช้ไม่ได้กับ Debian 11 (เคอร์เนล 5.10.0-10-amd64)
การตั้งค่าของฉันนั้นเป็นอินเทอร์เฟซภายใน eth0 สำหรับ RFC1918 LAN และอินเทอร์เฟซภายนอกสองอินเทอร์เฟซที่เชื่อมต่อกับ Box ของ ISP บางตัว:
eth1 สำหรับ ISP1 เป็นเราเตอร์เริ่มต้นที่ 10.0.0.254 พร้อม IP สาธารณะ 1.2.3.4 (เปรียบเปรย)
eth2 สำหรับ ISP2 มีเราเตอร์ที่ 10.0.3.254 พร้อมสาธารณะ 2.3.4.5
ฉันมีเส้นทางที่เป็นไปได้ที่แตกต่างกัน ฉันต้องการควบคุมเส้นทางที่แพ็คเก็ตของฉันใช้ ดังนั้นฉันจึงสร้างกฎและ fwmark ก่อนอื่นฉันผนวก 2<tab>เราเตอร์ตัวที่สอง
ใน /etc/iproute2/rt_tables
กฎ ip เพิ่ม fwmark 0x3 ค้นหาเราเตอร์ตัวที่สอง
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.0.3.254 ตาราง secondrouter
ทุกอย่างดีเกี่ยวกับ ตารางรายการเส้นทาง ip เราเตอร์ตัวที่สอง
และ รายการกฎ ip
ในเวลานี้ฉันสามารถทำได้:
ขด -4 ifconfig.me
1.2.3.4 #<- ที่อยู่ IP สาธารณะของเส้นทางเริ่มต้นของฉัน
ถ้าอย่างนั้นฉันก็ทำ
iptables-legacy -t mangle -A OUTPUT -d 34.117.59.81 -j MARK --set-mark 0x3
ตอนนี้ถ้าฉันทำ
ขด -4 ifconfig.me
<หมดเวลา>
ที่ฉันคาดหวัง 2.3.4.5 เป็น IP สาธารณะ
เห็นได้ชัดว่าแพ็กเก็ตที่ทำเครื่องหมายไว้ไม่ได้ใช้เส้นทางจากตารางเส้นทาง ip แย่กว่านั้นคือหมดเวลา
ถ้าฉันทำแบบเดียวกันกับ Debian รุ่นเก่า มันทำงานได้อย่างสมบูรณ์แบบ
หมายเหตุ: ถ้าฉันทำ
เส้นทาง ip เพิ่ม 34.117.59.81 ผ่าน < IP เราเตอร์ที่สอง >
การทดสอบการขดของฉันทำงานได้อย่างสมบูรณ์ตามที่คาดไว้
ขด -4 ifconfig.me
2.3.4.5 #<- เผยแพร่ที่อยู่ IP ของเราเตอร์ตัวที่สองของฉัน
ปัญหาของฉันเกิดขึ้นเมื่อใช้งาน iptables
หรือ iptables-มรดก
เพื่อทำเครื่องหมายแพ็คเก็ตไปยังเส้นทาง
BTW ฉันมีกฎ iptables มากมายที่ใช้งานได้ดี ดังนั้นมันจึงดูเหมือนไม่ใช่ปัญหาของ iptables
iptables-มรดกบันทึก
# สร้างโดย iptables-save v1.8.7 เมื่อวันอาทิตย์ที่ 23 มกราคม 22:35:06 น. 2565
* แหลกเหลว
: ยอมรับ [41:5019]
: ยอมรับอินพุต [41:5019]
:ส่งต่อ ยอมรับ [0:0]
: ยอมรับเอาต์พุต [44:4752]
:หลังยอมรับ [44:4752]
-A OUTPUT -d 192.168.0.0/16 -j ผลตอบแทน
-A OUTPUT -d 172.16.0.0/12 -j ผลตอบแทน
-A OUTPUT -d 10.0.0.0/8 -j ผลตอบแทน
-A OUTPUT -d 34.117.59.81/32 -j MARK --set-xmark 0x3/0xffffffff
ให้สัญญา
# เสร็จสิ้นเมื่อ อา. 23 ม.ค. 22:35:06 น. 2565
# สร้างโดย iptables-save v1.8.7 เมื่อวันอาทิตย์ที่ 23 มกราคม 22:35:06 น. 2565
*กรอง
:อินพุตลดลง [19:7746]
:ทิ้งไปข้างหน้า [0:0]
: ยอมรับเอาต์พุต [846:62420]
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --สถานะที่เกี่ยวข้อง,ESTABLISHED -j ACCEPT
-A อินพุต -i lo -j ยอมรับ
-A อินพุต -p icmp -j ยอมรับ
-A INPUT -p udp -m udp --dport 500 -j ยอมรับ
-A อินพุต -p esp -j ยอมรับ
-A อินพุต -p อา -j ยอมรับ
-อินพุต -p tcp -m tcp --dport 22 -j ยอมรับ
-อินพุต -s 192.168.0.0/16 -p tcp -m tcp --dport 3128 -j ยอมรับ
-อินพุต -s 172.16.0.0/12 -p tcp -m tcp --dport 3128 -j ยอมรับ
-อินพุต -s 10.0.0.0/8 -p tcp -m tcp --dport 3128 -j ยอมรับ
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -m state --สถานะที่เกี่ยวข้อง,ESTABLISHED -j ยอมรับ
-A ไปข้างหน้า -s 192.168.0.0/16 -d 10.0.6.0/24 -j ยอมรับ
-A ไปข้างหน้า -s 10.0.6.0/24 -d 192.168.0.0/16 -j ยอมรับ
ให้สัญญา
# เสร็จสิ้นเมื่อ อา. 23 ม.ค. 22:35:06 น. 2565