כיצד להגדיר שרת ולקוח WireGuard VPN ב-Ubuntu 20.04

הגדר VPN שמתארח בעצמו באמצעות Wireguard

א VPN (רשת פרטית וירטואלית) מאפשר למשתמש להתחבר לרשת פרטית מרחוק כאילו המחשב של המשתמש מחובר ישירות לרשת הפרטית. הטכנולוגיה פותחה בתחילה על מנת לאפשר גישה מרחוק לרשת הפרטית הפנימית של החברה, לעובדים שאינם נמצאים בפועל במיקום הרשת הפנימית.

שרת VPN פרוס במיקום הרשת הפנימית. שרת זה נמצא ברשת הציבורית וניתן לגשת אליו באמצעות לקוח VPN על ידי העובד. יש צורך באימות כדי להתחבר לשרת ה-VPN. התקשורת בין שרת VPN ללקוח VPN מאובטחת באמצעות פרוטוקול מנהור. שימו לב שתקשורת זו עשויה להיות מוצפנת או לא, אך לרוב ברוב פרוטוקולי ה-VPN היא מוצפנת.

שימוש נוסף ב-VPN הוא ל להשיג אנונימיות בעת גישה לאינטרנט או לעקוף מגבלות גיאוגרפיות שהוטלו בעת גישה לאתרים מסוימים. במקרים כאלה, הרשת שאליה המשתמש רוצה להתחבר אינה רשת פרטית, אלא היא האינטרנט.

פרוטוקולי VPN רבים פותחו במהלך השנים. פרוטוקולים אלו עושים שימוש בפרוטוקולי מנהור שונים ואלגוריתמי הצפנה לתקשורת בין השרת ללקוח.

פרוטוקול אחד כזה, שזוכה לשימוש נרחב לאחרונה, הוא מגן תיל. Wireguard קל יותר, פשוט יותר וביצועי יותר מאשר פרוטוקולי VPN ידועים בשימוש מסורתי כגון OpenVPN, IPSec. זה כבר מיושם עבור Windows, Mac OS ומספר גדול של הפצות לינוקס. בלינוקס, זה מיושם כמודול ליבה. זה זמין במאגרים הרשמיים של אובונטו 20.04.

במאמר זה נראה כיצד להגדיר שרת ולקוח Wireguard VPN באובונטו 20.04.

הַתקָנָה

עבור מאמר זה, אני מגדיר שרת Wireguard ב-Ubuntu 20.04 Linode ו-Wireguard Client במחשב המקומי שלי עם אובונטו 20.04.

החבילה מגן תיל מתקין גם Wireguard Server וגם Client. הפעל את הפקודה הבאה גם במחשב השרת וגם במחשב הלקוח.

sudo apt להתקין wireguard

תצורת שרת

מפתחות אבטחה

עלינו ליצור קבוצה של צמדי מפתחות ציבוריים/פרטיים על מנת לאמת ולאבטח את חיבור Wireguard. ניתן לעשות זאת באמצעות הפקודות הבאות:

sudo su cd /etc/wireguard umask 077 wg genkey | tee private_key | wg pubkey > public_key

שימו לב שאנו מבצעים את כל משימות התצורה כמשתמש-על. הסיבה היא הגישה לספרייה /etc/wireguard מונע ממשתמשים רגילים, ולא ניתן להשיג גישה לספרייה רק ​​עם הרשאות sudo עבור משתמש רגיל.

לאחר מכן, אנו מגדירים את מסיכת יצירת הקובץ ל 077. המשמעות היא שבכל פעם שנוצר קובץ חדש בתיקייה זו על ידי תהליך כלשהו, ​​ההרשאות שלו יסווטו אוטומטית עם 077. למשל. אם נוצר קובץ בתיקייה זו עם הרשאות 777, הוא מוסווה אוטומטית וההרשאות הופכות למעשה ל-700. זה נעשה כך שרק לבעל הקובץ יש את כל ההרשאות על הקובץ, ולכל השאר אין הרשאות.

בשורה הבאה, אנו יוצרים את צמד המפתחות הציבורי/פרטי עבור השרת. הם נשמרים בקבצים מפתח פרטי ו מפתח ציבורי. כדי להציג את המפתחות, הפעל:

חתול מפתח_פרטי חתול מפתח_ציבורי

העתק את המפתח הפרטי, אנחנו צריכים אותו בשלב הבא.

הערה: לעולם אל תשתף את המפתח הפרטי שלך באופן ציבורי!

קובץ תצורה

