Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบเครือข่าย >> VPN

สร้าง WireGuard VPN ที่ปลอดภัยใน 5 นาที — เร็วและง่าย

คุณอาจเข้าใจแล้วว่า VPN ที่ดีมีความสำคัญแค่ไรสำหรับการรักษาความปลอดภัยและความเป็นส่วนตัวของการสื่อสารบนมือถือ

ไม่ว่าคุณจะต้องใช้โทรศัพท์ทำธุรกรรมธนาคารบน public WiFi ที่สนามบินหรือร้านกาแฟ หรือคุณกังวลว่าคนผิดคนมากำลังฟังการโต้ตอบออนไลน์ของคุณ การเข้ารหัสแบบอุโมงค์ที่ VPN ที่ดีให้มา นั้นมีค่าไม่มีราคา

แต่ทริกคือการหา VPN ที่ "ดี" จริงๆ — และที่สะดวกและราคาไม่แพงพร้อมกัน

มีบริการ VPN พาณิชย์เยอะมาก และการตั้งค่าหนึ่งในนั้นสำหรับโทรศัพท์หรือแล็ปท็อปมักง่ายพอ

แตบริการเหล่านี้มักมีข้อเสีย 2 จุด: มักแพง โดยเฉลี่ยประมาณ $10 ต่อเดือน และคุณไม่มีทางแน่ใจ 100% ว่าพวกเขาไม่ได้ (ไม่ว่าจะโดยบังเอิ้นหรือเจตนา)รั่วไหลหรือใช้ข้อมูลของคุณผิดวัตถุประสงค์

นอกจากนี้ VPN ที่ถูกกว่ามักจำกัดการใช้ข้อมูลและจำนวนอุปกรณ์ที่เชื่อมต่อได้

ถ้าคุณชอบดูวิดีโอ tutorial เพื่อเสริมการเรียนรู้ รู้สึกฟรีติดตามที่นี่:

สิ่งที่ WireGuard ให้มา

แตถ้าคุณมี cloud-based Linux server ทำงานอยู่แล้ว การสร้าง WireGuard VPN สามารถเป็นวิธีที่ง่ายและฟรีในการเพิ่มความปลอดภัยและความเป็นส่วนตัวที่แน่นอนเข้ามาในชีวิต

ถ้าคุณวางแผนจำกัด VPN ให้เฉพาะอุปกรณ์ของคุณและเพื่อนไม่กี่คน คุณอาจสังเกตเห็น resource load เพิ่มเติมบนเซิร์ฟเวอร์เลย แม้คุณจะต้องเปิดและจ่ายสำหรับ dedicated AWS EC2 t2.micro reserved instance ค่าใช้จ่ายรายปีควรยังถูกกว่าบริการ VPN พาณิชย์ส่วนใหญ่อย่างมีนัยสำคัญ และเป็นโบนัส คุณได้ควบคุมข้อมูลของคุณเองเต็มที่

ตอนนี้ผมจะแสดงให้เห็นว่าทั้งหมดนี้ทำงานยังไงด้วยซอฟต์แวร์ WireGuard โอเพนซอร์สบนเซิร์ฟเวอร์ Ubuntu Linux

ทำไมถึง WireGuard? เพราะมันใช้งานง่ายจริงๆ ออกแบบมาเพื่อต้านทานการโจมตีโดยเฉพาะ และมันทำงานได้ดีมากจนถูกรวมเข้าไปใน Linux kernel เองเมื่อไม่นานมานี้

งานจริงที่ทำให้สิ่งนี้เกิดขึ้น จะ ใช้เวลาแค่ 5 นาที — หรือน้อยกว่า แต่การวางแผน การ troubleshoot ปัญหาที่ไม่คาดคิด และการเปิดเซิร์ฟเวอร์ใหม่ถ้าจำเป็น อาจเพิ่มเวลามาก

วิธีตั้งค่าสภาพแวดล้อม

ก่อนอื่น คุณต้องเปิด UDP port 51820 ใน firewall ใดๆ ที่คุณใช้ นี่คือตัวอย่างสำหรับ security group ที่เกี่ยวข้องกับ AWS EC2 instance:

สร้าง WireGuard VPN ที่ปลอดภัยใน 5 นาที — เร็วและง่าย

ตอนนี้ บน Linux server ใช้ sudo shell เราจะเริ่มด้วยการติดตั้ง package WireGuard และ resolvconf

อย่างเป็นทางการ เราอาจไม่ต้องการ resolvconf ที่นี่ แตเพราะนั่นคือสิ่งที่คุณต้องการถ้าอยากตั้งค่า Linux machine เป็น WireGuard client ผมคิดว่าจะใส่ไว้ที่นี่ด้วย

apt install wireguard resolvconf 

วิธีสร้าง Encryption Keys

