สลับจาก OpenVPN เป็น WireGuard เพื่อรวมเครือข่ายเป็นเครือข่าย L2 เดียว

สลับจาก OpenVPN เป็น WireGuard เพื่อรวมเครือข่ายเป็นเครือข่าย L2 เดียว

ฉันอยากจะแบ่งปันประสบการณ์ของฉันในการรวมเครือข่ายในอพาร์ตเมนต์ที่อยู่ห่างไกลทางภูมิศาสตร์สามแห่ง ซึ่งแต่ละแห่งใช้เราเตอร์ OpenWRT เป็นเกตเวย์ให้เป็นเครือข่ายเดียวกันเดียว เมื่อเลือกวิธีการรวมเครือข่ายระหว่าง L3 พร้อมการกำหนดเส้นทางเครือข่ายย่อยและ L2 พร้อมการเชื่อมต่อ เมื่อโหนดเครือข่ายทั้งหมดจะอยู่ในเครือข่ายย่อยเดียวกัน การตั้งค่าจะถูกกำหนดให้กับวิธีที่สอง ซึ่งกำหนดค่าได้ยากกว่า แต่ให้โอกาสที่มากกว่า เนื่องจาก มีการวางแผนการใช้เทคโนโลยีอย่างโปร่งใสในเครือข่ายที่สร้าง Wake-on-Lan และ DLNA

ส่วนที่ 1: ความเป็นมา

ในตอนแรก OpenVPN ได้รับเลือกให้เป็นโปรโตคอลสำหรับการดำเนินงานนี้ เนื่องจากประการแรก สามารถสร้างอุปกรณ์แตะที่สามารถเพิ่มลงในบริดจ์ได้โดยไม่มีปัญหา และประการที่สอง OpenVPN รองรับการทำงานบนโปรโตคอล TCP ซึ่งมีความสำคัญเช่นกัน เนื่องจากไม่มี ของอพาร์ทเมนท์มีที่อยู่ IP เฉพาะ และฉันไม่สามารถใช้ STUN ได้ เนื่องจากผู้ให้บริการของฉันบล็อกการเชื่อมต่อ UDP ขาเข้าจากเครือข่ายของพวกเขาด้วยเหตุผลบางประการ ในขณะที่โปรโตคอล TCP อนุญาตให้ฉันส่งต่อพอร์ตเซิร์ฟเวอร์ VPN ไปยัง VPS ที่เช่าโดยใช้ SSH ใช่ วิธีการนี้ให้ภาระงานจำนวนมาก เนื่องจากข้อมูลถูกเข้ารหัสสองครั้ง แต่ฉันไม่ต้องการแนะนำ VPS เข้าสู่เครือข่ายส่วนตัวของฉัน เนื่องจากยังมีความเสี่ยงที่บุคคลที่สามจะสามารถควบคุมมันได้ ดังนั้น การมีอุปกรณ์ดังกล่าว บนเครือข่ายในบ้านของฉันเป็นสิ่งที่ไม่พึงปรารถนาอย่างยิ่ง และมีการตัดสินใจว่าจะต้องจ่ายค่าความปลอดภัยโดยมีค่าใช้จ่ายจำนวนมาก

ในการส่งต่อพอร์ตบนเราเตอร์ที่วางแผนจะปรับใช้เซิร์ฟเวอร์ จะใช้โปรแกรม sshtunnel ฉันจะไม่อธิบายความซับซ้อนของการกำหนดค่า - มันทำได้ค่อนข้างง่าย ฉันแค่สังเกตว่าหน้าที่ของมันคือการส่งต่อพอร์ต TCP 1194 จากเราเตอร์ไปยัง VPS ถัดไป เซิร์ฟเวอร์ OpenVPN ได้รับการกำหนดค่าบนอุปกรณ์ tap0 ซึ่งเชื่อมต่อกับสะพาน br-lan เมื่อตรวจสอบการเชื่อมต่อกับเซิร์ฟเวอร์ที่สร้างขึ้นใหม่จากแล็ปท็อป เป็นที่ชัดเจนว่าแนวคิดของการส่งต่อพอร์ตนั้นสมเหตุสมผล และแล็ปท็อปของฉันก็กลายเป็นสมาชิกของเครือข่ายของเราเตอร์ แม้ว่าจะไม่ได้อยู่ในนั้นก็ตาม

