วิธีตั้งค่าเซิร์ฟเวอร์ WireGuard VPN และไคลเอนต์บน Ubuntu 20.04

ตั้งค่า VPN แบบโฮสต์เองโดยใช้ Wireguard

อา VPN (เครือข่ายส่วนตัวเสมือน) อนุญาตให้ผู้ใช้เชื่อมต่อกับเครือข่ายส่วนตัวจากระยะไกลราวกับว่าคอมพิวเตอร์ของผู้ใช้เชื่อมต่อโดยตรงกับเครือข่ายส่วนตัว เทคโนโลยีนี้ได้รับการพัฒนาในขั้นต้นเพื่อให้สามารถเข้าถึงเครือข่ายส่วนตัวภายในของบริษัทได้จากระยะไกล สำหรับพนักงานที่ไม่ได้อยู่ที่ตำแหน่งของเครือข่ายภายใน

เซิร์ฟเวอร์ VPN ถูกปรับใช้ที่ตำแหน่งของเครือข่ายภายใน เซิร์ฟเวอร์นี้อยู่ในเครือข่ายสาธารณะและสามารถเข้าถึงได้โดยใช้ไคลเอนต์ VPN โดยพนักงาน จำเป็นต้องมีการตรวจสอบสิทธิ์เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ VPN การสื่อสารระหว่างเซิร์ฟเวอร์ VPN และไคลเอนต์ VPN นั้นปลอดภัยโดยใช้โปรโตคอลทันเนล โปรดทราบว่าการสื่อสารนี้อาจเข้ารหัสหรือไม่ก็ได้ แต่โดยปกติในโปรโตคอล VPN ส่วนใหญ่จะเข้ารหัส

การใช้ VPN อีกประการหนึ่งคือการ ไม่เปิดเผยตัวตนเมื่อเข้าถึงอินเทอร์เน็ต หรือเพื่อหลีกเลี่ยงข้อจำกัดทางภูมิศาสตร์ที่กำหนดในขณะที่เข้าถึงบางเว็บไซต์ ในกรณีเช่นนี้ เครือข่ายที่ผู้ใช้ต้องการเชื่อมต่อไม่ใช่เครือข่ายส่วนตัว แต่เป็นอินเทอร์เน็ตแทน

โปรโตคอล VPN จำนวนมากได้รับการพัฒนาในช่วงหลายปีที่ผ่านมา โปรโตคอลเหล่านี้ใช้โปรโตคอลทันเนลและอัลกอริธึมการเข้ารหัสที่แตกต่างกันสำหรับการสื่อสารระหว่างเซิร์ฟเวอร์และไคลเอนต์

หนึ่งในโปรโตคอลดังกล่าวซึ่งกำลังได้รับการใช้งานอย่างกว้างขวางเมื่อเร็ว ๆ นี้คือ ไวร์การ์ด. 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 และไคลเอนต์ เรียกใช้คำสั่งต่อไปนี้ ทั้งบนเครื่องเซิร์ฟเวอร์และเครื่องไคลเอนต์

sudo apt ติดตั้ง wireguard

การกำหนดค่าเซิร์ฟเวอร์

กุญแจรักษาความปลอดภัย

เราจำเป็นต้องสร้างชุดของคู่คีย์สาธารณะ/ส่วนตัว เพื่อตรวจสอบและรักษาความปลอดภัยการเชื่อมต่อ Wireguard สามารถทำได้โดยใช้คำสั่งต่อไปนี้:

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

โปรดทราบว่าเรากำลังดำเนินการกำหนดค่าทั้งหมดในฐานะผู้ใช้ระดับสูง เหตุผลก็คือการเข้าถึงไดเร็กทอรี /etc/wireguard ถูกป้องกันสำหรับผู้ใช้ทั่วไป และการเข้าถึงไดเรกทอรีไม่สามารถทำได้ด้วยสิทธิ์ sudo สำหรับผู้ใช้ทั่วไป

ต่อไป เราตั้งค่ามาสก์การสร้างไฟล์เป็น 077. ซึ่งหมายความว่าเมื่อใดก็ตามที่มีการสร้างไฟล์ใหม่ในโฟลเดอร์นี้โดยกระบวนการใดๆ การอนุญาตจะถูกปิดบังโดยอัตโนมัติด้วย 077 เช่น หากไฟล์ถูกสร้างขึ้นในโฟลเดอร์นี้โดยมีสิทธิ์ 777 ไฟล์นั้นจะถูกปิดบังโดยอัตโนมัติและสิทธิ์นั้นจะกลายเป็น 700 อย่างมีประสิทธิภาพ สิ่งนี้ทำเพื่อให้มีเพียงเจ้าของไฟล์เท่านั้นที่มีสิทธิ์ทั้งหมดในไฟล์ และทุกคนไม่มีสิทธิ์

ในบรรทัดถัดไป เราสร้างคู่คีย์สาธารณะ/ส่วนตัว สำหรับเซิร์ฟเวอร์ พวกเขาจะถูกบันทึกไว้ในไฟล์ private_key และ public_key. หากต้องการดูคีย์ ให้เรียกใช้:

