Score:0

ส่งการตอบกลับผ่านอุปกรณ์เดียวกันสำหรับการเชื่อมต่อที่เข้ามาผ่าน Wireguard

ธง us

ฉันมีเซิร์ฟเวอร์ แลนเซิร์ฟเวอร์ ทำงานใน LAN ส่วนตัวของฉันที่เชื่อมต่อกับเซิร์ฟเวอร์สาธารณะ เซิร์ฟเวอร์สาธารณะ โดยใช้ไวร์การ์ด เซิร์ฟเวอร์สาธารณะ ส่งต่อการเชื่อมต่อ TCP ไปยังบางพอร์ตไปที่ แลนเซิร์ฟเวอร์ ผ่านการเชื่อมต่อ Wireguard โดยใช้ iptables ดีเอ็นเอท กฎ.

บน แลนเซิร์ฟเวอร์, Wireguard ได้รับการตั้งค่าเป็นการเชื่อมต่อ NetworkManager กำลังกำหนดเส้นทางการรับส่งข้อมูลทางอินเทอร์เน็ตทั้งหมดผ่าน Wireguard โดยใช้ IP ที่อนุญาต = 0.0.0.0/0, ::/0. สิ่งนี้ทำให้กฎ ip ต่อไปนี้ถูกตั้งค่า แลนเซิร์ฟเวอร์:

[root@lanserver ~]# แสดงกฎไอพี
0: จากการค้นหาทั้งหมดในท้องถิ่น
31100: จากการค้นหาหลักทั้งหมด suppress_prefixlength 0
31101: ไม่ได้มาจากการค้นหา fwmark 0xcb2e ทั้งหมด 52014
32766: จากหลักการค้นหาทั้งหมด
32767: จากค่าเริ่มต้นการค้นหาทั้งหมด
[root@lanserver ~]# ตารางแสดงเส้นทาง ip 52014
เริ่มต้น dev wg0 proto static scope link metric link metric 50

การตั้งค่านี้ทำงานได้อย่างถูกต้อง การเชื่อมต่อ TCP ขาเข้าไปยัง เซิร์ฟเวอร์สาธารณะ ได้รับการส่งต่อไปยัง แลนเซิร์ฟเวอร์ โดยใช้กฎ iptables คำตอบจะถูกส่งกลับมาทาง เซิร์ฟเวอร์สาธารณะ เพราะกฎไอพี 31101 ตรงกับมัน

มีข้อยกเว้นอย่างหนึ่ง: เมื่อฉันพยายามเปิดการเชื่อมต่อ TCP เซิร์ฟเวอร์สาธารณะ ใช้ IPv6 จากคอมพิวเตอร์ส่วนตัวของฉัน พีซีซึ่งอยู่ใน LAN ส่วนตัวของฉันด้วย มันใช้งานไม่ได้ ปัญหาน่าจะเป็นที่ทั้งสอง พีซี และ แลนเซิร์ฟเวอร์ มีที่อยู่ IPv6 ในซับเน็ตสาธารณะเดียวกัน เซิร์ฟเวอร์สาธารณะ ส่งต่อการเชื่อมต่อไปยัง แลนเซิร์ฟเวอร์ สำเร็จ แต่การตอบสนองไม่ได้กำหนดเส้นทางกลับผ่านการเชื่อมต่อ Wireguard แต่ส่งตรงไปยัง พีซี เนื่องจากกฎ ip 31100.

ฉันจะแน่ใจได้อย่างไรว่าการตอบสนองทั้งหมดสำหรับการเชื่อมต่อที่เข้ามาผ่านอินเตอร์เฟส Wireguard เปิดอยู่ แลนเซิร์ฟเวอร์ จะถูกส่งกลับผ่านอินเตอร์เฟส Wireguard โดยไม่คำนึงว่า IP ต้นทางจะอยู่ในเครือข่ายย่อยหรือไม่

