Score:0

Wireguard ไม่ทำงานกับ enpoint ที่รวมอยู่ใน AllowedIps

ธง cn

ฉันใช้งาน wireguard enpoint เป็นคอนเทนเนอร์นักเทียบท่าบนเซิร์ฟเวอร์ของฉันโดยมีไคลเอ็นต์ Roadwarrior เชื่อมต่อผ่าน LTE:

ไดอะแกรมเครือข่าย wireguard

ที่อยู่เซิร์ฟเวอร์จริงคือ IP สาธารณะแบบคงที่ การกำหนดค่าไคลเอ็นต์เป็นดังนี้ (ไม่รวมส่วนที่ไม่เกี่ยวข้อง):

[อินเตอร์เฟซ]
ที่อยู่ = 10.254.99.2

[เพียร์]
Ips ที่อนุญาต = 10.254.99.1/32
จุดสิ้นสุด = 192.168.5.55

สิ่งนี้ใช้ได้ดีถ้าฉัน ping ลูกค้าจากภายในคอนเทนเนอร์นักเทียบท่า แต่เนื่องจากฉันต้องการเข้าถึงไคลเอนต์จากโฮสต์นักเทียบท่าด้วย ฉันจึงเพิ่มเส้นทางบนเซิร์ฟเวอร์:

เส้นทาง ip เพิ่ม 10.254.99.0/24 ผ่าน 172.17.0.2 dev docker0 src 192.168.5.55

ดังนั้นฉันจึงเพิ่ม src ที่อยู่ในรายการ AllowedIps บนเซิร์ฟเวอร์:

[เพียร์]
AllowedIps = 10.254.99.1/32, 192.168.5.55/32

และด้วยสิ่งนี้หยุดทำงาน ฉันไม่สามารถ ping ลูกค้าได้ ทั้งจากเซิร์ฟเวอร์หรือจากภายในคอนเทนเนอร์อีกต่อไป หากฉันอนุญาต Ips ทั้งหมดบนไคลเอ็นต์แทน ทุกอย่างจะทำงานตามที่คาดไว้:

[เพียร์]
AllowedIps = 0.0.0.0/0

แต่ฉันไม่ต้องการกำหนดเส้นทางการจราจรทั้งหมดผ่านอุโมงค์ วิธีที่เหมาะสมในการทำเช่นนี้คืออะไร?

A.B avatar
cl flag
A.B
หลายประเด็นพร้อมกัน `ปลายทาง = 192.168.5.55`หมายความว่าคุณกำลังพยายามขุดอุโมงค์ 192.168.5.55 ภายในอุโมงค์ที่ห่อหุ้มภายใน 192.168.5.55 ใช่หรือไม่
cn flag
ฉันไม่ได้ตั้งใจ แต่ฉันเดาว่านั่นคือสิ่งที่ฉันทำ ฉันต้องการอนุญาตการรับส่งข้อมูลที่มาจาก 192.168.5.55 ถึง wg เท่านั้น ไม่แน่ใจว่าเหตุใดจึงใช้งานได้กับ 0.0.0.0/0 ใน IP ที่อนุญาต
Score:2
ธง cn

คุณไม่สามารถใช้ที่อยู่เดียวกันในไคลเอนต์ได้ จุดสิ้นสุด และ IP ที่อนุญาต การตั้งค่า*. จุดสิ้นสุด ควรเป็นที่อยู่ของเซิร์ฟเวอร์ ข้างนอก อุโมงค์ และ IP ที่อนุญาต ควรรวมที่อยู่ทั้งหมดที่คุณต้องการเข้าถึง ข้างใน อุโมงค์

ในการแก้ไขให้กำจัด src การตั้งค่าบนเส้นทางที่คุณเพิ่มไปยังเซิร์ฟเวอร์ เพื่อให้เส้นทางนั้นใช้ที่อยู่ของเซิร์ฟเวอร์เท่านั้น นักเทียบท่า0 อินเตอร์เฟซ:

เส้นทาง ip เพิ่ม 10.254.99.0/24 ผ่าน 172.17.0.2 dev docker0

จากนั้นเปลี่ยนไคลเอนต์ WireGuard IP ที่อนุญาต การตั้งค่าเพื่อรวมที่อยู่ของเซิร์ฟเวอร์ นักเทียบท่า0 อินเตอร์เฟซ (172.17.0.1):

AllowedIps = 10.254.99.1/32, 172.17.0.1/32

เซิร์ฟเวอร์ของคุณจะใช้งาน นักเทียบท่า0 ที่อยู่อินเทอร์เฟซ (172.17.0.1) เป็นแหล่งที่มาของแพ็กเก็ตที่ส่งผ่านเครือข่าย WireGuard ของคุณ


อย่างไรก็ตาม แทนที่จะเพิ่มเลเยอร์พิเศษของการกำหนดเส้นทางบนเซิร์ฟเวอร์ของคุณ สิ่งที่ง่ายที่สุดที่ต้องทำคือการเรียกใช้คอนเทนเนอร์ WireGuard ในโหมดเครือข่าย "โฮสต์" (โดยใช้ --เครือข่าย=โฮสต์ ปักธงด้วย เรียกใช้นักเทียบท่าหรือ network_mode: โฮสต์ ตั้งค่าด้วย นักเทียบท่าเขียน).นั่นจะทำให้คอนเทนเนอร์ของ WireGuard เปิดเผย wg0 เชื่อมต่อกับโฮสต์โดยตรง คุณจึงไม่ต้องการกฎการกำหนดเส้นทางเพิ่มเติมบนเซิร์ฟเวอร์ และคุณไม่จำเป็นต้องเพิ่ม IP ที่อนุญาต ให้กับลูกค้า

ในกรณีนั้น เซิร์ฟเวอร์จะใช้อินเตอร์เฟสของ WireGuard เอง 10.254.99.1 ที่อยู่เป็นแหล่งที่มาของแพ็กเก็ตที่ส่งผ่านเครือข่าย WireGuard ของคุณ


* เว้นแต่คุณจะตั้งค่ากฎการกำหนดเส้นทาง/การกรองแพ็กเก็ตแฟนซีบนไคลเอ็นต์ของคุณ แทนที่จะใช้ค่าเริ่มต้นที่ไคลเอ็นต์ WireGuard ตั้งค่าให้คุณ

us flag
"คุณไม่สามารถใช้ที่อยู่เดียวกันในการตั้งค่า Endpoint และ AllowedIPs ของไคลเอ็นต์" เหตุใดจึงใช้งานได้เมื่อ AllowedIPs=0.0.0.0/0 CIDR นั้นครอบคลุมจุดสิ้นสุด
cn flag
`AllowedIPs = 0.0.0.0/0` ใช้งานได้เนื่องจากไคลเอนต์ WireGuard กรณีพิเศษ `/0` เพื่อตั้งค่ากฎการกำหนดเส้นทาง/การกรองแพ็กเก็ตแฟนซีสำหรับคุณ เริ่มที่นี่เพื่อดูคำอธิบายว่า wg-quick จัดการกับสิ่งนี้บน Linux ได้อย่างไร: https://stackoverflow.com/a/70827884/149050

โพสต์คำตอบ

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