הגדרת 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 (באמצעות Ethernet).

בהתחשב בכך שחיבורים קוויים ואלחוטיים הופכים לפחות ופחות מאובטחים עם הזמן (התקפות ממוקדות, מתקפת פיצוח KRACK WPA2 и התקפת Dragonblood נגד WPA3), אני שוקל ברצינות להשתמש WireGuard עבור כל המכשירים שלי, לא משנה באיזו סביבה הם פועלים.

התקנת תוכנה

WireGuard מספק חבילות מהודרות מראש עבור רוב ההפצות Linux, Windows и macOSיישומים עבור Android ו-iOS מסופקים דרך חנויות אפליקציות.

יש לי את הגרסה האחרונה של פדורה 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 מהקטלוג הרשמי של 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 wg-quick@wg0.service

תצורת לקוח במחשב נייד

צור קובץ תצורה במחשב נייד /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 wg-quick@wg0.service

הגדרת הלקוח עבור 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 (קו 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.

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster