การตั้งค่า VPN อย่างง่ายด้วย WireGuard และ Raspberry Pi เป็นเซิร์ฟเวอร์

เพราะ WireGuard จะกลายเป็นส่วนหนึ่ง สำหรับเคอร์เนล Linux 5.6 ที่กำลังจะมาถึง ฉันตัดสินใจว่าจะรวม VPN นี้เข้ากับของฉันอย่างไรให้ดีที่สุด เราเตอร์ LTE/จุดเชื่อมต่อบน Raspberry Pi.

Оборудование

  • Raspberry Pi 3 พร้อมโมดูล LTE และที่อยู่ IP สาธารณะ จะมีเซิร์ฟเวอร์ VPN ที่นี่ (ต่อไปนี้จะเรียกว่าข้อความ เอดจ์วอล์คเกอร์)
  • โทรศัพท์ Android ที่ต้องใช้ VPN สำหรับการสื่อสารทั้งหมด
  • แล็ปท็อป Linux ที่ควรใช้ VPN ภายในเครือข่ายเท่านั้น

อุปกรณ์ทุกเครื่องที่เชื่อมต่อกับ VPN จะต้องสามารถเชื่อมต่อกับอุปกรณ์อื่น ๆ ทั้งหมดได้ ตัวอย่างเช่น โทรศัพท์ควรจะสามารถเชื่อมต่อกับเว็บเซิร์ฟเวอร์บนแล็ปท็อปได้ หากอุปกรณ์ทั้งสองเป็นส่วนหนึ่งของเครือข่าย VPN หากการตั้งค่าค่อนข้างง่าย คุณก็สามารถพิจารณาการเชื่อมต่อเดสก์ท็อปกับ VPN (ผ่านอีเทอร์เน็ต) ได้

เมื่อพิจารณาว่าการเชื่อมต่อแบบมีสายและไร้สายมีความปลอดภัยน้อยลงเรื่อยๆ เมื่อเวลาผ่านไป (การโจมตีแบบกำหนดเป้าหมาย, การโจมตีแบบแคร็ก KRACK WPA2 и การโจมตีของ Dragonblood กับ WPA3) ฉันกำลังพิจารณาใช้ WireGuard สำหรับอุปกรณ์ทั้งหมดของฉันอย่างจริงจัง ไม่ว่าอุปกรณ์เหล่านั้นจะอยู่ในสภาพแวดล้อมใดก็ตาม

การติดตั้งซอฟต์แวร์

WireGuard จัดให้ แพ็คเกจที่คอมไพล์แล้ว สำหรับการกระจาย Linux, Windows และ macOS ส่วนใหญ่ แอพ Android และ iOS ถูกส่งผ่านไดเร็กทอรีแอพ

ฉันมี Fedora Linux 31 เวอร์ชันล่าสุด และฉันขี้เกียจเกินไปที่จะอ่านคู่มือก่อนทำการติดตั้ง เพิ่งเจอแพ็คเกจ. wireguard-toolsติดตั้งแล้วจึงไม่เข้าใจว่าทำไมไม่มีอะไรทำงาน การตรวจสอบเพิ่มเติมพบว่าฉันไม่ได้ติดตั้งแพ็คเกจดังกล่าว wireguard-dkms (พร้อมไดรเวอร์เครือข่าย) แต่ไม่ได้อยู่ในพื้นที่เก็บข้อมูลของการแจกจ่ายของฉัน

หากฉันได้อ่านคำแนะนำ ฉันจะได้ดำเนินการตามขั้นตอนที่ถูกต้อง:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

ฉันติดตั้งการกระจาย Raspbian Buster บน Raspberry Pi ของฉันแล้ว มีแพ็คเกจอยู่แล้ว wireguardติดตั้ง:

$ sudo apt install wireguard

ฉันติดตั้งแอปพลิเคชันบนโทรศัพท์ Android ของฉัน WireGuardVPN จากแค็ตตาล็อกอย่างเป็นทางการของ Google App Store

การติดตั้งกุญแจ

สำหรับการตรวจสอบความถูกต้องของเพียร์ Wireguard ใช้รูปแบบคีย์ส่วนตัว/สาธารณะอย่างง่ายในการตรวจสอบความถูกต้องของเพียร์ VPN คุณสามารถสร้างคีย์ VPN ได้อย่างง่ายดายโดยใช้คำสั่งต่อไปนี้:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

