Blog
ทำอย่างไรให้ Wireguard มาใช้กับ Application บน Server ฉบับเข้าใจง่าย

ทำอย่างไรให้ Wireguard มาใช้กับ Application บน Server ฉบับเข้าใจง่าย

poc_ep_1

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

Wireguard คือ ?

WireGuard เป็น VPN ที่เรียบง่ายแต่รวดเร็วและทันสมัยซึ่งใช้การเข้ารหัสที่ล้ำสมัย เช่น Noise protocol framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF รวมถึงพัฒนา Source Code เพียงแค่ 3,800 บรรทัดเท่านั้น เลยมีขนาดเล็ก รองรับการใช้งานบน Application Windows, MacOS, BSD, IOS, Android เหมาะสำหรับนำมาใช้ในหลากหลายในการแก้ไขปัญหา

Wireguard มีอะไรประโยชน์อะไร ?

  1. ปกป้องความเป็นส่วนตัวของเรา
  2. เพิ่มความปลอดภัยของเรา
  3. สร้างช่องการสื่อสารส่วนตัวร่วมกัน
  4. รองรับการโรมมิ่งได้ดี
  5. เร็วในการเชื่อมต่อและการจับคู่
  6. รองรับการใช้งานหลากหลายอุปกรณ์ได้

Wireguard มีข้อจำกัดอยู่

  1. โปรโตคอลและโค้ดยังอยู่ในช่วงทดลองในหลายๆเรื่อง
  2. ยังขาดการสนับสนุนสำหรับแพลตฟอร์มอื่น ๆ นอกเหนือจาก Linux
  3. ยังไม่มีเวอร์ชันแบบสเถียรที่สามารถทำการติดตามแบบ Common Vulnerabilities and Exposures (CVE) tracking ความเสี่ยงเกี่ยวกับความปลอดภัย
  4. ช่องทางการให้บริการยังน้อย หากเทียบกับคู่แข่งในตลาด

ด้านประสิทธิภาพ VPN

ขั้นตอนการติดตั้ง WireGuard

WireGuard Server Step 1

โดยเราจะทำการยกตัวอย่าง OS Linux Ubuntu

setup-wireguard-server.sh
sudo apt install wireguard
sudo apt install wireguard-tools
sudo cd /etc/wireguard
 
umask 077; wg genkey | tee privatekey | wg pubkey > publickey
sudo vim /etc/wireguard/wg0.conf

เราจะต้องทำการสร้าง VPN Interface ขึ้นมา โดย

wg0.conf
[Interface]
##ทำการสร้าง VPN Private IP ของ Server
Address = 10.XX.XX.1/24
ListenPort = 54230
PrivateKey = ##ค้นหาจาก cat privatekey แล้วนำมาวาง

PostUp = iptables -I INPUT -p udp --dport 54230 -j ACCEPT
PostUp = iptables -I FORWARD -i eth0 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport 54230 -j ACCEPT
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

เบื้องต้นในส่วนของ file “wg0.conf” เบื้องต้นให้ทำการทดสอบว่าใช้งานได้จริงหรือไม่ โดยทำการลอง run wg0 เพื่อทดสอบใช้งาน

run-wireguard-server.sh
wg-quick up wg0
wg show ##ทำการดูว่า wg0 มาจริงๆแล้วหรือไม่ เมื่อมาแล้วลองทำการทดสอบว่าภายในคุยกันได้หรือไม่
 
ping 10.XX.XX.1 ##ทดสอบว่าปิงติดไหม

PING 10.XX.XX.1 (10.XX.XX.1) 56(84) bytes of data.
64 bytes from 10.XX.XX.1: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 10.XX.XX.1: icmp_seq=2 ttl=64 time=0.073 ms
#ถือเป็นอันเสร็จสิ้นและใช้งานได้สำหรับฝั่ง Server

WireGuard Client Step 1

โดยเราจะทำการยกตัวอย่าง MacOS ในการใช้งาน ทำการเปิด Wireguard Tunnels