cat private_key แมว public_key

คัดลอกคีย์ส่วนตัวเราต้องการในขั้นตอนถัดไป

บันทึก: อย่าแชร์คีย์ส่วนตัวของคุณแบบสาธารณะ!

ไฟล์กำหนดค่า

มาสร้างไฟล์กำหนดค่าสำหรับเซิร์ฟเวอร์ Wireguard กันเถอะ คุณสามารถเลือกชื่อใดก็ได้สำหรับไฟล์ เราจะสร้างไฟล์ wg0.conf ในตัวอย่างนี้

กลุ่ม 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 ไปข้างหน้า -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 ไปข้างหน้า -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 โดยใช้การ์ดไร้สาย

แทนที่ ใน PostUp และ โพสต์ดาวน์ ด้วยอินเทอร์เฟซของคุณ ในตัวอย่างนี้มันคือ eth0.PostUp และ โพสต์ดาวน์ ไดเรกทีฟใช้เพื่อระบุคำสั่งที่ควรรันเมื่อเซิร์ฟเวอร์เริ่มทำงานและหยุดตามลำดับ ในตัวอย่างของเรา เราใช้ the iptables คำสั่งเพื่อกำหนดกฎ IP เพื่อให้ที่อยู่ IP ของเซิร์ฟเวอร์แชร์โดยไคลเอนต์ กฎจะลดลงเมื่อเซิร์ฟเวอร์หยุด

บันทึกและออกจากไฟล์. เมื่อใช้ vim ให้กด เอสคแล้วพิมพ์ :wq แล้วกด เข้า เพื่อบันทึกและออก

หากคุณกำลังใช้ a ufw ไฟร์วอลล์บนเซิร์ฟเวอร์ เราต้องอนุญาตการเชื่อมต่อ UDP ไปยังพอร์ตสำหรับเซิร์ฟเวอร์ VPN, 51190

ufw อนุญาต 51190/udp

เริ่มบริการ

เมื่อกำหนดค่าเสร็จแล้ว เราสามารถเริ่มบริการ Wireguard VPN ได้

การเปิดใช้งาน บริการที่จะเริ่มต้นในเวลาบูตให้รัน:

systemctl เปิดใช้งาน wg-quick@wg0

โปรดทราบว่าที่นี่ wg0 เป็นชื่อไฟล์คอนฟิก

เริ่ม บริการเรียกใช้:

บริการ wg-quick@wg0 start

ตรวจสอบ ว่าบริการได้เริ่มต้นเรียบร้อยแล้ว:

บริการ wg-quick@wg0 สถานะ

ตรวจสอบว่าอินเทอร์เฟซ เราสร้างในไฟล์กำหนดค่าได้เริ่มต้นโดยใช้คำสั่ง IP

ip แสดง wg0

เซิร์ฟเวอร์ Wireguard VPN ได้รับการตั้งค่าและใช้งานแล้ว มากำหนดค่าไคลเอนต์กันตอนนี้

การกำหนดค่าไคลเอนต์

การกำหนดค่าไคลเอนต์สำหรับ Wireguard นั้นเหมือนกับการกำหนดค่าเซิร์ฟเวอร์ไม่มากก็น้อย เราสร้างคีย์สำหรับไคลเอ็นต์ จากนั้นจึงสร้างไฟล์การกำหนดค่า

กุญแจรักษาความปลอดภัย

เพื่อสร้างคีย์สาธารณะ/ส่วนตัว คู่สำหรับลูกค้า เรียกใช้:

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

ตอนนี้คีย์สาธารณะและคีย์ส่วนตัวสำหรับไคลเอ็นต์จะถูกสร้างขึ้นตามลำดับในไฟล์ client_private_key และ ลูกค้า_public_key.

ตรวจสอบว่าได้สร้างขึ้นโดยใช้ แมว สั่งการ.

cat client_private_key ลูกค้าแมว_public_key

คัดลอกคีย์ส่วนตัวที่แสดงในขณะที่เราต้องเพิ่มไปยังไฟล์การกำหนดค่าสำหรับไคลเอ็นต์

ไฟล์กำหนดค่า

สร้างไฟล์การกำหนดค่า ด้วยชื่อที่คุณต้องการ เราจะสร้างมันขึ้นมาโดยใช้ชื่อ wg0-ลูกค้า สำหรับตัวอย่างนี้

กลุ่ม wg0-client.conf

เพิ่มการกำหนดค่าต่อไปนี้

[อินเทอร์เฟซ] # IP Address และ Private Key ของ Client Address = 10.20.43.2/24 PrivateKey = [Peer] # Public key, IP Address และ Port ของเซิร์ฟเวอร์ 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 ให้กด เอสคแล้วพิมพ์ :wq แล้วกด เข้า เพื่อบันทึกและออก

เปิดใช้งานการบริการลูกค้า เพื่อรันกับทุกบูท และเริ่มต้นมัน

systemctl เปิดใช้งาน wg-quick@wg-client service wg-quick@wg-client start

