Score:1

Wireguard ใช้ไคลเอนต์หนึ่งเป็นเกตเวย์ของอีกเครื่องหนึ่ง

ธง cn

ฉันมีการตั้งค่า Wireguard VPN ที่มีลักษณะดังนี้:

P1 ---- S ---- P2 --- อินเทอร์เน็ต

ที่อยู่ IP: P1 = 10.200.1.5 S = 10.200.1.1 P2 = 10.200.1.3

ฉันกำลังเปลี่ยนเส้นทางการรับส่งข้อมูลทั้งหมดของ P1 เป็น S โดยระบุ อนุญาตให้ Ips = 0.0.0.0/0 ในการกำหนดค่าไคลเอ็นต์ของ P1

ตอนนี้ฉันต้องการเส้นทาง S ที่รับส่งข้อมูลไปยัง P2 ฉันลองทำสิ่งต่อไปนี้บน S:

 กฎ ip เพิ่มจาก 10.200.1.5 ค้นหา 200
 เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.200.1.3 dev wg0 ตาราง 200
 sysctl -w net.ipv4.ip_forward=1

อย่างไรก็ตาม เมื่อฉันเรียกใช้ tcpdump บน P2 ฉันไม่เห็นทราฟฟิกใดๆ เข้ามา นอกจากนี้ P1 ไม่พบการเชื่อมต่ออินเทอร์เน็ตใดๆ

แก้ไข: ทดสอบตารางเส้นทางที่กำหนดเองบน S ผ่าน

เส้นทาง ip รับ 8.8.8.8 จาก 10.200.1.5 iif wg0

ให้การตอบสนองดังต่อไปนี้

8.8.8.8 จาก 10.200.1.5 ผ่าน 10.200.1.3 dev wg0 ตาราง 200
    แคช iif wg0

ซึ่งดูเหมือนจะดีอย่างไรก็ตาม

tcpdump -nn -i wg0

บน แสดงว่าไม่สามารถเข้าถึงได้ตามด้านล่าง

09:58:22.207251 IP 10.200.1.5.9134 > 8.8.8.8.53: 36555+ A? play.googleapis.com (37)
09:58:22.207270 IP 10.200.1.1 > 10.200.1.5: โฮสต์ ICMP 8.8.8.8 ไม่สามารถเข้าถึงได้ ความยาว 73
djdomi avatar
za flag
ทำไมคุณไม่ให้ p1 เชื่อมต่อโดยตรง
cn flag
p1 อยู่ในเครือข่ายภายในและไม่สามารถเข้าถึงอินเทอร์เน็ตได้โดยตรง
djdomi avatar
za flag
เครือข่ายของคุณไม่ชัดเจน โปรดแจ้งให้เราทราบเพิ่มเติม
cn flag
สิ่งที่คุณมีอยู่ตอนนี้ดูดีแล้ว -- ตรวจสอบให้แน่ใจว่าคุณตั้งค่า `AllowedIPs = 0.0.0.0/0` ในการกำหนดค่า `[Peer]` ของ S สำหรับ P2 ด้วย และให้คุณรวม `10.200.1.5` ในการกำหนดค่า `AllowedIPs` ของ P2 `[Peer]` สำหรับ S
cn flag
เมื่อฉันใส่ 0.0.0.0/0 ลงในการกำหนดค่าของ P2 บน S ฉันไม่สามารถ SSH เป็น S ได้อีกต่อไปเนื่องจาก (ฉันเชื่อว่า) มันจะขัดขวางการรับส่งข้อมูลทั้งหมดและส่งไปยัง P2 ใช่ไหม
Score:1
ธง cl
A.B

WireGuard เป็นอินเทอร์เฟซเลเยอร์ 3 เช่นที่ระบุ ผ่าน 10.200.1.3 ไม่มีผล เนื่องจากจะใช้สำหรับโปรโตคอลเลเยอร์ลิงก์ (โดยทั่วไปคือ ARP) เพื่อแก้ไขที่อยู่เลเยอร์ 2 ซึ่งไม่มีอยู่ที่นี่

ดังนั้น

เส้นทาง ip เพิ่มค่าเริ่มต้นผ่าน 10.200.1.3 dev wg0 ตาราง 200

สามารถเขียนใหม่ได้:

