ข้ามไปยังเนื้อหา

ตั้ง VPN บน Arch Linux ด้วย WireGuard และ NetworkManager

คู่มือ Arch Linux แบบใช้งานจริง เลือก NetworkManager หรือ systemd-networkd ติดตั้ง wireguard-tools ด้วย pacman นำเข้าไฟล์ จัดการ DNS และดูแลหลังอัปเดตเคอร์เนล

อ่าน 12 นาทีอัปเดตเมื่อ 15 ต.ค. 2569โดย XPASS Editorial Team

ตั้ง VPN บน Arch Linux ด้วย WireGuard และ NetworkManager

Arch Linux ไม่เลือกชุดเครือข่ายให้คุณ ซึ่งเป็นทั้งเสน่ห์และกับดักในเวลาเดียวกัน ระบบที่เพิ่งติดตั้งมีเคอร์เนล เชลล์ และแทบไม่มีอย่างอื่นเลย ดังนั้นทุกส่วนของการตั้งค่า VPN คือการตัดสินใจของคุณเอง จะใช้ตัวจัดการเครือข่ายอะไร ตัวแก้ DNS อะไร เครื่องมือไฟร์วอลล์อะไร เมื่อมีคนบอกว่า VPN "ใช้ไม่ได้บน Arch" ความจริงมักเป็นว่าตัวเลือกสองอย่างที่เลือกไว้ขัดกันเอง

คู่มือนี้พูดถึง VPN Arch Linux ด้วย WireGuard และ NetworkManager ซึ่งเป็นคู่ที่ผู้ใช้เดสก์ท็อปส่วนใหญ่เลือก เริ่มจากตัวเลือกที่สำคัญ ติดตั้งด้วย pacman นำเข้าไฟล์ตั้งค่า จัดการ DNS และจบด้วยนิสัยที่ช่วยไม่ให้เครื่องแบบ rolling release พังหลังอัปเดต ตัวอย่างสมมติว่าคุณมีไฟล์ WireGuard จากเซิร์ฟเวอร์ที่คุณควบคุม จากที่ทำงาน หรือจากห้องแล็บ หากคุณใช้แอปเดสก์ท็อป VPNclient กับพาส XPASS ให้ดู คู่มือตั้งค่าบน Linux ซึ่งเป็นอีกเส้นทางหนึ่งต่างหาก

ทำไม Arch ถึงต่างสำหรับ VPN

มีสามข้อเท็จจริงที่กำหนดทุกอย่างที่เหลือ

  • ไม่มีค่าเริ่มต้นให้พึ่ง ดิสโทรอื่นมาพร้อม NetworkManager และตัวแก้ DNS ที่ต่อเข้าด้วยกันแล้ว บน Arch คุณอาจใช้ NetworkManager, systemd-networkd คู่กับ iwd, netctl หรือคำสั่ง ip ล้วน ๆ คู่มือ VPN ที่ไม่บอกว่าสมมติระบบแบบไหนก็คือการเดา
  • WireGuard อยู่ในเคอร์เนล เคอร์เนล linux และ linux-lts มาตรฐานรวมมาให้แล้ว จึงไม่ต้องคอมไพล์โมดูล แพ็กเกจฝั่งผู้ใช้เพิ่มเพียงคำสั่ง wg และ wg-quick
  • ระบบเป็นแบบ rolling เคอร์เนล NetworkManager และ systemd เดินหน้าทุกครั้งที่รัน pacman -Syu อุโมงค์ที่ใช้ได้เมื่อวันอังคารอาจเจอเคอร์เนลใหม่ในวันศุกร์ นั่นไม่ใช่บั๊ก แต่หมายความว่าคุณควรมีขั้นตอนสั้น ๆ สำหรับตรวจหลังอัปเดต

ผลในทางปฏิบัติคือ ใช้เวลาห้านาทีตรวจยืนยันชุดเครือข่ายของคุณก่อนจะคัดลอกบรรทัดตั้งค่าใด ๆ

เลือกและยืนยันชุดเครือข่ายของคุณ

รันคำสั่งตรวจแบบอ่านอย่างเดียวเหล่านี้

systemctl is-active NetworkManager
systemctl is-active systemd-networkd
systemctl is-active systemd-resolved
ls -l /etc/resolv.conf

อ่านผลดังนี้