คำสั่ง wg genkey สร้าง private encryption key ใหม่และบันทึกเป็นไฟล์ในไดเรกทอรี /etc/wireguard ไดเรกทอรีนี้ถูกสร้างอัตโนมัติตอนเราติดตั้ง WireGuard

คำสั่ง chmod ตั้งค่าสิทธิ์ที่เหมาะสมและจำกัดสำหรับไฟล์ private key นั้น

เหมือนทุกอย่างใน Linux มีวิธีอื่นทำได้ แตแค่ให้แน่ใจว่าคุณทำถูกต้อง

wg genkey | sudo tee /etc/wireguard/private.key
chmod go= /etc/wireguard/private.key 

ต่อไป เราจะใช้ค่าของ private key ของเราสร้าง public key ที่ตรงกัน — ซึ่งก็จะถูกบันทึกในไดเรกทอรี /etc/wireguard เช่นกัน เป้าหมายคือเพิ่ม public key ของเซิร์ฟเวอร์เข้าไปในการตั้งค่า WireGuard บนอุปกรณ์ client ทั้งหมดที่เราจะใช้ และเพิ่ม public key ของ client เหล่านั้นเข้าไปใน server configuration ที่นี่

Private keys ควรไม่เคยออกจากเครื่องที่สร้างขึ้นสำหรับ — และควรปกป้องอย่างระมัดระวังเสมอ

cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key 

วิธีตั้งค่า WireGuard Server

เราพร้อมที่จะสร้างไฟล์ server configuration ตาม convention ผมจะตั้งชื่อไฟล์ว่า wg0.conf แตคุณตั้งชื่ออะไรก็ได้ คุณยังสามารถมีหลาย configuration (ชื่อไฟล์ต่างกัน) พร้อมกันได้

ไฟล์ configuration ของเราจะเป็นแบบนี้:

[Interface]
Address = 10.5.5.1/24
ListenPort = 51820
# Use your own private key, from /etc/wireguard/privatekey
PrivateKey = your_key

[Peer]
# Workstation public key
PublicKey = your_key
# VPN client's IP address in the VPN
AllowedIPs = 10.5.5.2/32

[Peer]
# laptop public key
PublicKey = your_key
# VPN client's IP address in the VPN
AllowedIPs = 10.5.5.3/32 

สังเกตว่าไฟล์นี้มี 3 ส่วน: Interface และสอง peers ส่วน Interface กำหนด private NAT network address ที่เซิร์ฟเวอร์ของเราจะใช้ นั่นคือ private address ที่ client จะเชื่อมต่อ — หลังจากขอเข้าถึงผ่าน public IP address ของเซิร์ฟเวอร์ก่อน แน่นอน

คุณไม่ต้องทำตาม addressing ของผม แค่ใช้ private IP range ที่ถูกต้องและไม่ทับซ้อนกับ network blocks ที่เซิร์ฟเวอร์หรือ client ใช้

ตรงกับกฎ UDP security group ที่ผมตั้งไว้ก่อนหน้าใน AWS ผมกำหนด ListenPort เป็น 51820 แตผมเลือก address อื่นได้ถ้าอยากเพิ่มความปลอดภัยเล็กน้อย

สุดท้าย ผมจะวาง private key ของเซิร์ฟเวอร์เป็นค่า PrivateKey เพื่อให้ WireGuard สามารถยืนยันตัวตนคำขอ client ที่เข้ามาได้

ส่วน peer แรก มีแค่ public key และ private IP address ที่มอบหมายให้ client หนึ่ง ส่วน peer ที่สอง ทำเหมือนกันสำหรับเครื่อง client เครื่องที่สอง

การเอา public key เหล่านั้นจาก client คืองานที่ manual ที่สุดใน setup ทั้งหมด แตเพราะนี่คือ VPN ของคุณเอง คุณมักหาวิธี copy และ paste เข้า server configuration ได้โดยไม่ต้องพิมพ์ทั้งหมดอย่างเจ็บปวด

นี่คือทุกอย่างแล้ว ผมจะใช้คำสั่ง wg-quick เพื่อให้ VPN ทำงาน up บอก WireGuard ให้อ่าน wg0.conf configuration ที่เราสร้างและใช้สร้าง VPN interface ใหม่

wg-quick up wg0 

การรัน wg จะแสดงว่ามันทำงานแล้ว สุดท้าย ผมจะรัน systemctl enable เพื่อบอก Linux ให้โหลด WireGuard interface นี้อัตโนมัติทุกครั้งที่เซิร์ฟเวอร์ reboot

systemctl enable wg-quick@wg0 

วิธีตั้งค่า WireGuard Clients

นั่นคือทุกอย่างที่เราต้องการจากฝั่งเซิร์ฟเวอร์ การตั้งค่าอุปกรณ์ client ให้ทำงานกับ WireGuard จะเป็นไปได้ ง่ายกว่ามาก หรือ เหมือนกันประมาณนี้