สิ่งนี้ทำให้เรามีคู่คีย์สามคู่ (หกไฟล์) เราจะไม่อ้างถึงไฟล์ในการกำหนดค่า แต่คัดลอกเนื้อหาที่นี่: แต่ละคีย์จะมีหนึ่งบรรทัดใน base64

การสร้างไฟล์กำหนดค่าสำหรับเซิร์ฟเวอร์ VPN (Raspberry Pi)

การกำหนดค่าค่อนข้างง่าย ฉันสร้างไฟล์ต่อไปนี้ /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

หมายเหตุสองสามข้อ:

  • ในตำแหน่งที่เหมาะสมคุณจะต้องแทรกบรรทัดจากไฟล์ด้วยปุ่ม
  • VPN ของฉันกำลังใช้แบนด์ภายใน 10.200.200.0/24
  • สำหรับทีม PostUp/PostDown ฉันมีอินเทอร์เฟซเครือข่ายภายนอก wwan0 คุณอาจมีอินเทอร์เฟซอื่น (เช่น eth0)

เครือข่าย VPN สามารถยกระดับได้อย่างง่ายดายด้วยคำสั่งต่อไปนี้:

$ sudo wg-quick up wg0

รายละเอียดเล็กๆ น้อยๆ อย่างหนึ่ง: เป็นเซิร์ฟเวอร์ DNS ที่ฉันใช้ dnsmasq เชื่อมโยงกับอินเทอร์เฟซเครือข่าย br0ฉันก็เพิ่มอุปกรณ์ด้วย wg0 ไปยังรายการอุปกรณ์ที่อนุญาต ใน DNSmasq ทำได้โดยการเพิ่มบรรทัดใหม่ที่มีอินเทอร์เฟซเครือข่ายลงในไฟล์กำหนดค่า /etc/dnsmasq.confตัวอย่างเช่น:

interface=br0
interface=wg0

นอกจากนี้ ฉันได้เพิ่มกฎ iptable เพื่ออนุญาตการรับส่งข้อมูลไปยังพอร์ตการฟัง UDP (51280):

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

ตอนนี้ทุกอย่างทำงานได้แล้ว เราสามารถตั้งค่าการเปิดอุโมงค์ VPN อัตโนมัติได้:

$ sudo systemctl enable [email protected]

การกำหนดค่าไคลเอ็นต์บนแล็ปท็อป

สร้างไฟล์กำหนดค่าบนแล็ปท็อป /etc/wireguard/wg0.conf ด้วยการตั้งค่าเดียวกัน:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

หมายเหตุ:

  • แทนที่จะเป็น edgewalker คุณต้องระบุ IP สาธารณะหรือโฮสต์เซิร์ฟเวอร์ VPN
  • โดยการตั้งค่า AllowedIPs บน 10.200.200.0/24เราใช้ VPN เพื่อเข้าถึงเครือข่ายภายในเท่านั้น การรับส่งข้อมูลไปยังที่อยู่ IP/เซิร์ฟเวอร์อื่นๆ ทั้งหมดจะยังคงผ่านช่องทางเปิด "ปกติ" นอกจากนี้ยังจะใช้เซิร์ฟเวอร์ DNS ที่กำหนดค่าไว้ล่วงหน้าบนแล็ปท็อป

สำหรับการทดสอบและการเปิดตัวอัตโนมัติ เราใช้คำสั่งเดียวกัน wg-quick и systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

การตั้งค่าไคลเอนต์บนโทรศัพท์ Android

สำหรับโทรศัพท์ Android เราสร้างไฟล์การกำหนดค่าที่คล้ายกันมาก (ลองเรียกมันว่า mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

ต่างจากการกำหนดค่าบนแล็ปท็อป โทรศัพท์ต้องใช้เซิร์ฟเวอร์ VPN ของเราเป็นเซิร์ฟเวอร์ DNS (line DNS) และยังส่งผ่านการรับส่งข้อมูลทั้งหมดผ่านอุโมงค์ VPN (AllowedIPs = 0.0.0.0/0).

แทนที่จะคัดลอกไฟล์ไปยังอุปกรณ์เคลื่อนที่ คุณสามารถแปลงเป็นโค้ด QR ได้:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

รหัส QR จะส่งออกไปยังคอนโซลเป็น ASCII สามารถสแกนได้จากแอป Android VPN และจะตั้งค่าอุโมงค์ VPN โดยอัตโนมัติ

เอาท์พุต

การตั้งค่า WireGuard นั้นมหัศจรรย์มากเมื่อเทียบกับ OpenVPN

ที่มา: will.com

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