בואו ניצור קובץ תצורה עבור שרת ה-Wireguard. אתה יכול לבחור כל שם לקובץ. אנחנו ניצור קובץ wg0.conf בדוגמה זו.

vim wg0.conf

הוסף את הדברים הבאים לקובץ.

[ממשק] כתובת = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j קבל; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j קבל; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

הדבק את המפתח הפרטי שהעתקנו בעבר לשורה 5 בקוד למעלה.

עלינו להגדיר את Wireguard ברשת משנה אחרת (וירטואלית). מאשר כתובת ה-IP של השרת. כאן, השתמשתי ב-10.20.43.1 עבור השרת ואשתמש ב-10.20.43.2 עבור הלקוח. ניתן להשתמש כאן בכל תת רשת. כדי לקבל את כתובת ה-IP של השרת והממשק, הפעל:

ifconfig

שימו לב לכתובת ה-IP של השרת. זה נדרש במהלך תצורת הלקוח.

הממשק המשמש את השרת, כפי שניתן לראות בתמונה למעלה, הוא eth0. שם הממשק יכול להיות שונה על סמך הרשת של המשתמש, זה יכול להיות wlan0 אוֹ wlp2s0 במקרה שהמשתמש מחובר לרשת WiFi באמצעות כרטיס אלחוטי.

החלף את ה ב לפרסם את ו PostDown עם הממשק שלך; בדוגמה זו זה כן eth0.לפרסם את ו PostDown הנחיות משמשות כדי לציין אילו פקודות יש להפעיל כאשר השרת מתחיל ונעצר בהתאמה. בדוגמה שלנו, אנו משתמשים ב- iptables פקודה כדי להגדיר כללי IP כך שכתובת ה-IP של השרת תהיה משותפת על ידי הלקוחות. הכללים ייפלו ברגע שהשרת יפסיק.

שמור וצא מהקובץ. בעת שימוש ב-vim, לחץ על יציאה, ואז הקלד :wq ולחץ להיכנס לשמור ולצאת.

אם אתה משתמש ב- a ufw חומת אש בשרת, עלינו לאפשר חיבורי UDP ליציאה עבור שרת VPN, 51190.

ufw לאפשר 51190/udp

התחלת השירות

כעת כשהתצורה הסתיימה, נוכל להפעיל את שירות ה-VPN של Wireguard.

כדי לאפשר השירות שיתחיל בזמן האתחול, הפעל:

systemctl אפשר את wg-quick@wg0

שימו לב לכך כאן wg0 הוא השם של קובץ התצורה.

להתחיל השירות, הפעל:

שירות wg-quick@wg0 התחל

תאשר שהשירות התחיל בהצלחה:

שירות wg-quick@wg0 סטטוס

ודא שהממשק שיצרנו בקובץ התצורה התחיל, באמצעות פקודת ה-IP.

ip a show wg0

שרת ה-VPN של Wireguard מוגדר כעת ופועל. בואו נגדיר את הלקוח עכשיו.

תצורת לקוח

תצורת לקוח עבור Wireguard זהה פחות או יותר לתצורת שרת. אנו יוצרים את המפתחות עבור הלקוח, ולאחר מכן יוצרים קובץ תצורה.

מפתחות אבטחה

ליצירת המפתח הציבורי/פרטי זוג עבור הלקוח, הרץ:

sudo su cd /etc/wireguard umask 077 wg genkey | tee client_private_key | wg pubkey > client_public_key

המפתחות הציבוריים והפרטיים עבור הלקוח נוצרים כעת בקבצים בהתאמה מפתח_פרטי_לקוח ו לקוח_מפתח_ציבורי.

בדוק שהם נוצרו, באמצעות חתול פקודה.

חתול לקוח_מפתח_פרטי חתול לקוח_מפתח_ציבורי

העתק את המפתח הפרטי המוצג כפי שאנו צריכים להוסיף אותו לקובץ התצורה עבור הלקוח.

קובץ תצורה

צור את קובץ התצורה בכל שם שתרצו. אנחנו ניצור אותו עם השם wg0-client עבור הדוגמה הזו.

vim wg0-client.conf

הוסף את התצורה הבאה.

[ממשק] # כתובת IP ומפתח פרטי של כתובת הלקוח = 10.20.43.2/24 PrivateKey = [Peer] # מפתח ציבורי, כתובת IP ויציאה של השרת PublicKey = נקודת קצה = :51190 AllowedIPs = 0.0.0.0/0, : :/0

הזן את כתובת רשת המשנה של הלקוח. כפי שתואר קודם לכן, אנו משתמשים 10.20.43.2 עבור הלקוח בדוגמה זו.