สิ่งที่เห็น ความหมาย แนวทางที่แนะนำ
NetworkManager ทำงานอยู่ ระบบเดสก์ท็อปที่มีเมนูและ nmcli นำเข้าไฟล์ WireGuard เข้า NetworkManager
systemd-networkd ทำงาน NetworkManager ไม่ทำงาน ระบบขั้นต่ำหรือแบบเซิร์ฟเวอร์ ใช้คู่ไฟล์ .netdev และ .network หรือ wg-quick
ทำงานทั้งสอง แย่งกันควบคุมอินเทอร์เฟซ เลือกหนึ่งอย่างและปิดอีกอย่าง
resolv.conf เป็นลิงก์ไปไฟล์ stub systemd-resolved เป็นเจ้าของ DNS ใส่ DNS ในโปรไฟล์ NetworkManager จะส่งต่อให้
resolv.conf เป็นไฟล์ธรรมดา มีโปรแกรมอื่นเขียนไฟล์นี้ ติดตั้งและเปิดตัวแก้ DNS หนึ่งตัวอย่างตั้งใจ

หากมีตัวจัดการเครือข่ายทำงานสองตัว ให้แก้ก่อนแตะต้อง VPN เพราะสองโปรแกรมที่พยายามเปิดการ์ด Wi-Fi ใบเดียวกันทำให้หลุดแบบสุ่ม ซึ่งดูเหมือนปัญหาของ VPN

ติดตั้งแพ็กเกจด้วย pacman

บนเดสก์ท็อปที่ใช้ NetworkManager แพ็กเกจที่ต้องใช้มีขนาดเล็ก

sudo pacman -S wireguard-tools networkmanager
sudo systemctl enable --now NetworkManager

หากต้องการแอปเพล็ตแบบกราฟิก network-manager-applet ให้ไอคอนบนถาดระบบสำหรับ window manager หลายแบบ ส่วน GNOME และ KDE มีส่วนหน้าของตัวเอง สำหรับโปรไฟล์ OpenVPN ปลั๊กอินคือ networkmanager-openvpn ส่วน WireGuard ไม่ต้องใช้ปลั๊กอินเพราะ NetworkManager จัดการให้โดยตรง

ตรวจว่าเคอร์เนลทำ WireGuard ได้

sudo modprobe wireguard
lsmod | grep wireguard

ถ้าคำสั่งนี้ล้มเหลวบนเคอร์เนลที่ดัดแปลง ให้ติดตั้งแพ็กเกจ DKMS และ headers ของเคอร์เนลนั้น บนเคอร์เนลมาตรฐานจะสำเร็จทันที ควรจำว่าการอัปเดตเคอร์เนลจะแทนที่โมดูลบนดิสก์ของเคอร์เนลที่กำลังรัน จนกว่าจะรีบูต modprobe ของโมดูลที่ยังไม่ได้โหลดอาจล้มเหลวด้วยข้อความว่าไม่พบไฟล์ การรีบูตหลังอัปเดตเคอร์เนลแก้เรื่องนี้ได้

สร้างหรือขอไฟล์ตั้งค่า

ไฟล์ฝั่งไคลเอนต์หน้าตาประมาณนี้ ค่าที่เป็นตัวพิมพ์ใหญ่คือตัวแทนที่ต้องแทนด้วยค่าของคุณเอง

[Interface]
PrivateKey = YOUR_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 10.8.0.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.net:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

ปฏิบัติต่อคีย์ส่วนตัวเหมือนรหัสผ่าน บันทึกไฟล์เป็น wg0.conf จำกัดสิทธิ์ด้วย chmod 600 wg0.conf และอย่าวางลงในแชตหรือคลังโค้ดสาธารณะ หากสร้างคีย์เอง คำสั่ง wg genkey | tee private.key | wg pubkey > public.key จะสร้างคู่คีย์ให้ ผู้ดูแลเซิร์ฟเวอร์ต้องการแค่คีย์สาธารณะ

มีสองบรรทัดที่ควรใส่ใจ AllowedIPs = 0.0.0.0/0, ::/0 ส่งทราฟฟิก IPv4 และ IPv6 ทั้งหมดผ่านอุโมงค์ รายการที่แคบกว่า เช่นเครือข่ายย่อยเดียว จะส่งเฉพาะทราฟฟิกนั้นและปล่อยที่เหลือไว้ตามเดิม ส่วน PersistentKeepalive = 25 ช่วยเปิดเส้นทางผ่านเราเตอร์ที่บ้าน ซึ่งสำคัญกับโน้ตบุ๊กที่อยู่หลัง NAT

นำเข้าเข้า NetworkManager

NetworkManager อ่านไฟล์ WireGuard มาตรฐานได้โดยตรง

sudo nmcli connection import type wireguard file ~/wg0.conf
nmcli connection show
nmcli connection up wg0

