เพราะ WireGuard
Оборудование
- Raspberry Pi 3 พร้อมโมดูล LTE และที่อยู่ IP สาธารณะ จะมีเซิร์ฟเวอร์ VPN ที่นี่ (ต่อไปนี้จะเรียกว่าข้อความ เอดจ์วอล์คเกอร์)
- โทรศัพท์ Android ที่ต้องใช้ VPN สำหรับการสื่อสารทั้งหมด
- แล็ปท็อป Linux ที่ควรใช้ VPN ภายในเครือข่ายเท่านั้น
อุปกรณ์ทุกเครื่องที่เชื่อมต่อกับ VPN จะต้องสามารถเชื่อมต่อกับอุปกรณ์อื่น ๆ ทั้งหมดได้ ตัวอย่างเช่น โทรศัพท์ควรจะสามารถเชื่อมต่อกับเว็บเซิร์ฟเวอร์บนแล็ปท็อปได้ หากอุปกรณ์ทั้งสองเป็นส่วนหนึ่งของเครือข่าย VPN หากการตั้งค่าค่อนข้างง่าย คุณก็สามารถพิจารณาการเชื่อมต่อเดสก์ท็อปกับ VPN (ผ่านอีเทอร์เน็ต) ได้
เมื่อพิจารณาว่าการเชื่อมต่อแบบมีสายและไร้สายมีความปลอดภัยน้อยลงเรื่อยๆ เมื่อเวลาผ่านไป (
การติดตั้งซอฟต์แวร์
WireGuard จัดให้
ฉันมี 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 ของฉัน
การติดตั้งกุญแจ
สำหรับการตรวจสอบความถูกต้องของเพียร์ 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