הוסף את המפתח הפרטי של הלקוח נוצר בשלב הקודם לשורה 4 בקוד התצורה שלמעלה.

תחת 'עמית', אנו מוסיפים מידע על שרת ה-VPN של Wireguard אנחנו רוצים להתחבר.

הזן את המפתח הציבורי של השרת. להיכנס ל כתובת ה-IP של השרת, שציינו בעבר, ופורט בפורמט הנתון כנגד נקודת קצה. זוהי היציאה שציינו בקובץ התצורה של השרת ובו התחיל שירות VPN בשרת.

יש להזין כתובות IP מותרות כפי שניתן (0.0.0.0/0) כך שכל בקשה ב-IP ציבורי דינמי המשמש את הלקוח תעביר תמיד לשרת VPN.

שמור וצא מהקובץ. בעת שימוש ב-vim, לחץ על יציאה, ואז הקלד :wq ולחץ להיכנס לשמור ולצאת.

אפשר את שירות הלקוחות לרוץ עם כל אתחול, ולהתחיל אותו.

systemctl אפשר שירות wg-quick@wg-client wg-quick@wg-client start

תאשר אם השירות התחיל.

שירות wg-quick@wg-client status

הוספת עמית לשרת

כעת יש לנו את שרת ה-VPN והלקוח פועלים. עם זאת, מנהרה מאובטחת בין השניים לא נוצרת אלא אם כן ניצור חיבור עמית לעמית בין השרת ללקוח.

תחזור לשרת. ראשון, להפסיק את שירות ה-VPN.

שירות wg-quick@wg0 stop

לאחר מכן, פתח את קובץ התצורה אל הוסף תצורה עבור העמית (לָקוּחַ).

vim /etc/wireguard/wg0.conf

לְצַרֵף את השורות הבאות לקובץ.

[Peer] PublicKey = AllowedIPs = 10.20.43.2/32

עַכשָׁיו, הפעל שוב את שירות ה-VPN.

שירות wg-quick@wg0 התחל

זהו זה! זו כל התצורה הדרושה להגדרת לקוח ושרת של Wireguard VPN. כעת נבדוק את ה-VPN שלנו.

בדיקת ה-VPN

ראשית, בואו נעשה פינג פשוט מהלקוח לשרת, כדי לוודא שתקשורת מנהרת ה-VPN עובדת. הפעל את הפעולות הבאות על הלקוח:

פינג 10.20.43.1

הַבָּא, לפתוח דפדפן אינטרנט ולפתוח כל אתר אינטרנט כדי לבדוק אם אתה מסוגל להתחבר לאינטרנט ממחשב הלקוח. אתה יכול גם לבדוק את קישוריות האינטרנט שלך משורת הפקודה באמצעות wget.

wget 

כעת, בדקנו את קישוריות המנהרה ואת קישוריות האינטרנט. אם שניהם עובדים, כעת עלינו לוודא שכל תעבורת האינטרנט שמגיעה ללקוח עוברת דרך השרת.

בשביל זה, אנחנו פשוט צריכים לבדוק את כתובת ה-IP של הלקוח כפי שהיא נראית על ידי האינטרנט. אחת הדרכים לעשות זאת היא לעבור אל whatsmyip.org. לחלופין, משורת הפקודה, אנו יכולים לשאול שירות דומה אחר בשם IP info, באמצעות Curl.

הפעל את הפעולות הבאות במחשב הלקוח

תלתל //ipinfo.io/ip

כן. זוהי כתובת ה-IP הציבורית של ה-Linode שבה מתארח שרת ה-VPN. כך משיגים אנונימיות באמצעות VPN, שכן בכל רחבי האינטרנט כיום רואים את ה-IP של שרת ה-VPN ולא של המחשב שלך.

סיכום

קלות ההגדרה היא אחד היתרונות החשובים ביותר של Wireguard על פני תוכנת VPN מסורתית כמו OpenVPN, שזקוקה לרמה גבוהה יותר של ידע ברשת ובניתוב כדי להגדיר אותה. עם זאת, קיים חוסר בתיעוד רשמי מפורט עבור Wireguard שעלול לגרום לבעיות אם הגדרת ה-Wireguard שלך מוציאה שגיאות או אינה פועלת כמצופה.

עם זאת, Wireguard היא בחירה מצוינת אם אתה רוצה VPN שמתארח בעצמך לתקשורת מאובטחת דרך האינטרנט. למידע נוסף על Wireguard והפרוטוקולים והטכנולוגיות שבהם הוא משתמש, אתה יכול לבדוק את האתר הרשמי.