ฉันสามารถคิดวิธีแก้ปัญหาในทิศทางต่อไปนี้:

  • ปิดใช้งาน IPv6 บน แลนเซิร์ฟเวอร์ทำให้ไม่ได้อยู่ใน subnet เดียวกับ พีซี. ไม่ใช่วิธีแก้ปัญหาที่ดีมาก
  • ใช้ สแนท บน เซิร์ฟเวอร์สาธารณะ สำหรับการเดินหน้าท่าเรือ ไม่ใช่วิธีแก้ปัญหาที่ยอมรับได้ เนื่องจากบริการบางอย่างที่อยู่เบื้องหลังพอร์ตที่ส่งต่อจำเป็นต้องทราบ IP ต้นทางที่แท้จริง
  • กล่าวถึงซับเน็ต IPv6 ในเครื่องอย่างชัดเจนใน IP ที่อนุญาต ของเพียร์การ์ด สิ่งนี้ใช้ไม่ได้เนื่องจากซับเน็ต IPv6 เปลี่ยนแปลงทุก 24 ชั่วโมง
  • เพิ่มกฎ IP แบบกำหนดเองที่ตรงกับการเชื่อมต่อทั้งหมดที่เข้ามา wg0 และใช้ตารางเส้นทาง 52014 สำหรับพวกเขา. ฉันไม่แน่ใจว่าจะระบุกฎดังกล่าวอย่างไร นอกจากนี้ ปัญหาคือหมายเลขของตารางเส้นทางเปลี่ยนไปทุกครั้งที่เริ่มการเชื่อมต่อ Wireguard ใหม่ สถานที่ที่เหมาะสมในการสร้างกฎดังกล่าวน่าจะเป็น โพสต์อัพ สคริปต์ แต่ดูเหมือนว่า NetworkManager จะไม่อนุญาตให้ระบุ
Score:0
ธง us

หลังจากทดลองใช้ตัวเลือกต่างๆ ฉันตัดสินใจหยุดใช้ NetworkManager และใช้ wg-quick โดยตรงแทน บน Fedora Server มันค่อนข้างง่ายและฉันแค่ต้องลบการเชื่อมต่อ NetworkManager โดยใช้ nmcli คอนเดล wg0 และเปิดใช้บริการ wg-quick โดยใช้ เปิดใช้งาน systemctl -- ตอนนี้ wg-quick@wg0 (ซึ่งอ่านการกำหนดค่าจาก /etc/wireguard/wg0.conf). การเปลี่ยนมาใช้ wg-quick มีข้อดีดังต่อไปนี้:

  • ฉันสามารถระบุที่กำหนดเอง โพสต์อัพ คำสั่งเพื่อกำหนดการตั้งค่าการกำหนดเส้นทางที่ซับซ้อนมากขึ้น
  • หมายเลขตารางเส้นทาง Wireguard ดูเหมือนจะคงที่ 51820แม้ว่าฉันจะไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้ สิ่งนี้ทำให้ง่ายต่อการตั้งค่ากฎ ip ที่กำหนดเอง

จากนั้นฉันก็ใช้ โพสต์อัพ สั่งเข้ามา wg0.conf เพื่อตั้งค่ากฎ ip เพิ่มเติมที่จะทำให้แน่ใจว่าการรับส่งข้อมูลของ Wireguard จะตอบสนองผ่าน Wireguard เช่นกัน มีสองทางเลือกในการบรรลุเป้าหมายนี้:

ตัวเลือกที่ 1: การจับคู่ IP ต้นทาง

กฎ ip ตรงกับแพ็คเกจ Wireguard ตามที่อยู่ IP ต้นทาง (ซึ่งตั้งค่าโดยอัตโนมัติเป็นที่อยู่ IP ที่คำขอเข้ามาในตอนแรก):

[อินเตอร์เฟซ]
ที่อยู่ = 10.139.192.4/24
ที่อยู่ = fd52:30a4:f9e7:647a::4/64
PostUp = กฎ ip -4 เพิ่มจาก 10.139.192.4 ค้นหา 51820
PreDown = ip -4 กฎ del จาก 10.139.192.4 ค้นหา 51820
PostUp = กฎ ip -6 เพิ่มจาก fd52:30a4:f9e7:647a::4 ค้นหา 51820
PreDown = ip -6 กฎ del จาก fd52:30a4:f9e7:647a::4 ค้นหา 51820

ตัวเลือกที่ 2: fwmark

กฎ iptables บางข้อได้รับการกำหนดค่าให้ตั้งค่า เครื่องหมาย บนบรรจุภัณฑ์ที่ผ่านเข้ามา wg0:

iptables -t mangle -A INPUT -j CONNMARK -i wg0 --set-mark 1
ip6tables -t mangle -A INPUT -j CONNMARK -i wg0 --set-mark 1
iptables -t mangle -A OUTPUT -j CONNMARK -m connmark --mark 1 --restore-mark
ip6tables -t mangle -A OUTPUT -j CONNMARK -m connmark --mark 1 --restore-mark

แล้วนี้ เครื่องหมาย จับคู่ตามกฎ IP:

กฎ PostUp = ip -4 เพิ่ม fwmark 1 ค้นหา 51820
PreDown = กฎ ip -4 del fwmark 1 ค้นหา 51820
กฎ PostUp = ip -6 เพิ่ม fwmark 1 ค้นหา 51820
PreDown = กฎ ip -6 del fwmark 1 ค้นหา 51820

สามารถดูรายละเอียดเพิ่มเติมเกี่ยวกับโซลูชันนี้ได้ ที่นี่.

โพสต์คำตอบ

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