ตรวจสอบ หากบริการได้เริ่มต้นขึ้น

บริการ wg-quick@wg-client สถานะ

การเพิ่มเพียร์ให้กับเซิร์ฟเวอร์

ตอนนี้เรามีเซิร์ฟเวอร์ VPN และไคลเอนต์พร้อมทำงานแล้ว อย่างไรก็ตาม อุโมงค์ข้อมูลที่ปลอดภัยระหว่างทั้งสองจะไม่ถูกสร้างขึ้น เว้นแต่เราจะสร้างการเชื่อมต่อแบบเพียร์ทูเพียร์ระหว่างเซิร์ฟเวอร์และไคลเอนต์

ย้อนกลับ ไปยังเซิร์ฟเวอร์ อันดับแรก, หยุดบริการ VPN.

บริการ wg-quick@wg0 หยุด

ถัดไป เปิดไฟล์การกำหนดค่าไปที่ เพิ่มการกำหนดค่าสำหรับเพียร์ (ลูกค้า).

กลุ่ม /etc/wireguard/wg0.conf

ผนวก บรรทัดต่อไปนี้ไปยังไฟล์.

[เพียร์] PublicKey = AllowedIPs = 10.20.43.2/32

ตอนนี้, เริ่มบริการ VPN อีกครั้ง.

บริการ wg-quick@wg0 start

แค่นั้นแหละ! นี่คือการกำหนดค่าทั้งหมดที่จำเป็นสำหรับไคลเอนต์ Wireguard VPN และการตั้งค่าเซิร์ฟเวอร์ มาทดสอบ VPN ของเรากัน

การทดสอบ VPN

ขั้นแรก ให้ทำการ ping แบบง่าย ๆ จากไคลเอนต์ไปยังเซิร์ฟเวอร์ เพื่อให้แน่ใจว่าการสื่อสารทันเนล VPN ใช้งานได้ เรียกใช้สิ่งต่อไปนี้บนไคลเอนต์:

ปิง 10.20.43.1

ถัดไป, เปิดเว็บเบราว์เซอร์และเปิดเว็บไซต์ใด ๆ เพื่อตรวจสอบว่าคุณสามารถเชื่อมต่ออินเทอร์เน็ตจากเครื่องไคลเอนต์ได้หรือไม่ คุณยังสามารถตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณได้จากบรรทัดคำสั่งโดยใช้ wget.

wget 

ตอนนี้ เราได้ตรวจสอบการเชื่อมต่อทันเนลและการเชื่อมต่ออินเทอร์เน็ตแล้ว หากทั้งสองใช้งานได้ ตอนนี้เราต้องตรวจสอบให้แน่ใจว่าการรับส่งข้อมูลทางอินเทอร์เน็ตทั้งหมดที่มาถึงไคลเอนต์นั้นส่งผ่านเซิร์ฟเวอร์

สำหรับสิ่งนี้ เราเพียงแค่ต้องตรวจสอบที่อยู่ IP ของไคลเอนต์ตามที่เห็นในอินเทอร์เน็ต วิธีหนึ่งที่ทำได้คือไปที่ whatsmyip.org หรือจากบรรทัดคำสั่ง เราสามารถสอบถามบริการอื่นที่คล้ายกันที่เรียกว่าข้อมูล IP โดยใช้ Curl

เรียกใช้สิ่งต่อไปนี้บนเครื่องไคลเอนต์

curl //ipinfo.io/ip

ใช่. เป็นที่อยู่ IP สาธารณะของ Linode ที่โฮสต์เซิร์ฟเวอร์ VPN นี่คือวิธีการปกปิดตัวตนโดยใช้ VPN เนื่องจากตอนนี้ IP ของเซิร์ฟเวอร์ VPN มองเห็นได้ทั่วทั้งอินเทอร์เน็ต ไม่ใช่คอมพิวเตอร์ของคุณ

บทสรุป

ความง่ายในการตั้งค่าเป็นหนึ่งในข้อได้เปรียบที่สำคัญที่สุดของ Wireguard เหนือซอฟต์แวร์ VPN แบบเดิม เช่น OpenVPN ซึ่งต้องการความรู้ด้านเครือข่ายและการกำหนดเส้นทางในระดับที่สูงขึ้นเพื่อตั้งค่า อย่างไรก็ตาม ไม่มีเอกสารอย่างเป็นทางการโดยละเอียดสำหรับ Wireguard ซึ่งอาจทำให้เกิดปัญหาหากการตั้งค่า Wireguard ของคุณเกิดข้อผิดพลาดหรือไม่ทำงานตามที่คาดไว้

อย่างไรก็ตาม Wireguard เป็นตัวเลือกที่ยอดเยี่ยมหากคุณต้องการ VPN ที่โฮสต์ด้วยตนเองเพื่อการสื่อสารที่ปลอดภัยบนอินเทอร์เน็ต หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Wireguard และโปรโตคอลและเทคโนโลยีที่ใช้ คุณสามารถดูได้จากเว็บไซต์ทางการ