โปรไฟล์จะถูกเก็บใน /etc/NetworkManager/system-connections จากนั้นคุณสลับเปิดปิดจากเมนูบนถาดระบบหรือด้วย nmcli connection up และ down หากต้องการให้เริ่มเอง ใช้ nmcli connection modify wg0 connection.autoconnect yes NetworkManager ยังใช้อุโมงค์ซ้ำเมื่อคุณย้ายจาก Wi-Fi หนึ่งไปอีกวงหนึ่ง ซึ่ง wg-quick ทำเองไม่ได้

หากอยากสร้างโปรไฟล์ทีละช่อง nm-connection-editor มีแท็บ WireGuard ให้ ภาพรวมที่กว้างกว่าว่าโปรไฟล์ ปลั๊กอิน และเส้นทางประกอบกันอย่างไร อ่านได้ใน การเพิ่ม VPN ผ่าน NetworkManager บน Linux

ทางเลือก wg-quick

wg-quick อ่านไฟล์เดียวกันและเปิดอินเทอร์เฟซพร้อมเส้นทางและ DNS ด้วยคำสั่งเดียว

sudo cp ~/wg0.conf /etc/wireguard/wg0.conf
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0

เลือกระหว่างสองเส้นทางอย่างตรงไปตรงมา

คำถาม NetworkManager wg-quick กับ systemd
โน้ตบุ๊กที่ย้ายเครือข่ายบ่อย ดีกว่า ตอบสนองต่อการเปลี่ยน ต้องเขียนสคริปต์เพิ่ม
เซิร์ฟเวอร์หรือเดสก์ท็อปที่บ้านที่เปิดตลอด ใช้ได้ เรียบง่ายและคาดเดาได้
ปุ่มสลับบนถาดสำหรับคนไม่ถนัดเทคนิค มี ไม่มี
ฮุกอย่าง PostUp สำหรับกฎไฟร์วอลล์ จำกัด รองรับเต็มที่
ความเสี่ยงที่ขัดกัน ต่ำ สูงหากนำเข้าไฟล์เดียวกันเข้า NetworkManager ด้วย

ห้ามเปิด wg-quick@wg0 ขณะที่นำเข้าอินเทอร์เฟซเดียวกันเข้า NetworkManager เพราะทั้งสองจะพยายามสร้าง wg0 และคุณจะเจอข้อผิดพลาดแบบ "device already exists" ให้เลือกเจ้าของเพียงหนึ่งสำหรับแต่ละอินเทอร์เฟซ หากต้องการกฎไฟร์วอลล์ที่ปิดกั้นทราฟฟิกนอกอุโมงค์ ฮุกใน wg-quick เป็นที่ที่ใช้กันทั่วไป ดู การตั้ง kill switch บน Linux ซึ่งอธิบายอย่างระมัดระวัง

DNS บน Arch ทำให้ชัดเจน

เพราะ Arch ไม่มีตัวแก้ DNS มาให้ บรรทัด DNS = ในไฟล์จึงไม่มีผลถ้าไม่มีโปรแกรมอ่านมัน ชุดที่สะอาดที่สุดคือ systemd-resolved พร้อมลิงก์ stub

sudo systemctl enable --now systemd-resolved
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
resolvectl status

เมื่อใช้ NetworkManager คู่กับ systemd-resolved เซิร์ฟเวอร์ DNS จากโปรไฟล์จะถูกลงทะเบียนบนลิงก์อุโมงค์ และ resolvectl status wg0 ควรแสดงรายการนั้น หากคุณชอบ openresolv นั้น wg-quick ใช้ให้อัตโนมัติ แต่ต้องไม่เปิด systemd-resolved พร้อมกัน หลังเชื่อมต่อให้ทดสอบด้วย resolvectl query example.org และดูว่าลิงก์ใดเป็นผู้ตอบ ความสำคัญของเรื่องนี้ทบทวนได้ที่ DNS leak คืออะไร และด้าน IPv6 อยู่ที่ การรั่วของ IPv6

เส้นทาง MTU และ handshake

