ตั้งค่า VPN แบบโฮสต์เองโดยใช้ Wireguard
VPN (Virtual Private Network)ช่วยให้ผู้ใช้สามารถเชื่อมต่อกับเครือข่ายส่วนตัวจากระยะไกลเช่นถ้าคอมพิวเตอร์ของผู้ใช้ที่ถูกเชื่อมต่อโดยตรงกับเครือข่ายส่วนตัว เทคโนโลยีนี้ได้รับการพัฒนาในขั้นต้นเพื่อให้สามารถเข้าถึงเครือข่ายส่วนตัวภายในของบริษัทได้จากระยะไกล สำหรับพนักงานที่ไม่ได้อยู่ที่ตำแหน่งของเครือข่ายภายใน
เซิร์ฟเวอร์ VPN ถูกปรับใช้ที่ตำแหน่งของเครือข่ายภายใน เซิร์ฟเวอร์นี้อยู่ในเครือข่ายสาธารณะและสามารถเข้าถึงได้โดยใช้ไคลเอนต์ VPN โดยพนักงาน จำเป็นต้องมีการตรวจสอบสิทธิ์เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ VPN การสื่อสารระหว่างเซิร์ฟเวอร์ VPN และไคลเอนต์ VPN นั้นปลอดภัยโดยใช้โปรโตคอลทันเนล โปรดทราบว่าการสื่อสารนี้อาจเข้ารหัสหรือไม่ก็ได้ แต่โดยปกติในโปรโตคอล VPN ส่วนใหญ่จะเข้ารหัส
การใช้ VPN อีกประการหนึ่งคือการได้รับข้อมูลที่ไม่เปิดเผยชื่อเมื่อเข้าถึงอินเทอร์เน็ตหรือเพื่อหลีกเลี่ยงข้อจำกัดทางภูมิศาสตร์ที่กำหนดในขณะที่เข้าถึงบางเว็บไซต์ ในกรณีเช่นนี้ เครือข่ายที่ผู้ใช้ต้องการเชื่อมต่อไม่ใช่เครือข่ายส่วนตัว แต่เป็นอินเทอร์เน็ตแทน
โปรโตคอล VPN จำนวนมากได้รับการพัฒนาในช่วงหลายปีที่ผ่านมา โปรโตคอลเหล่านี้ใช้โปรโตคอลทันเนลและอัลกอริธึมการเข้ารหัสที่แตกต่างกันสำหรับการสื่อสารระหว่างเซิร์ฟเวอร์และไคลเอนต์
หนึ่งโปรโตคอลดังกล่าวซึ่งกำลังได้รับความกว้างใช้เมื่อเร็ว ๆ นี้เป็นWireguard Wireguard นั้นเบากว่า ง่ายกว่าและมีประสิทธิภาพมากกว่าโปรโตคอล VPN ที่รู้จักกันดีเช่น OpenVPN, IPSec มีการใช้งานแล้วสำหรับ Windows, Mac OS และลีนุกซ์รุ่นต่างๆ ใน Linux จะใช้เป็นโมดูลเคอร์เนล มีอยู่ในที่เก็บอย่างเป็นทางการของ Ubuntu 20.04
ในบทความนี้ เราจะมาดูวิธีตั้งค่าเซิร์ฟเวอร์ Wireguard VPN และไคลเอนต์ใน Ubuntu 20.04
การติดตั้ง
สำหรับบทความนี้ ฉันกำลังตั้งค่าเซิร์ฟเวอร์ Wireguard บน Ubuntu 20.04 Linode และไคลเอนต์ Wireguard บนเครื่องของฉันด้วย Ubuntu 20.04
แพ็คเกจwireguard
ติดตั้งทั้งเซิร์ฟเวอร์ Wireguard และไคลเอนต์ เรียกใช้คำสั่งต่อไปนี้ทั้งบนเครื่องเซิร์ฟเวอร์และเครื่องไคลเอนต์
sudo apt install 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 อย่างมีประสิทธิภาพ สิ่งนี้ทำเพื่อให้มีเพียงเจ้าของไฟล์เท่านั้นที่มีสิทธิ์ทั้งหมดในไฟล์ และทุกคนไม่มีสิทธิ์
ในบรรทัดถัดไปเราสร้างคู่คีย์สาธารณะ/ส่วนตัวสำหรับเซิร์ฟเวอร์ พวกเขาจะถูกบันทึกไว้ในไฟล์private_key
และpublic_key
. หากต้องการดูคีย์ ให้เรียกใช้:
cat private_key
cat public_key
คัดลอกคีย์ส่วนตัวเราต้องการในขั้นตอนถัดไป
หมายเหตุ:อย่าแชร์คีย์ส่วนตัวของคุณแบบสาธารณะ!
ไฟล์กำหนดค่า
มาสร้างไฟล์กำหนดค่าสำหรับเซิร์ฟเวอร์ Wireguard กันเถอะ คุณสามารถเลือกชื่อใดก็ได้สำหรับไฟล์ เราจะสร้างไฟล์wg0.conf
ในตัวอย่างนี้
vim wg0.conf
เพิ่มสิ่งต่อไปนี้ในไฟล์.
[Interface]
Address = 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 ACCEPT; 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 ACCEPT; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE
วางรหัสส่วนตัวที่เราคัดลอกก่อนหน้านี้ลงในบรรทัดที่ 5 ในรหัสด้านบน
เราต้องกำหนดค่า Wireguard บนซับเน็ต (เสมือน) ที่แตกต่างจากที่อยู่ IP ของเซิร์ฟเวอร์ ที่นี่ ฉันใช้ 10.20.43.1 สำหรับเซิร์ฟเวอร์และจะใช้ 10.20.43.2 สำหรับลูกค้า สามารถใช้ซับเน็ตใดก็ได้ที่นี่ ในการรับที่อยู่ IP ของเซิร์ฟเวอร์และอินเทอร์เฟซ ให้เรียกใช้:
ifconfig
ส่วนที่ไฮไลท์คือ IP Address
สังเกตที่อยู่ IP ของเซิร์ฟเวอร์ สิ่งนี้จำเป็นในระหว่างการกำหนดค่าไคลเอนต์
eth0
อินเตอร์เฟซที่ใช้โดยเซิร์ฟเวอร์เท่าที่เห็นในภาพด้านบนเป็น ชื่ออินเทอร์เฟซอาจแตกต่างกันไปตามเครือข่ายของผู้ใช้ อาจเป็นwlan0
หรือwlp2s0
ในกรณีที่ผู้ใช้เชื่อมต่อกับเครือข่าย WiFi โดยใช้การ์ดไร้สาย
แทนที่อินPostUp
และPostDown
อินเทอร์เฟซของคุณ eth0
ในตัวอย่างนี้มันเป็น PostUp
และPostDown
ไดเรกทีฟใช้เพื่อระบุว่าควรรันคำสั่งใดเมื่อเซิร์ฟเวอร์เริ่มทำงานและหยุดตามลำดับ ในตัวอย่างของเรา เราใช้iptables
คำสั่งเพื่อกำหนดกฎ IP เพื่อให้ลูกค้าใช้ที่อยู่ IP ของเซิร์ฟเวอร์ร่วมกัน กฎจะลดลงเมื่อเซิร์ฟเวอร์หยุด
บันทึกและออกจากไฟล์. เมื่อใช้ vim ให้กดEscจากนั้นพิมพ์:wq
และกดEnterเพื่อบันทึกและออก
หากคุณกำลังใช้ufw
ไฟร์วอลล์บนเซิร์ฟเวอร์ เราจำเป็นต้องอนุญาตการเชื่อมต่อ UDP ไปยังพอร์ตสำหรับเซิร์ฟเวอร์ VPN 51190
ufw allow 51190/udp
เริ่มบริการ
เมื่อกำหนดค่าเสร็จแล้ว เราสามารถเริ่มบริการ Wireguard VPN ได้
หากต้องการเปิดใช้งานบริการเพื่อเริ่มต้นในเวลาบูต ให้เรียกใช้:
systemctl enable [email protected]
โปรดทราบว่านี่wg0
คือชื่อของไฟล์การกำหนดค่า
ในการเริ่มต้นบริการ ให้เรียกใช้:
service [email protected] start
ตรวจสอบว่าบริการได้เริ่มต้นสำเร็จแล้ว:
service [email protected] status
ตรวจสอบว่าอินเทอร์เฟซที่เราสร้างในไฟล์การกำหนดค่าเริ่มต้นขึ้นแล้ว โดยใช้คำสั่ง IP
ip a show wg0
เซิร์ฟเวอร์ Wireguard VPN ได้รับการตั้งค่าและใช้งานแล้ว มากำหนดค่าไคลเอนต์กันตอนนี้
การกำหนดค่าไคลเอนต์
การกำหนดค่าไคลเอนต์สำหรับ Wireguard นั้นเหมือนกับการกำหนดค่าเซิร์ฟเวอร์ไม่มากก็น้อย เราสร้างคีย์สำหรับไคลเอ็นต์ จากนั้นจึงสร้างไฟล์การกำหนดค่า
กุญแจรักษาความปลอดภัย
ในการสร้างคู่คีย์สาธารณะ/ส่วนตัวสำหรับไคลเอ็นต์ ให้รัน:
sudo su
cd /etc/wireguard
umask 077
wg genkey | tee client_private_key | wg pubkey > client_public_key
คีย์ภาครัฐและเอกชนสำหรับลูกค้าที่ถูกสร้างขึ้นในขณะนี้ตามลำดับในแฟ้มและclient_private_key
client_public_key
ตรวจสอบว่าได้สร้างขึ้นโดยใช้cat
คำสั่ง
cat client_private_key
cat client_public_key
คัดลอกคีย์ส่วนตัวที่แสดงในขณะที่เราต้องเพิ่มไปยังไฟล์การกำหนดค่าสำหรับไคลเอ็นต์
ไฟล์กำหนดค่า
สร้างไฟล์การกำหนดค่าด้วยชื่อที่คุณต้องการ เราจะสร้างมันขึ้นมาโดยใช้ชื่อwg0-client
สำหรับตัวอย่างนี้
vim wg0-client.conf
เพิ่มการกำหนดค่าต่อไปนี้
[Interface]
# IP Address and Private Key of the Client
Address = 10.20.43.2/24
PrivateKey =
[Peer]
# Public key, IP Address and Port of the Server
PublicKey =
Endpoint = :51190
AllowedIPs = 0.0.0.0/0, ::/0
ป้อนที่อยู่เครือข่ายย่อยสำหรับลูกค้า ตามที่อธิบายไว้ก่อนหน้านี้ เราใช้10.20.43.2
สำหรับลูกค้าในตัวอย่างนี้
เพิ่มคีย์ส่วนตัวของไคลเอ็นต์ที่สร้างในขั้นตอนก่อนหน้าลงในบรรทัดที่ 4 ในโค้ดการกำหนดค่าด้านบน
ภายใต้ 'เพียร์' เราเพิ่มข้อมูลเกี่ยวกับเซิร์ฟเวอร์ Wireguard VPN ที่เราต้องการเชื่อมต่อ
ป้อนคีย์สาธารณะของเซิร์ฟเวอร์ ใส่ของเซิร์ฟเวอร์ที่อยู่ IPซึ่งเราตั้งข้อสังเกตก่อนหน้านี้และพอร์ตในรูปแบบให้กับปลายทาง นี่คือพอร์ตที่เราระบุในไฟล์การกำหนดค่าเซิร์ฟเวอร์และที่บริการ VPN บนเซิร์ฟเวอร์เริ่มทำงาน
ควรป้อน IP ที่อนุญาตตามที่กำหนด (0.0.0.0/0) เพื่อให้คำขอใด ๆ บน IP สาธารณะแบบไดนามิกที่ใช้โดยไคลเอ็นต์ส่งต่อไปยังเซิร์ฟเวอร์ VPN เสมอ
บันทึกและออกจากไฟล์. เมื่อใช้ vim ให้กดEscจากนั้นพิมพ์:wq
และกดEnterเพื่อบันทึกและออก
เปิดใช้งานบริการลูกค้าเพื่อให้ทำงานทุกครั้งที่เปิดเครื่อง และเริ่มการทำงาน
systemctl enable [email protected]
service [email protected] start
ตรวจสอบว่าบริการได้เริ่มต้นขึ้น
service [email protected] status
การเพิ่มเพียร์ให้กับเซิร์ฟเวอร์
ตอนนี้เรามีเซิร์ฟเวอร์ VPN และไคลเอนต์พร้อมทำงานแล้ว อย่างไรก็ตาม อุโมงค์ข้อมูลที่ปลอดภัยระหว่างทั้งสองจะไม่ถูกสร้างขึ้น เว้นแต่เราจะสร้างการเชื่อมต่อแบบเพียร์ทูเพียร์ระหว่างเซิร์ฟเวอร์และไคลเอนต์
กลับไปที่เซิร์ฟเวอร์ ขั้นแรกให้หยุดบริการ VPN
service [email protected] stop
ถัดไป เปิดไฟล์การกำหนดค่าเพื่อเพิ่มการกำหนดค่าสำหรับเพียร์ (ไคลเอนต์)
vim /etc/wireguard/wg0.conf
ต่อท้ายบรรทัดต่อไปนี้ในไฟล์
[Peer]
PublicKey =
AllowedIPs = 10.20.43.2/32
ตอนนี้เริ่มบริการ VPN อีกครั้ง
service [email protected] start
แค่นั้นแหละ! นี่คือการกำหนดค่าทั้งหมดที่จำเป็นสำหรับไคลเอนต์ Wireguard VPN และการตั้งค่าเซิร์ฟเวอร์ มาทดสอบ VPN ของเรากัน
การทดสอบ VPN
ขั้นแรก ให้ทำการ ping แบบง่าย ๆ จากไคลเอนต์ไปยังเซิร์ฟเวอร์ เพื่อให้แน่ใจว่าการสื่อสารทันเนล VPN ใช้งานได้ รันสิ่งต่อไปนี้บนไคลเอนต์ :
ping 10.20.43.1
ถัดไปเปิดเว็บเบราว์เซอร์และเปิดเว็บไซต์ใดๆเพื่อตรวจสอบว่าคุณสามารถเชื่อมต่ออินเทอร์เน็ตจากเครื่องไคลเอนต์ได้หรือไม่ wget
นอกจากนี้คุณยังสามารถตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณจากบรรทัดคำสั่งโดยใช้
wget
ตอนนี้ เราได้ตรวจสอบการเชื่อมต่อทันเนลและการเชื่อมต่ออินเทอร์เน็ตแล้ว หากทั้งสองใช้งานได้ ตอนนี้เราต้องตรวจสอบให้แน่ใจว่าการรับส่งข้อมูลทางอินเทอร์เน็ตทั้งหมดที่มาถึงไคลเอนต์นั้นส่งผ่านเซิร์ฟเวอร์
สำหรับสิ่งนี้ เราเพียงแค่ต้องตรวจสอบที่อยู่ IP ของไคลเอนต์ตามที่เห็นในอินเทอร์เน็ต วิธีการหนึ่งที่จะทำคือการไปที่whatsmyip.org หรือจากบรรทัดคำสั่ง เราสามารถสอบถามบริการอื่นที่คล้ายกันที่เรียกว่าข้อมูล IP โดยใช้ Curl
เรียกใช้สิ่งต่อไปนี้บนเครื่องไคลเอนต์
curl https://ipinfo.io/ip
ใช่. เป็นที่อยู่ IP สาธารณะของ Linode ที่โฮสต์เซิร์ฟเวอร์ VPN นี่คือวิธีการปกปิดตัวตนโดยใช้ VPN เนื่องจากตอนนี้ IP ของเซิร์ฟเวอร์ VPN มองเห็นได้ทั่วอินเทอร์เน็ตและไม่ใช่คอมพิวเตอร์ของคุณ
บทสรุป
ความง่ายในการตั้งค่าเป็นหนึ่งในข้อได้เปรียบที่สำคัญที่สุดของ Wireguard เหนือซอฟต์แวร์ VPN แบบเดิม เช่น OpenVPN ซึ่งต้องการความรู้ด้านเครือข่ายและการกำหนดเส้นทางในระดับที่สูงขึ้นเพื่อตั้งค่า อย่างไรก็ตาม ไม่มีเอกสารอย่างเป็นทางการโดยละเอียดสำหรับ Wireguard ซึ่งอาจทำให้เกิดปัญหาหากการตั้งค่า Wireguard ของคุณเกิดข้อผิดพลาดหรือไม่ทำงานตามที่คาดไว้
อย่างไรก็ตาม Wireguard เป็นตัวเลือกที่ยอดเยี่ยมหากคุณต้องการ VPN ที่โฮสต์ด้วยตนเองเพื่อการสื่อสารที่ปลอดภัยบนอินเทอร์เน็ต ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Wireguard และโปรโตคอลและเทคโนโลยีที่จะใช้คุณสามารถตรวจสอบเว็บไซต์อย่างเป็นทางการ