Score:2

ใน Linux จะเพิ่มเส้นทางไปยังคำนำหน้าผ่านอุปกรณ์เฉพาะที่มีปลายทางบางอย่างในคำนำหน้านั้นผ่านเส้นทางเริ่มต้นได้อย่างไร

ธง ke

ขณะนี้ฉันกำลังจัดการกับ VPN ซึ่งจุดสิ้นสุดการเชื่อมต่ออยู่ภายในเครือข่ายย่อยซึ่งคำนำหน้าจะถูกอุโมงค์ผ่าน VPN นั้น

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

หากปัญหาเกี่ยวกับการกรอง ใน Linux สามารถใช้สิ่งนี้ได้โดยใช้ a ipset ตั้งค่าเช่น

ipset สร้างแฮช MyVPN:net
ipset เพิ่ม MyVPN $MYVPNNET/$MYVPNMASK
ipset เพิ่มชื่อ MyVPN $MYVPNENDPOINT

อย่างไรก็ตาม ipsets ดังกล่าวสามารถใช้ได้ภายใน netfilter เท่านั้น

ตอนนี้คำถามของฉันคือ ฉันจะตั้งค่าสิ่งที่เทียบเท่าโดยใช้ Linux Advanced IP Routing ได้อย่างไร เช่น เส้นทางไอพี ตระกูลคำสั่ง?

djdomi avatar
za flag
คำถามที่ต้องการความช่วยเหลือในการติดตั้ง การกำหนดค่า หรือการวินิจฉัยต้องรวมถึงสถานะสิ้นสุดที่ต้องการ ปัญหาหรือข้อผิดพลาดเฉพาะ ข้อมูลที่เพียงพอเกี่ยวกับการกำหนดค่าและสภาพแวดล้อมเพื่อทำซ้ำ และพยายามแก้ไข คำถามที่ไม่มีคำชี้แจงปัญหาที่ชัดเจนไม่เป็นประโยชน์สำหรับผู้อ่านรายอื่นและไม่น่าจะได้รับคำตอบที่ดี
datenwolf avatar
ke flag
@djdomi: นี่ไม่ใช่การขอความช่วยเหลือสำหรับการกำหนดค่าเฉพาะ ฉันกำลังมองหาวิธีกำหนดเส้นทาง (ในลักษณะทั่วไป) โดยการลบชุดย่อยบางอย่างออกจากกฎตารางเส้นทาง นี่คือสิ่งที่สามารถนำไปใช้กับทุกสถานการณ์
Score:2
ธง cn

เส้นทางคำนวณด้วยวิธีแรกที่เฉพาะเจาะจงมากที่สุด ดังนั้นหากซับเน็ตขนาดเล็กของคุณต้องการเส้นทางเริ่มต้น ให้ใส่เส้นทางนั้นก่อนแล้วจึงเพิ่มเส้นทางอื่น:

เกตเวย์เริ่มต้นในตัวอย่างนี้คือ 10.0.0.1 VPN คือ 10.0.0.2

เส้นทาง ip เพิ่ม 10.0.1.0/24 ผ่าน 10.0.0.1
เส้นทาง ip เพิ่ม 10.2.0.0/16 ผ่าน 10.0.0.2
เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.0.0.1

จะกำหนดเส้นทางการรับส่งข้อมูลไปยังซับเน็ต (10.0.1.0) ผ่านเกตเวย์เริ่มต้น, VPN ผ่าน 10.0.0.2 และการรับส่งข้อมูลเริ่มต้นอื่น ๆ ผ่านเกตเวย์เริ่มต้น

datenwolf avatar
ke flag
ใช่ นี่คือวิธีที่สคริปต์ VPN ส่วนใหญ่ทำ แต่มีปัญหา: การเพิ่มเส้นทางที่แคบผ่านเกตเวย์เฉพาะ การตั้งค่าดังกล่าวไม่สามารถจัดการกับการเปลี่ยนแปลงของเส้นทางเริ่มต้นได้อย่างราบรื่น ตัวอย่างเช่น เมื่อสลับเครือข่ายในสถานการณ์การโรมมิ่ง หรืออาจทำสิ่งง่ายๆ อย่างการเชื่อมต่อแล็ปท็อปของคุณ (เปลี่ยนจาก W-LAN เป็น LAN แบบมีสาย) สิ่งนี้ไม่จำเป็นต้องซับซ้อนเกินไป เนื่องจากหากทำตามที่คุณแนะนำ จะต้องมีการติดตามสถานะเครือข่ายอย่างต่อเนื่อง ตรวจหาว่าต้องเปลี่ยนเส้นทางเฉพาะหรือไม่ และตารางเส้นทางจะถูกปรับ
datenwolf avatar
ke flag
สิ่งที่ฉันกำลังมองหานั้นเทียบเท่ากับ *ipset* `nomatch` เพื่อหลีกเลี่ยงความยุ่งยากทั้งหมด
cn flag
โอเค - ฉันเข้าใจแล้ว! ฉันจะทิ้งคำตอบไว้เพื่อเก็บความคิดเห็นไว้ เนื่องจากเป็นการชี้แจงที่สำคัญ
djdomi avatar
za flag
@shearn89 ย้ำว่าหากมันแก้ปัญหาของคุณได้ คุณต้องยอมรับ ไม่อย่างนั้นเราจะถูกจดจำไปจนสิ้นทศวรรษ...
cn flag
@djdomi ฉันไม่ใช่ OP...
djdomi avatar
za flag
yupp เลื่อนด้านบนไม่พอ @datawolf คุณมีความหมายกับความคิดเห็นของฉัน
datenwolf avatar
ke flag
@djdomi: ดูคำตอบที่ฉันเขียนเกี่ยวกับวิธีการที่ฉันคิดออก ฉันจะทำให้คำตอบนั้นเป็นคำตอบที่ยอมรับได้หลังจากผ่านช่วงผ่อนผันไปแล้ว
Score:2
ธง ke