หมายถึงอะไร? ถ้าคุณทำงานกับ Windows, macOS, Android หรือ iOS แล้วมีลิงก์ไป GUI apps จากหน้า wireguard.com/install Apps เหล่านั้นจะสร้าง key pairs ให้คุณ คุณแค่ต้องใส่ IP address หรือ domain ของเซิร์ฟเวอร์และ public key ของมัน คุณจะเอา public key ของ client ไปเพิ่มใน server wg0.conf file แบบที่ผมแสดงให้เห็นก่อนหน้านี้

แตถ้ามันคือ Linux PC หรือ laptop client ที่คุณอยากเพิ่ม แล้วมันซับซ้อนกว่านั้น คุณจะทำตามทุกขั้นตอนที่คุณเห็นสำหรับ server configuration รวมถึงการสร้าง key คุณแม้แต่จะสร้างไฟล์ configuration ชื่อ wg0-conf (ถ้านั่นคือชื่อที่คุณชอบ) แตไฟล์ config นั้นควรเป็นแบบนี้:

[Interface]
# The address your computer will use on the VPN
Address = 10.5.5.2/32
DNS = 8.8.8.8
# Load your privatekey from file
PostUp = wg set %i private-key /etc/wireguard/privatekey
# Also ping the vpn server to ensure the tunnel is initialized
PostUp = ping -c1 10.47.47.1

[Peer]
# VPN server's wireguard public key
PublicKey = your_key
# Public IP address of your VPN server (USE YOURS!)
Endpoint = 54.160.21.183:51820
# 10.0.0.0/24 is the VPN subnet
AllowedIPs = 10.47.47.0/24
# PersistentKeepalive = 25 

ส่วน Interface ครั้งนี้แทนเครื่อง client ส่วน Peer ด้านล่างหมายถึงเซิร์ฟเวอร์ มาเริ่มกับ Interface private IP address ควรตรงกับ address ที่คุณให้ client นี้ใน configuration บนเซิร์ฟเวอร์

ถ้าคุณต้องการให้ client bypass local DNS server คุณสามารถระบุ custom DNS server ที่นี่ ตัวนี้คือของ Google

แทนที่จะ hard-code local private key ของคุณในไฟล์ configuration เหมือนที่เราทำบนเซิร์ฟเวอร์ คุณสามารถบอก WireGuard ให้อ่าน privatekey file ทุกครั้งที่มันโหลด นี่อาจเป็น security best-practice — และเราทำได้บนเซิร์ฟเวอร์เช่นกัน สุดท้าย configuration script จะทดสอบการเชื่อมต่อด้วยคำสั่ง PostUp ping

การตั้งค่า Peer — หรือเซิร์ฟเวอร์ — ต้องการ public key ของเซิร์ฟเวอร์ ซึ่งเพิ่มที่นี่

Endpoint คือที่ที่คุณบอก WireGuard ว่าจะหาเซิร์ฟเวอร์ที่ไหน ไม่มีอะไรทำงานได้โดยไม่มีอันนี้! ต้องการ public IP ของเซิร์ฟเวอร์ — หรือ domain name — ตามด้วย port ที่คุณเลือก 51820 คือค่า default ของ WireGuard

สุดท้าย การตั้งค่า AllowedIPs กำหนดช่วง network address ที่คุณจะใช้ และ PersistentKeepalive ที่ optional สามารถป้องกันการหลุดการเชื่อมต่อได้

คุณเปิด WireGuard บน client เหมือนวิธีที่ทำบนเซิร์ฟเวอร์ ใช้ wg-quick up wg0 อีกครั้ง แตทั้งหมดขั้นตอนเหล่านี้จะจำเป็นเฉพาะ Linux clients คุณสามารถใช้ apps สำหรับ platform อื่นๆ

ปิดท้าย

แล้วแค่นั้นแหละ ตามที่ผมบอก VPN ที่ทำงานได้ในงานประมาณ 5 นาที ตอนนี้คุณมีเหตุผลน้อยลง 1 ข้อสำหรับการปกป้องความเป็นส่วนตัวออนไลน์และรักษาความปลอดภัยการสื่อสาร

สำหรับเนื้อหาเทคโนโลยีเพิ่มเติม โปรดสมัครสมาชิกช่อง YouTube ของผม และเมื่อคุณมีเวลา ดูหนังสือและหลักสูตร Linux, ความปลอดภัย, วิเคราะห์ข้อมูล, และ AWS ที่พร้อมใช้งานผ่านเว็บไซต์ bootstrap-it.com ของผม

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพนซอร์สของ freeCodeCamp ช่วยให้ผู้คน 40,000+ คนได้งานเป็นนักพัฒนา เริ่มต้นเลย