เหลือเพียงสิ่งเล็กๆ น้อยๆ ที่ต้องทำ: จำเป็นต้องกระจายที่อยู่ IP ในอพาร์ตเมนต์ต่างๆ เพื่อไม่ให้ขัดแย้งกันและกำหนดค่าเราเตอร์เป็นไคลเอนต์ OpenVPN
เลือกที่อยู่ IP ของเราเตอร์และช่วงเซิร์ฟเวอร์ DHCP ต่อไปนี้:

  • 192.168.10.1 มีช่วง 192.168.10.2 - 192.168.10.80 สำหรับเซิร์ฟเวอร์
  • 192.168.10.100 มีช่วง 192.168.10.101 - 192.168.10.149 สำหรับเราเตอร์ในอพาร์ทเมนต์หมายเลข 2
  • 192.168.10.150 มีช่วง 192.168.10.151 - 192.168.10.199 สำหรับเราเตอร์ในอพาร์ทเมนต์หมายเลข 3

นอกจากนี้ยังจำเป็นต้องกำหนดที่อยู่เหล่านี้ให้กับเราเตอร์ไคลเอนต์ของเซิร์ฟเวอร์ OpenVPN โดยเพิ่มบรรทัดในการกำหนดค่า:

ifconfig-pool-persist /etc/openvpn/ipp.txt 0

และเพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/openvpn/ipp.txt:

flat1_id 192.168.10.100
flat2_id 192.168.10.150

โดยที่ flat1_id และ flat2_id เป็นชื่ออุปกรณ์ที่ระบุเมื่อสร้างใบรับรองสำหรับการเชื่อมต่อกับ OpenVPN

ถัดไป ไคลเอนต์ OpenVPN ได้รับการกำหนดค่าบนเราเตอร์ โดยอุปกรณ์ tap0 บนทั้งสองเครื่องถูกเพิ่มลงในบริดจ์ br-lan ในขั้นตอนนี้ ดูเหมือนทุกอย่างจะเรียบร้อยดีเนื่องจากทั้งสามเครือข่ายสามารถเห็นหน้ากันและทำงานเป็นหนึ่งเดียวได้ อย่างไรก็ตาม มีรายละเอียดที่ไม่น่าพึงพอใจเกิดขึ้น: บางครั้งอุปกรณ์อาจได้รับที่อยู่ IP ที่ไม่ได้มาจากเราเตอร์ ซึ่งส่งผลที่ตามมาทั้งหมด ด้วยเหตุผลบางประการ เราเตอร์ในอพาร์ตเมนต์แห่งหนึ่งไม่มีเวลาตอบสนองต่อ DHCPDISCOVER ได้ทันเวลา และอุปกรณ์ได้รับที่อยู่ที่ไม่ได้ตั้งใจ ฉันรู้ว่าฉันต้องกรองคำขอดังกล่าวเป็น tap0 บนเราเตอร์แต่ละตัว แต่เมื่อปรากฏว่า iptables ไม่สามารถทำงานกับอุปกรณ์ได้หากเป็นส่วนหนึ่งของบริดจ์ และ ebtables ต้องเข้ามาช่วยเหลือฉัน น่าเสียดายที่มันไม่ได้อยู่ในเฟิร์มแวร์ของฉัน และฉันต้องสร้างอิมเมจใหม่สำหรับอุปกรณ์แต่ละเครื่อง ด้วยการทำเช่นนี้และเพิ่มบรรทัดเหล่านี้ใน /etc/rc.local ของเราเตอร์แต่ละตัว ปัญหาได้รับการแก้ไขแล้ว:

ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A INPUT --in-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -A FORWARD --out-interface tap0 --protocol ipv4 --ip-protocol udp --ip-source-port 67:68 -j DROP

การกำหนดค่านี้กินเวลานานสามปี

ส่วนที่ 2: การแนะนำ WireGuard

เมื่อเร็ว ๆ นี้ ผู้คนบนอินเทอร์เน็ตเริ่มพูดถึง WireGuard มากขึ้น โดยชื่นชมความเรียบง่ายของการกำหนดค่า ความเร็วในการรับส่งข้อมูลสูง ค่า Ping ต่ำพร้อมความปลอดภัยที่เทียบเคียงได้ การค้นหาข้อมูลเพิ่มเติมทำให้ชัดเจนว่าทั้งการทำงานในฐานะสมาชิกบริดจ์หรือการทำงานบนโปรโตคอล TCP นั้นไม่ได้รับการสนับสนุน ซึ่งทำให้ฉันคิดว่ายังไม่มีทางเลือกอื่นนอกจาก OpenVPN สำหรับฉัน ดังนั้นฉันจึงเลื่อนการทำความรู้จักกับ WireGuard ออกไป

เมื่อไม่กี่วันที่ผ่านมา มีข่าวแพร่กระจายไปทั่วแหล่งข้อมูลไม่ทางใดก็ทางหนึ่งที่เกี่ยวข้องกับไอทีซึ่งในที่สุด WireGuard ก็จะถูกรวมไว้ในเคอร์เนล Linux โดยเริ่มจากเวอร์ชัน 5.6 บทความข่าวต่างยกย่อง WireGuard เช่นเคย ฉันกระโจนเข้าสู่การค้นหาวิธีแทนที่ OpenVPN แบบเก่าที่ดีอีกครั้ง ครั้งนี้ผมวิ่งเข้าไป บทความนี้. มีการพูดถึงการสร้างอุโมงค์อีเธอร์เน็ตบน L3 โดยใช้ GRE บทความนี้ทำให้ฉันมีความหวัง ยังไม่ชัดเจนว่าจะทำอย่างไรกับโปรโตคอล UDP การค้นหานำฉันไปสู่บทความเกี่ยวกับการใช้ socat ร่วมกับอุโมงค์ SSH เพื่อส่งต่อพอร์ต UDP อย่างไรก็ตามพวกเขาตั้งข้อสังเกตว่าวิธีนี้ใช้ได้เฉพาะในโหมดการเชื่อมต่อเดียวเท่านั้น นั่นคือการทำงานของไคลเอนต์ VPN หลายตัวจะเป็นไปไม่ได้ ฉันเกิดแนวคิดในการติดตั้งเซิร์ฟเวอร์ VPN บน VPS และตั้งค่า GRE สำหรับลูกค้า แต่เมื่อปรากฎว่า GRE ไม่รองรับการเข้ารหัสซึ่งจะนำไปสู่ความจริงที่ว่าหากบุคคลที่สามเข้าถึงเซิร์ฟเวอร์ การรับส่งข้อมูลทั้งหมดระหว่างเครือข่ายของฉันจะอยู่ในมือของพวกเขา ซึ่งไม่เหมาะกับฉันเลย

เป็นอีกครั้งที่การตัดสินใจสนับสนุนการเข้ารหัสซ้ำซ้อน โดยใช้ VPN ผ่าน VPN โดยใช้รูปแบบต่อไปนี้:

VPN ระดับ XNUMX:
VPS เป็น เซิร์ฟเวอร์ พร้อมที่อยู่ภายใน 192.168.30.1
MS เป็น ลูกค้า VPS พร้อมที่อยู่ภายใน 192.168.30.2
MK2 เป็น ลูกค้า VPS พร้อมที่อยู่ภายใน 192.168.30.3
MK3 เป็น ลูกค้า VPS พร้อมที่อยู่ภายใน 192.168.30.4

VPN ระดับที่สอง:
MS เป็น เซิร์ฟเวอร์ ด้วยที่อยู่ภายนอก 192.168.30.2 และภายใน 192.168.31.1
MK2 เป็น ลูกค้า MS ด้วยที่อยู่ 192.168.30.2 และมี IP ภายใน 192.168.31.2
MK3 เป็น ลูกค้า MS ด้วยที่อยู่ 192.168.30.2 และมี IP ภายใน 192.168.31.3

* MS — เราเตอร์เซิร์ฟเวอร์ในอพาร์ตเมนต์ 1 MK2 - เราเตอร์ในอพาร์ตเมนต์ 2 MK3 - เราเตอร์ในอพาร์ตเมนต์ 3
* การกำหนดค่าอุปกรณ์มีการเผยแพร่ในสปอยเลอร์ท้ายบทความ

ดังนั้น ปิงกำลังทำงานระหว่างโหนดเครือข่าย 192.168.31.0/24 ถึงเวลาที่ต้องดำเนินการตั้งค่าอุโมงค์ GRE ต่อไป ก่อนหน้านี้ เพื่อไม่ให้สูญเสียการเข้าถึงเราเตอร์ ควรตั้งค่าอุโมงค์ SSH เพื่อส่งต่อพอร์ต 22 ไปยัง VPS ดังนั้นตัวอย่างเช่น เราเตอร์จากอพาร์ทเมนต์ 10022 จะสามารถเข้าถึงได้บนพอร์ต 2 ของ VPS และ เราเตอร์จากอพาร์ทเมนต์ 11122 จะสามารถเข้าถึงได้บนพอร์ต 3 เราเตอร์จากอพาร์ทเมนต์ XNUMX วิธีที่ดีที่สุดคือกำหนดค่าการส่งต่อโดยใช้ sshtunnel เดียวกันเนื่องจากจะกู้คืนอุโมงค์หากล้มเหลว