ตามที่ปรากฎใน Linux คุณสามารถใช้ได้ ipset การจับคู่เพื่อเลือกตารางเส้นทาง ส่วนผสมพิเศษกำลังใช้กฎ netfilter ที่จะจับคู่แพ็กเก็ตขาออกและใช้ fwmark ให้กับพวกเขา ซึ่งสามารถใช้เพื่อเลือกตารางเส้นทางเฉพาะได้ ตารางเส้นทางเฉพาะนี้จะมีเพียงเส้นทางเริ่มต้นเดียวผ่าน VPN

ต่อไปนี้เป็นแนวคิดทั่วไปในสคริปต์ วิธีการตั้งค่า

# เครือข่ายย่อยเพื่อกำหนดเส้นทางผ่าน TUN

DSTNETS=.../...../..

# ไม่รวมปลายทางเหล่านี้จากการกำหนดเส้นทางผ่าน TUN

ยกเว้น=... ...

# อุปกรณ์ TUN ที่จะใช้สำหรับการเชื่อมต่อนี้และพารามิเตอร์ของอุปกรณ์เหล่านั้น โดยปกติแล้ว VPN daemon จะเป็นผู้จัดเตรียมให้

ทุนเดฟ=...
TUNADDR=.../..
ทูนเพียร์=...

# ชื่อสำหรับ ipset ที่ใช้จับคู่ปลายทาง ตามชื่อ TUN

IPSET=${TUNDEV}ipset

# เราต้องการ netfilter fwmark และตาราง iproute2 fwmarks และตารางเป็นค่า 32 บิต จำกัดเฉพาะช่วงจำนวนเต็มที่มีเครื่องหมาย เช่น [0, 2³¹-1] อาจใช้ fwmarks เป็นบิตมาสก์ที่ส่งสัญญาณแฟล็กหลายแฟล็ก ดังนั้นขึ้นอยู่กับความต้องการของเรา ไม่ว่าจะเป็นการตั้งค่าบิตเฉพาะเจาะจง (หรือน้อย) หรือ ค่าที่เฉพาะเจาะจงมากที่จะเปรียบเทียบความเท่าเทียมกัน

FWMARK=0x...
ตาราง=0x...

# สร้าง ipset และเติมด้วยช่วงที่อยู่ IP และซับเน็ตที่จับคู่และไม่เข้ากับ

ipset สร้างแฮช $IPSET:net
สำหรับ d ใน $DSTNETS ; ทำ ipset เพิ่ม $IPSET $d ; เสร็จแล้ว
สำหรับ x ใน $EXCLUDE ; ทำ ipset เพิ่ม $IPSET $x nomatch ; เสร็จแล้ว

# สร้างตารางกฎ iproute2 ใหม่ที่จะใช้สำหรับการค้นหาเส้นทางสำหรับแพ็กเก็ตทั้งหมดที่มีการตั้งค่าตัวเลือก fwmark ของเรา

กฎ ip เพิ่ม fwmark ตาราง $FWMARK $TABLE

# นี่คือจุดที่ความมหัศจรรย์เกิดขึ้น: สร้างกฎ netfilter ที่จะจับคู่แพ็กเก็ตที่มาจากโฮสต์นี้สำหรับปลายทางที่ตรงกับ ipset ที่เราเพิ่งสร้างและทำเครื่องหมายด้วย fwmark ที่เราเลือก เนื่องจากกฎที่เราเพิ่งสร้างขึ้นก่อนหน้านี้ แพ็กเก็ตเหล่านั้นจะถูกกำหนดเส้นทางโดยใช้ตารางเฉพาะนั้น แทนที่จะใช้ตารางส่วนกลาง

iptables -t mangle -A OUTPUT -m set --match-set $IPSET dst -j MARK --set-mark $FWMARK

# เพิ่มกฎ netfilter เพื่อเขียนทับที่อยู่ต้นทางสำหรับแพ็กเก็ตเหล่านี้เนื่องจากเครือข่ายปลายทางอาจปฏิเสธหากไม่ตรงกับช่วงที่อยู่ที่ใช้สำหรับ VPN

iptables -t nat -A POSTROUTING -m set --match-set $IPSET dst -j SNAT --to-source $INTERNAL_IP4_ADDRESS

# ตอนนี้เราสามารถตั้งค่าอุปกรณ์ TUN จริงได้แล้วพูดอย่างเคร่งครัดขั้นตอนเหล่านั้นสามารถทำได้มาก่อน แต่ในช่วงเวลาสั้น ๆ ระหว่างที่ TUN มาถึงและกำหนดกฎการกำหนดเส้นทาง บางแพ็กเก็ตอาจสิ้นสุดในบริเวณขอบรก

ip link ตั้งค่า dev $TUNDEV ขึ้น
ip addr เพิ่ม $TUNADDR เพียร์ $TUNPEER dev $TUNDEV 

# ในที่สุดสร้างเส้นทางเริ่มต้นที่จะผ่าน TUN ในตารางเส้นทางเฉพาะของเรา ซึ่งเนื่องจากกฎ fwmark จะถูกโจมตีโดยแพ็กเก็ตที่จับคู่กับ ipset ของเราเท่านั้น

เส้นทาง ip เพิ่ม dev เริ่มต้น $TUNDEV ตาราง $TABLE

หากต้องการฉีกทุกสิ่ง เพียงทำตามสคริปต์ในสิ่งที่ตรงกันข้าม ลบเนื้อหา; เดอะ ipset เป็นไปได้ ทำลายed ด้วยคำสั่งเดียว

โพสต์คำตอบ

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