เส้นทาง ip เพิ่ม dev wg0 ตารางเริ่มต้น 200

สิ่งนี้ช่วยระลึกไว้เสมอว่าส่วนนี้ไม่ใช่ส่วนที่เลือกแพ็กเก็ตเพื่อไปที่ P1 หรือ P2: WireGuard ก็มีการกำหนดเส้นทางภายในของตัวเองเช่นกัน: การกำหนดเส้นทาง cryptokeyซึ่งทำได้โดยการตั้งค่าให้ถูกต้อง IP ที่อนุญาต ในการกำหนดค่าของเพื่อนแต่ละคน มีข้อจำกัดที่สำคัญประการหนึ่ง: ตรงกันข้ามกับการกำหนดเส้นทางมาตรฐาน IP ที่อนุญาต ไม่รองรับที่อยู่ทับซ้อนกัน หากพยายามทำสิ่งนี้ (เช่น การตั้งค่าบนเซิร์ฟเวอร์ S IP ที่อนุญาต = 0.0.0.0/0 สำหรับเพียร์ P2) สิ่งนี้จะลบที่อยู่ที่ขัดแย้งกันใน (ที่) เพียร์อื่นโดยอัตโนมัติ (เช่น การลบ IP ที่อนุญาต = 10.200.1.5 จากเพื่อน P1 เพราะ 0.0.0.0/0 ทับซ้อนสิ่งอื่นใด) และการเชื่อมต่อจะมีปัญหา (S ไม่ได้เข้ารหัสเส้นทางอะไรไปยัง P1: ไม่มีการเชื่อมต่ออีกต่อไป)

มีสองวิธีในการแก้ปัญหานี้:

  • ใช้อินเทอร์เฟซ WireGuard สองแบบที่แตกต่างกัน

    ข้อจำกัดก่อนหน้านี้คือต่ออินเตอร์เฟส WireGuard การใช้อินเทอร์เฟซที่สองจะหลีกเลี่ยงการปะทะดังกล่าว แต่จะทำให้การกำหนดเส้นทางซับซ้อนขึ้น อาจต้องใช้หลายรายการในตารางเส้นทาง 200 และ/หรือตารางหลัก: หนึ่งรายการสำหรับอินเทอร์เฟซด้านซ้ายและหนึ่งรายการ (ค่าเริ่มต้น) สำหรับอินเทอร์เฟซด้านขวา

  • ทำการลบชุดของช่วงที่ขัดแย้งกัน

    อาจมีเครื่องมือที่สามารถคำนวณความแตกต่างระหว่างชุด 0.0.0.0/0 และชุด 10.200.1.5 ได้ แต่ฉันไม่รู้จัก ยังมีเครื่องมือที่มีประโยชน์ที่เรียกว่า ตาข่าย (หน้าแรก: https://github.com/tlby/netmask) ที่จะช่วยโดยการแปลงช่วงเป็นชุดเน็ตมาสก์ที่เล็กที่สุด:

    $ netmask 0.0.0.0:9.255.255.255 10.200.1.3 11.0.0.0:255.255.255.255
            0.0.0.0/5
            8.0.0.0/7
         10.200.1.3/32
           11.0.0.0/8
           12.0.0.0/6
           16.0.0.0/4
           32.0.0.0/3
           64.0.0.0/2
          128.0.0.0/1
    

    ค่าเหล่านี้คือค่า (เพื่อคั่นด้วยเครื่องหมายจุลภาค) ที่ควรใช้บนเซิร์ฟเวอร์ S สำหรับเพียร์ P2 IP ที่อนุญาต ดังนั้นการกำหนดเส้นทางคีย์เข้ารหัสจะกำหนดเส้นทางทุกอย่างที่นั่น ยกเว้น 10.0.0.0/8 ซึ่งมีเพียง 10.200.1.3 เท่านั้นที่จะถูกกำหนดไว้ที่ฝั่งของ P2 ทำให้เหลือ 10.200.1.5 ที่กำหนดไว้แล้วที่ฝั่งของ P1 เหมือนเดิม: ไม่มีการทับซ้อนกันอีกต่อไป แพ็คเก็ตที่ส่งโดย P1 ไปยังอินเทอร์เน็ตควรดำเนินการต่อไปยัง P2 เพื่อกำหนดเส้นทางเพิ่มเติม

โพสต์คำตอบ

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