ให้ทำการคัดลอก Public Key and Private Key มาสร้างเป็น File เพื่อจะได้ไม่ลืม โดยตั้งค่าพื้นฐานตามนี้

PrivateKey

cIjzDNL4htYeTzqdtAC3wp04/leqKRgqwJ+AoJIEkXU=

PublicKey

HpTeWSoREL2VpM7wHOfs3BtWljM2k1nhXAt8mC2ww0E=
peer1.conf
[Interface]
PrivateKey = cIjzDNL4htYeTzqdtAC3wp04/leqKRgqwJ+AoJIEkXU=
Address = 10.XX.XX.2/32
DNS = 1.1.1.1, 1.0.0.1

[Peer]
PublicKey = ##นำจาก Key Public Server ที่ทำการ gen นำมาใส่ไว้
AllowedIPs = 0.0.0.0/0
Endpoint = XXX.XXX.XXX.XXX:54230 #IP Server

WireGuard Server Step 2

ให้เราทำการกลับมาจัดการทฝั่ง Server อีกครั้ง โดยทำตามขั้นตอน

sudo cd /etc/wireguard
sudo vim wg0.conf
wg0.conf
[Interface]
##ทำการสร้าง VPN Private IP ของ Server
Address = 10.XX.XX.1/24
ListenPort = 54230
PrivateKey = ##ค้นหาจาก cat privatekey แล้วนำมาวาง

PostUp = iptables -I INPUT -p udp --dport 54230 -j ACCEPT
PostUp = iptables -I FORWARD -i eth0 -o wg0 -j ACCEPT
PostUp = iptables -I FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D INPUT -p udp --dport 54230 -j ACCEPT
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey =  #ทำการอ้างอิง Public Key มาจาก Client
AllowedIPs = 10.XX.XX.2/32

ทำการเปิด อัพเดท Wireguard ในฝั่ง Server ด้วย

wg-quick up wg0 ##จัดการ Up Interface Wireguard
wg-quick down wg0 ##จัดการ Down Interface Wireguard
wg show ##เพื่อตรวจสอบว่ามีการเปลี่ยนแปลงหรือไม่

กรณีที่ต้องการจัดการ wireguard autostart

systemctl enable [email protected]
systemctl daemon-reload

WireGuard Client Step 2

ให้เราทำการกลับมาจัดการทฝั่ง Client อีกครั้ง โดยทำตามขั้นตอน ✌️

เบื้องต้นจะทำการตรวจสอบว่า Client กับ Server มีการสื่อสารการแล้วหรือไม่ให้ทำการเปิด Terminal

ping 10.XX.XX.1

PING 10.XX.XX.1 (10.XX.XX.1) 56(84) bytes of data.
64 bytes from 10.XX.XX.1: icmp_seq=1 ttl=64 time=0.048 ms
64 bytes from 10.XX.XX.1: icmp_seq=2 ttl=64 time=0.073 ms
#ถือเป็นอันเสร็จสิ้นและใช้งานได้สำหรับฝั่ง Client

เท่านี้ก็เป็นอันเสร็จสิ้น 👍 🥳🥳🥳🥳🥳🥳🥳

ที่นี้ลองทำการสร้าง Application ของเรา ขึ้นมาแล้วใช้งาน โดยให้ Client ทำการเชื่อมต่อไปหา Server ที่นี่เราก็สามารถใช้งานได้แล้ว

เพิ่มเติมกรณีที่เราอยากให้ เรารองรับการเชื่อมต่อ client to server จะใช้ networks อื่น ๆ ไม่ให้ช่องการการเชื่อมต่อล่าช้าเราสามารถทำการเพิ่ม allowedIP โดยการเพิ่มช่องทางในการรับได้มากขึ้น เช่น 10.XX.XX.0/24 , X.X.X.X

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

หากท่านชอบและรู้สึกว่ามีประโยชน์ รบกวนแชร์และแบ่งปันให้ผู้ที่สนใจและควรจะได้รับการเข้าถึงบทความนี้ แล้วพบกันใหม่ครับ