อุโมงค์ได้รับการกำหนดค่าแล้ว คุณสามารถเชื่อมต่อกับ SSH ผ่านพอร์ตที่ส่งต่อได้:

ssh root@МОЙ_VPS -p 10022

ถัดไปคุณควรปิดการใช้งาน OpenVPN:

/etc/init.d/openvpn stop

ตอนนี้มาตั้งค่าอุโมงค์ GRE บนเราเตอร์จากอพาร์ทเมนต์ 2:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set grelan0 up

และเพิ่มอินเทอร์เฟซที่สร้างขึ้นให้กับบริดจ์:

brctl addif br-lan grelan0

มาทำตามขั้นตอนที่คล้ายกันบนเราเตอร์เซิร์ฟเวอร์:

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set grelan0 up

และเพิ่มอินเทอร์เฟซที่สร้างขึ้นให้กับบริดจ์ด้วย:

brctl addif br-lan grelan0

เริ่มตั้งแต่นาทีนี้ ปิงเริ่มเข้าเน็ตใหม่ได้สำเร็จ และฉันก็ไปดื่มกาแฟด้วยความพอใจ จากนั้น เพื่อประเมินว่าเครือข่ายทำงานที่ปลายอีกด้านของบรรทัดอย่างไร ฉันพยายามส่ง SSH ไปยังคอมพิวเตอร์เครื่องใดเครื่องหนึ่งในอพาร์ทเมนต์ 2 แต่ไคลเอ็นต์ ssh หยุดทำงานโดยไม่แจ้งรหัสผ่าน ฉันกำลังพยายามเชื่อมต่อกับคอมพิวเตอร์เครื่องนี้ผ่านทางเทลเน็ตบนพอร์ต 22 และฉันเห็นบรรทัดที่ฉันเข้าใจได้ว่ากำลังสร้างการเชื่อมต่อ เซิร์ฟเวอร์ SSH กำลังตอบสนอง แต่ด้วยเหตุผลบางอย่าง มันไม่แจ้งให้ฉันบันทึก ใน.

$ telnet 192.168.10.110 22
SSH-2.0-OpenSSH_8.1

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

ฉันลบอุปกรณ์ grelan0 ออกจากบริดจ์และเรียกใช้ OpenVPN บนเราเตอร์ในอพาร์ทเมนต์ 2 และตรวจสอบให้แน่ใจว่าเครือข่ายทำงานตามที่คาดไว้อีกครั้งและการเชื่อมต่อไม่หลุด ขณะค้นหา ฉันพบฟอรัมที่มีผู้คนบ่นเกี่ยวกับปัญหาเดียวกัน โดยที่พวกเขาได้รับคำแนะนำให้ยกระดับ MTU พูดไม่ทันทำเลย อย่างไรก็ตาม จนกว่า MTU จะถูกตั้งค่าให้สูงเพียงพอ - 7000 สำหรับอุปกรณ์ gretap การเชื่อมต่อ TCP ที่หลุดออกไปหรืออัตราการถ่ายโอนต่ำก็ถูกตรวจพบ เนื่องจาก MTU สูงสำหรับ gretap MTU สำหรับการเชื่อมต่อ WireGuard เลเยอร์ 8000 และเลเยอร์ 7500 จึงถูกตั้งค่าเป็น XNUMX และ XNUMX ตามลำดับ

ฉันทำการตั้งค่าที่คล้ายกันบนเราเตอร์จากอพาร์ทเมนต์ 3 โดยมีข้อแตกต่างเพียงอย่างเดียวคือมีการเพิ่มอินเทอร์เฟซ gretap ที่สองชื่อ grelan1 ให้กับเราเตอร์เซิร์ฟเวอร์ ซึ่งถูกเพิ่มลงในบริดจ์ br-lan ด้วย

ทุกอย่างทำงานได้ ตอนนี้คุณสามารถใส่ชุดประกอบ gretap ลงในการเริ่มต้นได้ สำหรับสิ่งนี้:

ฉันวางบรรทัดเหล่านี้ใน /etc/rc.local บนเราเตอร์ในอพาร์ทเมนต์ 2:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.2
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

เพิ่มสิ่งนี้ลงใน /etc/rc.local บนเราเตอร์ในอพาร์ทเมนต์ 3:

ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