ปัญหาที่เหลือส่วนใหญ่จัดอยู่ในสามกลุ่ม

  1. ไม่มี handshake รัน sudo wg show หาก "latest handshake" ไม่ปรากฏหลังสามสิบวินาที แพ็กเก็ตไปไม่ถึงเซิร์ฟเวอร์หรือคีย์ไม่ตรงกัน ตรวจที่อยู่ endpoint คีย์สาธารณะ และไฟร์วอลล์ของเซิร์ฟเวอร์ บทความ VPN handshake อธิบายความหมายของตัวเลขเหล่านั้น
  2. มี handshake แต่ไม่มีทราฟฟิก ตรวจ ip route และ ip rule เมื่อ AllowedIPs เป็น 0.0.0.0/0 ทั้ง NetworkManager และ wg-quick จะเพิ่มนโยบายเส้นทางเพื่อไม่ให้แพ็กเก็ตของอุโมงค์วนกลับ หากคุณเพิ่มเส้นทางเอง ให้ลบออกแล้วลองใหม่
  3. หน้าใหญ่ค้างแต่หน้าเล็กโหลดได้ ชี้ไปที่ MTU ค่ามาตรฐาน 1420 ของ WireGuard เหมาะกับลิงก์ส่วนใหญ่ แต่การเชื่อมต่อที่มีการห่อหุ้มเพิ่มอาจต้องค่าต่ำลง เช่น 1380 เพิ่ม MTU = 1380 ในส่วน Interface แล้วทดสอบใหม่ เหตุผลอธิบายไว้ใน RFC 1191 เรื่อง path MTU discovery

ขั้นตอนประจำสำหรับการอัปเดตแบบ rolling

ทำตามนี้ทุกครั้งหลัง pacman -Syu ครั้งใหญ่

  1. หากเคอร์เนลหรือ systemd เปลี่ยน ให้รีบูตก่อนเชื่อมต่อ
  2. รัน sudo find /etc -name "*.pacnew" และรวมการเปลี่ยนแปลงของไฟล์ NetworkManager กับตัวแก้ DNS
  3. รัน nmcli connection show เพื่อยืนยันว่าโปรไฟล์ยังอยู่ แล้วเปิดใช้งาน
  4. ตรวจ sudo wg show ว่ามี handshake ล่าสุด และตรวจ resolvectl status สำหรับ DNS
  5. ค่อยเปิดการทดสอบการรั่วเมื่อผ่านทั้งหมดแล้ว

หากการอัปเดตทำให้บางอย่างพัง journalctl -b -u NetworkManager เป็นล็อกแรกที่ควรอ่าน การดาวน์เกรดแพ็กเกจทำได้จากแคชของ pacman แต่การอ่านล็อกมักแก้ได้เร็วกว่า

ข้อผิดพลาดที่พบบ่อย

  • ใช้ NetworkManager และ systemd-networkd กับอินเทอร์เฟซเดียวกัน
  • คัดลอกไฟล์ที่มีบรรทัด DNS = ทั้งที่ไม่ได้ติดตั้งตัวแก้ DNS
  • ปล่อยให้ไฟล์คีย์ส่วนตัวผู้ใช้ทุกคนอ่านได้
  • เปิด wg-quick ตอนบูตและนำเข้าไฟล์เดียวกันเข้า NetworkManager ด้วย
  • ลืมรีบูตหลังอัปเดตเคอร์เนลแล้วโทษ WireGuard
  • เข้าใจว่าอุโมงค์ปกป้อง IPv6 ทั้งที่ AllowedIPs ใส่แค่ IPv4

สรุป

บน Arch ความเสถียรของ VPN ขึ้นกับตัวเลือกที่อยู่ข้างใต้ ยืนยันว่ามีตัวจัดการเครือข่ายหนึ่งตัวและตัวแก้ DNS หนึ่งตัวเป็นผู้ควบคุม ติดตั้ง wireguard-tools และ NetworkManager ด้วย pacman นำเข้าไฟล์ แล้วตรวจ handshake กับ DNS ก่อนเชื่อใจอุโมงค์ มีขั้นตอนตรวจหลังอัปเดตสั้น ๆ แล้วคุณจะใช้ rolling release ได้โดยไม่ต้องเจอเรื่องไม่คาดฝัน

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

คำถามที่พบบ่อย

บน Arch ต้องติดตั้งโมดูลเคอร์เนลสำหรับ WireGuard ไหม

ไม่ต้อง หากใช้เคอร์เนล linux หรือ linux-lts มาตรฐาน เพราะ WireGuard เป็นส่วนหนึ่งของเคอร์เนลหลักอยู่แล้ว ต้องติดตั้งเพียงแพ็กเกจ wireguard-tools เพื่อให้มีคำสั่ง wg และ wg-quick แพ็กเกจ DKMS จำเป็นเฉพาะเคอร์เนลพิเศษที่ไม่มีโมดูลนี้

ควรใช้ wg-quick หรือ NetworkManager บน Arch

ใช้ NetworkManager หากคุณใช้กับ Wi-Fi อยู่แล้ว ต้องการปุ่มเปิดปิดในเมนูและให้เชื่อมต่อใหม่เองเมื่อเครือข่ายเปลี่ยน ใช้ wg-quick ร่วมกับ systemd บนเซิร์ฟเวอร์หรือระบบขั้นต่ำ และห้ามใช้ทั้งสองอย่างกับอินเทอร์เฟซเดียวกัน

