iptables ตั้งค่า connmark แต่กฎ ip ไม่ตรงกัน


0

ฉันกำลังพยายามตั้งค่า Ubuntu 17.10 VM ให้ใช้การเชื่อมต่อ VPN หลายรายการและเพื่อโหลดการเชื่อมต่อที่สมดุลระหว่างสิ่งเหล่านั้น ฉันพยายามทำเช่นนั้นโดยการเรียกใช้ไคลเอนต์ openvpn หลายตัวและพยายามทำเครื่องหมายการเชื่อมต่อด้วย iptables / connmark และใช้โหมดสุ่มเพื่อทำเครื่องหมายการเชื่อมต่อที่แตกต่างด้วยค่าต่าง ๆ จากนั้นจับคู่เหล่านี้กับตารางเส้นทาง VPN ที่แตกต่างกัน อย่างไรก็ตามฉันไม่ประสบความสำเร็จดังนั้นฉันจึงพยายามทำให้สถานการณ์ง่ายขึ้นเพื่อพยายามทำความเข้าใจกับสิ่งที่เกิดขึ้น

ฉันลดสถานการณ์ลงเป็นการเชื่อมต่อ VPN เดียวโดยใช้ตรรกะการเราต์ทั้งหมดในตารางการเราต์เฉพาะและพยายามทำเครื่องหมายแพ็คเก็ตทั้งหมดเพื่อใช้ตารางเส้นทางนั้น

ถ้าฉันบังคับให้ทราฟฟิกทั้งหมดใช้ตารางนั้นมันก็ใช้ได้ หากฉันพยายามทำเครื่องหมายแพ็คเก็ตทั้งหมดแล้วจับคู่เครื่องหมายนั้นเพื่อใช้ตารางมันจะไม่ทำงาน

นี่คือกฎที่ใช้งานได้:

0: จากการค้นหาในท้องถิ่นทั้งหมด
10: จากการค้นหา VPN2 ทั้งหมด
32766: จากการค้นหาหลักทั้งหมด
32767: จากค่าเริ่มต้นของการค้นหาทั้งหมด

และนี่คือกฎที่ใช้งานไม่ได้:

0: จากการค้นหาในท้องถิ่นทั้งหมด
10: จากทุกการค้นหา fwmark 0x14 VPN2
32766: จากการค้นหาหลักทั้งหมด
32767: จากค่าเริ่มต้นของการค้นหาทั้งหมด

และนี่คือตาราง mangle iptables ของฉันที่ควรทำเครื่องหมายทุกอย่าง:

# iptables -nvL -t mangle
การเตรียมโซ่ (นโยบายการยอมรับ 6785 แพ็คเก็ต 464K ไบต์)
 pkts ไบต์เป้าหมาย prot เลือกไม่ใช้ในปลายทางปลายทาง
 8013 545K CONNMARK ทั้งหมด - * * 0.0.0.0/0 0.0.0.0/0 CONNMARK เรียกคืน
 7981 543K MARK ทั้งหมด - * * 0.0.0.0/0 0.0.0.0/0 เครื่องหมายตั้งค่า 0x14
 7958 541K CONNMARK ทั้งหมด - * * 0.0.0.0/0 0.0.0.0/0 CONNMARK บันทึก

Chain INPUT (แพ็คเก็ตนโยบายยอมรับ 6773, 463K ไบต์)
 pkts ไบต์เป้าหมาย prot เลือกไม่ใช้ในปลายทางปลายทาง

Chain FORWARD (นโยบายยอมรับ 0 แพ็กเก็ต 0 ไบต์)
 pkts ไบต์เป้าหมาย prot เลือกไม่ใช้ในปลายทางปลายทาง

Chain OUTPUT (แพ็คเก็ตนโยบายยอมรับ 4382, 1132K ไบต์)
 pkts ไบต์เป้าหมาย prot เลือกไม่ใช้ในปลายทางปลายทาง
 4636 1159K CONNMARK ทั้งหมด - * * 0.0.0.0/0 0.0.0.0/0 CONNMARK เรียกคืน
 4516 1146K MARK all - * * 0.0.0.0/0 0.0.0.0/0 MARK ตั้งค่า 0x14
 4382 1132K CONNMARK ทั้งหมด - * * 0.0.0.0/0 0.0.0.0/0 CONNMARK บันทึก

การโพสต์ลูกโซ่ (นโยบายการยอมรับ 4151 แพ็คเก็ต, 1116K ไบต์)
 pkts ไบต์เป้าหมาย prot เลือกไม่ใช้ในปลายทางปลายทาง

ฉันเข้าใจว่ากฎของฉันนั้นไร้ประโยชน์นิดหน่อยที่นี่ (การคืนค่าก่อนที่จะทำเครื่องหมายต่อไป) แต่ฉันเพิ่งพยายามทำให้เสร็จเพื่อทำเครื่องหมายทุกอย่างเพื่อให้เข้าใจว่าปัญหาอยู่ตรงไหน

อย่างที่ฉันพูดถ้าฉันมีทุกอย่างใช้ตารางเส้นทาง VPN2 มันใช้งานได้ดีและฉันสามารถเห็นการเชื่อมต่อที่มีเครื่องหมาย20( 0x14) โดยใช้conntrack -L

แต่ถ้าผมพยายามที่จะมีการกำหนดเส้นทางบนพื้นฐานของเครื่องหมายก็ไม่ได้ทำงานและความพยายามในการเชื่อมต่อไม่ได้มองเห็นได้ในconntrack -Lแม้ว่าฉันดูสถานะSYN_SENT netstatฉันเห็นด้วยว่า IP ต้นทางไม่ใช่อินเทอร์เฟซ VPN tun ของฉันดังนั้นจึงไม่มีการใช้ตาราง

คำแนะนำในการแก้ไขข้อบกพร่องนี้ชื่นชมอย่างมาก

ขอบคุณมาก


จากสิ่งที่ฉันเข้าใจ: เมื่อ mangle ถูกใช้ในเอาต์พุตมันจะทริกเกอร์การเปลี่ยนเส้นทาง นี่คือการตรวจสอบเส้นทางครั้งที่ 2 ที่จะใช้กฎ fwmark แต่ IP ได้ถูกเลือกไว้แล้วในการตรวจสอบเส้นทางครั้งที่ 1 คุณสามารถลองทำ nat ได้เช่นกัน อย่างไรก็ตามคุณควรมีสมาธิในการทดสอบการกำหนดล่วงหน้า (จาก vm อื่นหรือเนมสเปซเครือข่าย) ก่อนการทดสอบเอาต์พุตเมื่อเอาต์พุตไม่ทำงานตามที่คาดไว้ กระแสแพ็คเก็ตใน Netfilter และระบบเครือข่ายทั่วไป
AB

ฉันยังไม่ได้คิดออกมาอย่างสมบูรณ์ แต่ฉันคิดว่าคุณทำให้ฉันถูกทางด้วย 'การเปลี่ยนเส้นทาง' ที่คุณพูดถึง ฉันพบโพสต์นี้และฉันคิดว่าตารางตัวกรองของฉันกำลังกรองแพ็กเก็ตก่อนที่การเปลี่ยนเส้นทางจะเกิดขึ้น: linuxquestions.org/questions/linux-networking-3/…
Danny Trigo

ขอบคุณมาก ๆ ตอนนี้ฉันได้รับการเชื่อมต่อโดยการสุ่มส่งอินเตอร์เฟซที่แตกต่างกันโดยการลบตัวกรองทั้งหมดของฉันชั่วคราว (ไม่แน่ใจว่าฉันจะเพิ่มสิ่งเหล่านั้นอีกครั้ง) เพิ่มกฎ SNAT ใน nat / output chain และการตั้งค่านี้เป็น 2 ของแพ็กเก็ตที่ส่งคืน: / proc / sys / net / ipv4 / conf / tun1 / rp_filter ขอขอบคุณอีกครั้ง
Danny Trigo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.