และบนเราเตอร์เซิร์ฟเวอร์:

ip link add grelan0 type gretap remote 192.168.31.2 local 192.168.31.1
ip link set dev grelan0 mtu 7000
ip link set grelan0 up
brctl addif br-lan grelan0

ip link add grelan1 type gretap remote 192.168.31.3 local 192.168.31.1
ip link set dev grelan1 mtu 7000
ip link set grelan1 up
brctl addif br-lan grelan1

หลังจากรีบูตเราเตอร์ไคลเอนต์ ฉันพบว่าด้วยเหตุผลบางอย่างเราเตอร์ไม่ได้เชื่อมต่อกับเซิร์ฟเวอร์ เมื่อเชื่อมต่อกับ SSH ของพวกเขา (โชคดีที่ฉันกำหนดค่า sshtunnel สำหรับสิ่งนี้ไว้ก่อนหน้านี้) พบว่า WireGuard ด้วยเหตุผลบางอย่างกำลังสร้างเส้นทางสำหรับจุดสิ้นสุด แต่มันไม่ถูกต้อง ดังนั้นสำหรับ 192.168.30.2 ตารางเส้นทางจะระบุเส้นทางผ่านอินเทอร์เฟซ pppoe-wan นั่นคือผ่านอินเทอร์เน็ต แม้ว่าเส้นทางไปนั้นควรถูกกำหนดเส้นทางผ่านอินเทอร์เฟซ wg0 ก็ตาม หลังจากลบเส้นทางนี้ การเชื่อมต่อก็กลับคืนมา ฉันไม่พบคำแนะนำเกี่ยวกับวิธีการบังคับให้ WireGuard ไม่สร้างเส้นทางเหล่านี้ ยิ่งไปกว่านั้น ฉันไม่เข้าใจด้วยซ้ำว่านี่คือฟีเจอร์ของ OpenWRT หรือ WireGuard เอง โดยไม่ต้องจัดการกับปัญหานี้เป็นเวลานาน ฉันเพียงเพิ่มบรรทัดลงในเราเตอร์ทั้งสองตัวในสคริปต์กำหนดเวลาที่ลบเส้นทางนี้:

route del 192.168.30.2

ที่สรุป

ฉันยังไม่สามารถละทิ้ง OpenVPN ได้อย่างสมบูรณ์ เนื่องจากบางครั้งฉันต้องเชื่อมต่อกับเครือข่ายใหม่จากแล็ปท็อปหรือโทรศัพท์ และโดยทั่วไปการตั้งค่าอุปกรณ์ gretap บนเครือข่ายเหล่านั้นนั้นเป็นไปไม่ได้ แต่ถึงอย่างนี้ ฉันก็ยังได้เปรียบในเรื่องความเร็ว การถ่ายโอนข้อมูลระหว่างอพาร์ทเมนต์ เป็นต้น การใช้ VNC ก็ไม่ใช่เรื่องไม่สะดวกอีกต่อไป Ping ลดลงเล็กน้อย แต่มีเสถียรภาพมากขึ้น:

เมื่อใช้ OpenVPN:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=133 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=125 ms

--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19006ms
rtt min/avg/max/mdev = 124.722/126.152/136.907/3.065 ms

เมื่อใช้ WireGuard:

[r0ck3r@desktop ~]$ ping -c 20 192.168.10.110
PING 192.168.10.110 (192.168.10.110) 56(84) bytes of data.
64 bytes from 192.168.10.110: icmp_seq=1 ttl=64 time=124 ms
...
64 bytes from 192.168.10.110: icmp_seq=20 ttl=64 time=124 ms
--- 192.168.10.110 ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 19003ms
rtt min/avg/max/mdev = 123.954/124.423/126.708/0.675 ms

จะได้รับผลกระทบมากขึ้นจากค่า ping ที่สูงไปยัง VPS ซึ่งอยู่ที่ประมาณ 61.5 ms

อย่างไรก็ตามความเร็วได้เพิ่มขึ้นอย่างมาก ดังนั้น ในอพาร์ตเมนต์ที่มีเราเตอร์เซิร์ฟเวอร์ ฉันมีความเร็วการเชื่อมต่ออินเทอร์เน็ตที่ 30 Mbit/วินาที และในอพาร์ตเมนต์อื่นๆ คือ 5 Mbit/วินาที ในเวลาเดียวกัน ในขณะที่ใช้ OpenVPN ฉันไม่สามารถรับความเร็วการถ่ายโอนข้อมูลระหว่างเครือข่ายมากกว่า 3,8 Mbit/วินาทีตามการอ่านค่า iperf ในขณะที่ WireGuard “เพิ่ม” เป็น 5 Mbit/วินาทีเท่าเดิม