ทำไมอุโมงค์ขึ้นแล้วแต่ DNS ใช้ไม่ได้

Arch ไม่เลือกตัวจัดการ DNS ให้ หากไฟล์ตั้งค่ามีบรรทัด DNS แต่ไม่มีโปรแกรมใดนำไปใช้ เช่น systemd-resolved หรือ resolvconf การค้นหาจะยังใช้เซิร์ฟเวอร์เดิมหรือล้มเหลว ให้เปิดใช้ตัวแก้ DNS หนึ่งตัวแล้วทดสอบด้วย resolvectl

หลังอัปเดตด้วย pacman อะไรที่มักพัง

การอัปเดตเคอร์เนลโดยไม่รีบูตอาจทำให้เคอร์เนลที่ทำงานอยู่ไม่ตรงกับโมดูลบนดิสก์ และไฟล์ pacnew อาจมาแทนที่ค่าที่ปรับไว้ ควรรีบูตหลังอัปเดตเคอร์เนลและรวมไฟล์ pacnew ของ NetworkManager กับตัวแก้ DNS

ใช้แอป VPNclient บน Arch ได้ไหม

VPNclient มีตัวติดตั้ง .run สำหรับเดสก์ท็อป Linux โดยยกตัวอย่าง Ubuntu แต่ไม่ได้แพ็กเกจสำหรับ Arch จึงควรทดลองเองและทำตามคู่มือตั้งค่า Linux ในเว็บไซต์นี้ บทความนี้เน้นโปรไฟล์ที่คุณควบคุมเอง

เกี่ยวกับผู้เขียน

Bob Kanokphon Thongdee ผู้ก่อตั้ง XPASS VPN

Bob Kanokphon Thongdee

  • ผู้ก่อตั้ง XPASS VPN
  • ผู้ร่วมก่อตั้ง eSIMonline.asia
  • ประสบการณ์ด้านการตลาดออนไลน์มากกว่า 7 ปี
  • ผู้ก่อตั้ง Cojourney Visa และ Cojourney Travel

ต้องใช้ VPN ช่วงเดินทางหรือช่วงงานยุ่ง?

XPASS ขายแพ็กเกจแบบเติมเงินตามจำนวนวัน จ่ายครั้งเดียว ไม่มีการต่ออายุอัตโนมัติ

ดูแพ็กเกจ

อ่านต่อ

ความปลอดภัยของ VPN

WireGuard กับ OpenVPN ต่างกันอย่างไร

WireGuard และ OpenVPN สร้างอุโมงค์เข้ารหัสเหมือนกัน แต่ต่างกันที่การออกแบบ ความซับซ้อน และความยืดหยุ่น บทความนี้เปรียบเทียบให้เข้าใจง่าย

อ่าน 9 นาที

คู่มือตามอุปกรณ์

วิธีตั้งค่า VPN บน Linux

ทีละขั้นตอน: ดาวน์โหลดตัวติดตั้ง VPNclient สำหรับ Linux รันจากเทอร์มินัล ล็อกอินด้วยข้อมูลจาก My Pass แล้วเชื่อมต่อ

อ่าน 6 นาที

ความปลอดภัยของ VPN

VPN Kill Switch คืออะไร

Kill switch ช่วยไม่ให้อุปกรณ์ของคุณใช้การเชื่อมต่อที่ไม่มีการป้องกันอย่างเงียบ ๆ เมื่อ VPN หลุด บทความนี้อธิบายหลักการและวิธีตรวจสอบ

อ่าน 12 นาที

ความปลอดภัยของ VPN

IPv6 Leak เกิดจากอะไร? VPN ป้องกันได้ไหม

คู่มือลงมือทำเรื่อง IPv6 Leak ของ VPN ทำไมระบบที่อยู่สองแบบจึงเกิดช่องโหว่ วิธีทดสอบ วิธีอ่านผล และวิธีแก้ตามลำดับ

อ่าน 10 นาที

ความปลอดภัยของ VPN

VPN Handshake คืออะไร? มีขั้นตอนใดบ้าง

Handshake คือสิ่งที่เกิดขึ้นในช่วงระหว่างกดเชื่อมต่อกับเห็นไอคอนเชื่อมต่อแล้ว บทความนี้แยกขั้นตอน ต้นทุนเป็นรอบการส่ง สิ่งที่ผู้สังเกตเห็นได้ และวิธีวินิจฉัยความล้มเหลวแต่ละแบบ

อ่าน 10 นาที