การกำหนดค่า WireGuard บน VPS[Interface] Address = 192.168.30.1/24
ListenPort = 51820
PrivateKey = <ЗАКРЫТЫЙ_КЛЮЧ_ДЛЯ_VPS>

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_1_МС>
AllowedIPs = 192.168.30.2/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2>
AllowedIPs = 192.168.30.3/32

[Peer] PublicKey = <ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3>
AllowedIPs = 192.168.30.4/32

การกำหนดค่า WireGuard บน MS (เพิ่มใน /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.2/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МС'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option route_allowed_ips '1'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - сервер
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option listen_port '51821'
        list addresses '192.168.31.1/24'
        option auto '1'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list allowed_ips '192.168.31.2'

config wireguard_wg1ip link add grelan0 type gretap remote 192.168.31.1 local 192.168.31.3

        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list allowed_ips '192.168.31.3'

การกำหนดค่า WireGuard บน MK2 (เพิ่มใน /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.3/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК2'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - клиент
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК2'
        list addresses '192.168.31.2/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

การกำหนดค่า WireGuard บน MK3 (เพิ่มใน /etc/config/network)

#VPN первого уровня - клиент
config interface 'wg0'
        option proto 'wireguard'
        list addresses '192.168.30.4/24'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_1_МК3'
        option auto '1'
        option mtu '8000'

config wireguard_wg0
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_1_VPS'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        list allowed_ips '192.168.30.0/24'
        option endpoint_host 'IP_АДРЕС_VPS'

#VPN второго уровня - клиент
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'ЗАКРЫТЫЙ_КЛЮЧ_VPN_2_МК3'
        list addresses '192.168.31.3/24'
        option auto '1'
        option listen_port '51821'
        option mtu '7500'

config wireguard_wg1
        option public_key 'ОТКРЫТЫЙ_КЛЮЧ_VPN_2_МС'
        option endpoint_host '192.168.30.2'
        option endpoint_port '51821'
        option persistent_keepalive '25'
        list allowed_ips '192.168.31.0/24'

ในการกำหนดค่าที่อธิบายไว้สำหรับ VPN ระดับที่สอง ฉันชี้ไคลเอนต์ WireGuard ไปที่พอร์ต 51821 ตามทฤษฎีแล้ว สิ่งนี้ไม่จำเป็น เนื่องจากไคลเอนต์จะสร้างการเชื่อมต่อจากพอร์ตที่ไม่มีสิทธิพิเศษใด ๆ แต่ฉันสร้างมันขึ้นมาเพื่อให้สามารถห้ามได้ การเชื่อมต่อขาเข้าทั้งหมดบนอินเทอร์เฟซ wg0 ของเราเตอร์ทั้งหมด ยกเว้นการเชื่อมต่อ UDP ขาเข้าไปยังพอร์ต 51821

ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับใครบางคน

PS นอกจากนี้ ฉันต้องการแบ่งปันสคริปต์ของฉันที่ส่งการแจ้งเตือนแบบ PUSH ไปยังโทรศัพท์ของฉันในแอปพลิเคชัน WirePusher เมื่อมีอุปกรณ์ใหม่ปรากฏบนเครือข่ายของฉัน นี่คือลิงค์ไปยังสคริปต์: github.com/r0ck3r/device_discover.

UPDATE: การกำหนดค่าเซิร์ฟเวอร์และไคลเอนต์ OpenVPN

เซิร์ฟเวอร์ OpenVPN

client-to-client

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpn-server.crt
dh /etc/openvpn/server/dh.pem
key /etc/openvpn/server/vpn-server.key

dev tap
ifconfig-pool-persist /etc/openvpn/ipp.txt 0
keepalive 10 60
proto tcp4
server-bridge 192.168.10.1 255.255.255.0 192.168.10.80 192.168.10.254
status /var/log/openvpn-status.log
verb 3
comp-lzo

ไคลเอนต์ OpenVPN

client
tls-client
dev tap
proto tcp
remote VPS_IP 1194 # Change to your router's External IP
resolv-retry infinite
nobind

ca client/ca.crt
cert client/client.crt
key client/client.key
dh client/dh.pem

comp-lzo
persist-tun
persist-key
verb 3

ฉันใช้ easy-rsa เพื่อสร้างใบรับรอง

ที่มา: will.com

เพิ่มความคิดเห็น