ตัวอย่างสถานการณ์: มายาใช้ VPS Debian 12 เป็นจุดเชื่อมต่อ VPN ส่วนตัวเมื่อเธอทำงานจากร้านกาแฟ แล็ปท็อปของเธอควรเชื่อมต่อกับ VPS ผ่านอุโมงค์ WireGuard ที่เข้ารหัส และส่งการรับส่งข้อมูลอินเทอร์เน็ต IPv4 ผ่านเซิร์ฟเวอร์นั้น ตัวอย่างนี้ไม่ใช่รายงานการทดสอบจริง ที่อยู่ IP สาธารณะ คีย์ และเอาต์พุตเทอร์มินัลที่แสดงด้านล่างเป็นเพียงตัวอย่างหรือภาพจำลองเท่านั้น
การตั้งค่านี้เป็น VPN แบบ point-to-site: ไคลเอนต์หนึ่งตัวเชื่อมต่อกับเซิร์ฟเวอร์หนึ่งตัว โดยใช้เครื่องมือ WireGuard ที่มาพร้อมกับ Debian, peer เดียว, การส่งต่อ IPv4 และ IPv4 NAT โดยสมมติว่า VPS มีที่อยู่ IPv4 สาธารณะหรือที่ส่งต่อพอร์ตแล้ว คุณสามารถจัดการได้ด้วย sudo และสามารถเข้าถึงพอร์ต UDP 51820 ได้ คำแนะนำนี้ไม่ได้กำหนดค่า IPv6 แบบ routed หรือเครือข่ายส่วนตัวที่อยู่เบื้องหลัง VPS
วางแผนที่อยู่และทางเข้าออกก่อน
ตัวอย่างนี้ใช้10.8.0.0/24สำหรับ VPN โดยมีทั้ง10.8.0.1บนเซิร์ฟเวอร์และ10.8.0.2บนไคลเอนต์ตัวแรกของ Maya ควรใช้ซับเน็ตที่ไม่ทับซ้อนกับเครือข่าย Wi-Fi, สำนักงาน หรือเครือข่ายคลาวด์ของไคลเอนต์ การชนกันของซับเน็ตอาจทำให้การรับส่งข้อมูลไปยังเส้นทางที่ไม่ถูกต้อง แม้ว่าการเชื่อมต่อจะสำเร็จก็ตาม
WireGuard ใช้การตรวจสอบสิทธิ์ด้วยคีย์สาธารณะ เซิร์ฟเวอร์ต้องการคีย์สาธารณะของไคลเอ็นต์ และไคลเอ็นต์ต้องการคีย์สาธารณะของเซิร์ฟเวอร์ โดยคีย์ส่วนตัวแต่ละอันจะอยู่บนอุปกรณ์ที่เป็นเจ้าของ เอกสาร WireGuard ของ Debian อธิบายถึงการตั้งค่าแพ็กเกจและคู่ค้า ในขณะที่คู่มือเริ่มต้นใช้งานฉบับย่อของ WireGuard อธิบายถึงการสร้างคีย์และพฤติกรรมการเชื่อมต่ออย่างต่อเนื่อง ดูเอกสาร WireGuard ของ Debian และคู่มือเริ่มต้นใช้งานฉบับย่อของ WireGuard
ตั้งค่าเซิร์ฟเวอร์ Debian 12
1. ติดตั้งเครื่องมือ
อัปเดตดัชนีแพ็กเกจและติดตั้ง WireGuard พร้อมกับ nftables ซึ่งจะให้กฎการแปลงที่อยู่ IPv4 ตัวอย่าง เรียกใช้คำสั่งเหล่านี้บน VPS:
sudo apt update
sudo apt install wireguard nftables
Debian จัดเตรียม WireGuard ไว้ในแพ็กwireguardเกจเมตาและเครื่องมือต่างๆ หากเซิร์ฟเวอร์ใช้งานตัวจัดการไฟร์วอลล์อยู่แล้ว เช่น UFW, firewalld หรือกฎที่ผู้ให้บริการจัดการ ให้ตรวจสอบชุดกฎที่ใช้งานอยู่ก่อนที่จะเพิ่มสิ่งใดๆ อย่าแทนที่การกำหนดค่าไฟร์วอลล์ที่มีอยู่ด้วยตัวอย่างนี้
หน้าต่างเทอร์มินัลจะแสดงขั้นตอนการติดตั้งแพ็กเกจ โดยผลลัพธ์ของแพ็กเกจอาจแตกต่างกันไปตามเซิร์ฟเวอร์จำลองและสถานะของระบบ
2. ค้นหาอินเทอร์เฟซที่เปิดให้บุคคลทั่วไปเข้าถึงได้ และเปิดใช้งานการส่งต่อ
ตรวจสอบตารางเส้นทางว่า Debian ใช้พอร์ตใดในการเข้าถึงที่อยู่ IPv4 ภายนอก:
ip route get 1.1.1.1
ในตัวอย่างนี้ เส้นทางใช้eth0. VPS ของคุณอาจแสดงชื่อที่แตกต่างกัน เช่นens3หรือenp1s0; ให้ใช้ชื่อจากเอาต์พุตของคุณเองในกฎ NAT ในภายหลัง นอกจากนี้ โปรดสังเกตที่อยู่ IPv4 สาธารณะหรือชื่อ DNS ของเซิร์ฟเวอร์ หากเซิร์ฟเวอร์อยู่หลังเราเตอร์ ให้ส่งต่อพอร์ต UDP 51820 จากเราเตอร์นั้นไปยังโฮสต์ Debian
การส่งต่อ IPv4 เป็นสิ่งจำเป็นสำหรับอุโมงค์แบบเต็มรูปแบบ เปิดใช้งานตอนนี้และคงการตั้งค่าไว้แม้หลังจากรีบูตเครื่อง:
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system
sysctl net.ipv4.ip_forward
คำสั่งสุดท้ายควรรายงานค่าnet.ipv4.ip_forward = 1นี้ การตั้งค่านี้อนุญาตให้ส่งต่อแพ็กเก็ตได้ แต่ไม่ได้เปิดไฟร์วอลล์หรือให้บริการ NAT โดยอัตโนมัติ
การค้นหาเส้นทางจะระบุอินเทอร์เฟซที่ใช้สำหรับ IPv4 ขาออก ในขณะที่ sysctl จะยืนยันว่าการส่งต่อเปิดใช้งานอยู่
3. สร้างคู่คีย์เซิร์ฟเวอร์และคีย์ไคลเอ็นต์
สร้างคีย์เซิร์ฟเวอร์บนโฮสต์ Debian โดยกำหนดสิทธิ์การเข้าถึงไฟล์อย่างเข้มงวด:
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
สร้างคู่คีย์ไคลเอ็นต์บนอุปกรณ์ไคลเอ็นต์หากเป็นไปได้ บนไคลเอ็นต์ Linux ที่wireguard-toolsติดตั้ง:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
สำหรับโทรศัพท์ ให้สร้างอุโมงค์ใหม่ในแอป WireGuard อย่างเป็นทางการ แล้วปล่อยให้แอปสร้างคีย์โปรไฟล์ คัดลอกเฉพาะคีย์สาธารณะของไคลเอ็นต์ไปยังเซิร์ฟเวอร์ เก็บไว้client.keyเป็นส่วนตัว อย่าวางลงในการตั้งค่าเซิร์ฟเวอร์หรือส่งในแชทคู่มือ Debian Bookwormwg(8) มีเอกสารเกี่ยวกับคำสั่งสำคัญและฟิลด์อินเทอร์เฟซ
4. สร้างอินเทอร์เฟซเซิร์ฟเวอร์และเพิ่มพีร์
สร้าง/etc/wireguard/wg0.confโดยใช้โครงสร้างต่อไปนี้ แทนที่ตัวยึดตำแหน่งตัวพิมพ์ใหญ่แต่ละตัวด้วยคีย์จริงที่เกี่ยวข้อง อ่านคีย์ส่วนตัวของเซิร์ฟเวอร์ในเครื่องด้วยsudo cat /etc/wireguard/server.key; วางคีย์สาธารณะของไคลเอ็นต์ในส่วน peer
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
โปรดปกป้องไฟล์นี้เนื่องจากมีรหัสส่วนตัวอยู่:
sudo chown root:root /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf
AllowedIPs = 10.8.0.2/32กำหนดที่อยู่ VPN หนึ่งรายการให้กับอุปกรณ์นี้ และป้องกันไม่ให้อุปกรณ์อื่นแย่งชิงที่อยู่ดังกล่าว ให้แต่ละอุปกรณ์เพิ่มเติมมีคู่คีย์และที่อยู่ที่ไม่ซ้ำกัน เช่น10.8.0.3/32อย่าใช้โปรไฟล์ไคลเอ็นต์เดียวกันกับหลายอุปกรณ์ หากคุณต้องการการยกเลิกหรือการระบุตัวตนที่แยกต่างหาก
อินเทอร์เฟซของเซิร์ฟเวอร์แสดงรายชื่ออุปกรณ์ปลายทางหนึ่งตัวพร้อมที่อยู่ของอุโมงค์เฉพาะ ข้อมูลสำคัญที่แสดงเป็นเพียงตัวอย่างเท่านั้น
5. ตั้งค่า IPv4 NAT และอนุญาตพอร์ต WireGuard
สำหรับอุโมงค์ IPv4 เต็มรูปแบบตัวอย่าง แพ็กเก็ตขาออก10.8.0.0/24จะต้องออกจากอินเทอร์เฟซที่เชื่อมต่อกับภายนอกโดยใช้ Source NAT เพิ่มกฎที่เทียบเท่ากันลงในการกำหนดค่า nftables หรือตัวจัดการไฟร์วอลล์ที่มีอยู่ของเซิร์ฟเวอร์ ตาราง nftables แบบสแตนด์อโลนนี้แสดงให้เห็นถึงกฎดังกล่าว โปรดแทนที่eth0ด้วยอินเทอร์เฟซที่ค้นพบในขั้นตอนที่ 2:
table ip wg_nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.8.0.0/24 oifname "eth0" masquerade
}
}
หากคุณใช้ Debian nftables.serviceให้ผสานตารางเข้ากับการกำหนดค่าที่บริการโหลดเมื่อบูตเครื่อง และตรวจสอบความถูกต้องของไฟล์ทั้งหมดsudo nft -c -f /etc/nftables.confก่อนที่จะโหลดใหม่ ตรวจสอบว่าการกำหนดค่าปัจจุบันของคุณล้างหรือแทนที่กฎที่มีอยู่ก่อนที่จะนำไปใช้ NAT เพียงอย่างเดียวไม่สามารถแทนที่นโยบาย forward-chain ที่บล็อกทราฟฟิกได้: อนุญาตการส่งต่อจากwg0ไปยังอินเทอร์เฟซ WAN และทราฟฟิกขาเข้าในไฟร์วอลล์ที่ใช้งานอยู่ของคุณ เอกสาร nft(8)คู่มือ ของ Debian อธิบายเกี่ยวกับการโหลดกฎ nftables และคำสั่ง NAT
ทั้งในไฟร์วอลล์ของผู้ให้บริการ VPS และไฟร์วอลล์ของโฮสต์ ให้อนุญาตการรับส่งข้อมูล UDP ขาเข้าที่พอร์ต 51820 อย่าเปิดพอร์ต TCP 51820 สำหรับอุโมงค์ WireGuard นี้ คงกฎการเข้าถึง SSH ไว้เหมือนเดิมในขณะที่เปลี่ยนแปลงนโยบายไฟร์วอลล์ และใช้คอนโซลของผู้ให้บริการหรือช่องทางการกู้คืนอื่นๆ หากการรีโหลดไฟร์วอลล์อาจทำให้คุณถูกตัดการเชื่อมต่อ
กฎนี้จะตรวจสอบทราฟฟิก VPN IPv4 ที่ส่งออกผ่านอินเทอร์เฟซ WAN ที่เลือก และใช้การแปลงที่อยู่เครือข่าย (masquerade)
ตั้งค่าและเชื่อมต่อไคลเอ็นต์
6. สร้างโปรไฟล์ลูกค้า
สร้างอุโมงค์ใหม่ในแอปพลิเคชันไคลเอ็นต์ WireGuard หรือบันทึกการกำหนดค่าแบบนี้บนไคลเอ็นต์ Linux แทนที่คีย์ส่วนตัว คีย์สาธารณะของเซิร์ฟเวอร์ และปลายทางด้วยค่าจริง ที่อยู่ TEST-NET ด้านล่างเป็นเพียงตัวอย่างและจะไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์จริงได้
[Interface]
Address = 10.8.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0เส้นทาง IPv4 จะผ่านอุโมงค์ ดังนั้นจึงเป็นตัวเลือกอุโมงค์ IPv4 แบบเต็มรูปแบบ สำหรับอุโมงค์แบบแยกส่วนที่แคบกว่าซึ่งเข้าถึงเฉพาะที่อยู่เซิร์ฟเวอร์ WireGuard ให้ใช้10.8.0.0/24แทน หากต้องการเข้าถึง LAN ที่อยู่ด้านหลังเซิร์ฟเวอร์ ให้รวมซับเน็ตจริงของ LAN นั้นไว้ในเส้นทางไคลเอ็นต์AllowedIPsเพิ่มเส้นทางส่งกลับหรือ NAT ที่เหมาะสม และอนุญาตให้ทราฟฟิกผ่านไฟร์วอลล์ของเซิร์ฟเวอร์ ขั้นตอนเหล่านั้นขึ้นอยู่กับเราเตอร์ LAN และอยู่นอกเหนือตัวอย่างนี้
PersistentKeepalive = 25สามารถช่วยให้ไคลเอนต์ที่อยู่หลัง NAT ยังคงสามารถเข้าถึงได้หลังจากช่วงเวลาที่ไม่ได้ใช้งาน เป็นตัวเลือกเสริม เอกสารของ WireGuard ระบุว่าผู้ใช้ส่วนใหญ่ไม่จำเป็นต้องใช้ แต่แนะนำช่วงเวลา 25 วินาทีเป็นช่วงเวลาที่มีประโยชน์โดยทั่วไปเมื่อการแมป NAT ต้องเปิดอยู่DNSฟิลด์นี้ได้รับการสนับสนุนโดยไคลเอนต์บางตัวและไคลเอนต์ที่ใช้wg-quick; หากแอปของคุณไม่สนใจ ให้ตั้งค่า DNS ผ่านการควบคุมของแอปนั้นเอง
โปรไฟล์ไคลเอ็นต์จะกำหนดเส้นทาง IPv4 ผ่านเซิร์ฟเวอร์ โดยปลายทาง TEST-NET เป็นเพียงตัวแทน ไม่ใช่ที่อยู่ที่ใช้งานได้จริง
7. เริ่มการเชื่อมต่ออุโมงค์และตรวจสอบการเชื่อมต่อให้เรียบร้อย
บนระบบ Debian ให้เปิดใช้งานอินเทอร์เฟซเมื่อบูตเครื่องด้วยคำสั่ง:
sudo systemctl enable --now wg-quick@wg0
sudo wg show
นำเข้าหรือเปิดใช้งานโปรไฟล์ไคลเอ็นต์หลังจากที่สามารถเข้าถึง UDP 51820 ได้แล้วwg showตรวจสอบว่าคู่ค้าที่คาดหวังปรากฏขึ้นและมีlatest handshakeการอัปเดตหลังจากที่ไคลเอ็นต์ส่งข้อมูลwg-quick(8)คู่มือสำหรับ Debian Bookworm อธิบายถึงตัวช่วยการตั้งค่าอินเทอร์เฟซที่ใช้โดยหน่วย systemd
การเชื่อมต่อที่ไม่สำเร็จบ่งชี้ถึงปัญหาการเข้าถึงหรือความไม่ตรงกันของคีย์เป็นอันดับแรก: ตรวจสอบที่อยู่และพอร์ตของปลายทาง กฎไฟร์วอลล์ UDP คีย์สาธารณะของเซิร์ฟเวอร์ในโปรไฟล์ไคลเอ็นต์ คีย์สาธารณะของไคลเอ็นต์wg0.confและเวลาของระบบที่ถูกต้อง การเชื่อมต่อที่ไม่มีการรับส่งข้อมูลที่ใช้งานได้มักบ่งชี้ถึงการส่งต่อ NAT การทับซ้อนของเส้นทาง หรือกฎการส่งต่อของไฟร์วอลล์
บริการนี้เปิดใช้งานอยู่ และหน้าจอแสดงผลของคู่ค้าประกอบด้วยช่องข้อมูลการจับมือและการโอนถ่ายข้อมูล ค่าที่แสดงเป็นเพียงตัวอย่างเท่านั้น
8. ตรวจสอบปริมาณการรับส่งข้อมูลและทำความเข้าใจข้อจำกัดของ IPv6
เมื่อเชื่อมต่อไคลเอนต์แล้ว ขั้นแรกให้ทดสอบที่อยู่ท่อส่งข้อมูลของเซิร์ฟเวอร์ จากนั้นตรวจสอบที่อยู่ IPv4 สาธารณะที่ได้รับจากบริการตรวจสอบที่อยู่ IPv4 ภายนอก:
ping -c 3 10.8.0.1
curl -4 https://ifconfig.me
หากอนุญาตการใช้ ICMP การ ping ควรไปถึงเซิร์ฟเวอร์ได้ การตรวจสอบ IPv4 ภายนอกควรแสดงที่อยู่ขาออกสาธารณะของ VPS สำหรับการตั้งค่า full-tunnel นี้ หากที่อยู่สาธารณะไม่เปลี่ยนแปลง ให้ตรวจสอบAllowedIPsการส่งต่อ ชื่ออินเทอร์เฟซ NAT และนโยบายการส่งต่อของไฟร์วอลล์
ตัวอย่างนี้ใช้เฉพาะ IPv4 เท่านั้นAllowedIPs = 0.0.0.0/0ไม่รองรับการกำหนดเส้นทาง IPv6 ดังนั้นไคลเอ็นต์ที่มีการเชื่อมต่อ IPv6 อาจยังคงส่งทราฟฟิก IPv6 ออกนอกอุโมงค์ได้ อย่าอธิบายการกำหนดค่านี้ว่าเป็นอุโมงค์ความเป็นส่วนตัวแบบ dual-stack ที่สมบูรณ์ หากต้องการส่ง IPv6 ผ่าน WireGuard ให้จัดสรรและกำหนดเส้นทางที่อยู่ IPv6 สำหรับอุโมงค์ เปิดใช้งานการส่งต่อ IPv6 กำหนดค่าไฟร์วอลล์และกฎการกำหนดเส้นทางที่เหมาะสม และเพิ่ม::/0ไคลเอ็นต์หลังจากที่เส้นทางนั้นทำงานได้ตั้งแต่ต้นจนจบแล้วเท่านั้น การสนับสนุนจากผู้ให้บริการอาจแตกต่างกันไป มิเช่นนั้น ให้เลือกนโยบาย split-tunnel อย่างรอบคอบและตรวจสอบพฤติกรรม IPv6 ของไคลเอ็นต์
โปรไฟล์ไคลเอ็นต์ VPN ทั่วไปถูกเปิดใช้งานและแสดงรายการปลายทางเซิร์ฟเวอร์และที่อยู่ IP ของอุโมงค์ การตั้งค่าจะแตกต่างกันไปตามแอปพลิเคชัน
เทอร์มินัลจะตรวจสอบที่อยู่ขาออก IPv4 และทำการ ping ไปยังที่อยู่ WireGuard ของเซิร์ฟเวอร์ ผลลัพธ์ที่แสดงเป็นเพียงตัวอย่างเท่านั้น
ปัญหาที่พบได้บ่อยและการตรวจสอบขั้นสุดท้ายอย่างรวดเร็ว
ไม่ต้องทำการจับมือ: ยืนยันการรับส่งข้อมูล UDP 51820 ที่ไฟร์วอลล์ของทั้งผู้ให้บริการและโฮสต์ ที่อยู่ IP สาธารณะหรือ DNS ของปลายทาง และคีย์สาธารณะของแต่ละฝ่าย
การเชื่อมต่อสำเร็จ แต่เว็บไซต์โหลดไม่ขึ้น: ตรวจสอบnet.ipv4.ip_forward=1ว่ากฎ NAT ใช้พอร์ตขาออกจริง และไฟร์วอลล์อนุญาตการส่งต่อทราฟฟิกหรือไม่
มีเพียงบางเครือข่ายเท่านั้นที่อาจล้มเหลว: ตรวจสอบว่า10.8.0.0/24มีการทับซ้อนกับเครือข่ายท้องถิ่นหรือเครือข่ายระยะไกลหรือไม่ หากจำเป็น ให้กำหนดหมายเลขอุโมงค์ใหม่ โดยอัปเดตทั้งฝั่งผู้รับและกฎไฟร์วอลล์ไปพร้อมกัน
ระบบจะทำงานจนกว่าจะรีบูต: ตรวจสอบให้แน่ใจwg-quick@wg0ว่าได้เปิดใช้งานไฟร์วอลล์และตั้งค่า sysctl ไว้ในการกำหนดค่าปกติของระบบแล้ว
IPv6 ยังคงใช้การเชื่อมต่อภายในเครื่อง: ซึ่งเป็นเรื่องปกติสำหรับตัวอย่างที่ใช้ IPv4 เท่านั้น ควรตั้งค่าและทดสอบเส้นทางอุโมงค์ IPv6 ก่อนที่จะเชื่อถือการอ้างสิทธิ์ความเป็นส่วนตัวของอุโมงค์แบบเต็มรูปแบบ
ก่อนที่จะสรุปว่าการตั้งค่าเสร็จสมบูรณ์แล้ว ให้ตรวจสอบว่าบริการเซิร์ฟเวอร์ทำงานอยู่wg showรายงานการเชื่อมต่อล่าสุด และตัวนับการถ่ายโอนที่เพิ่มขึ้น ลูกค้าสามารถเข้าถึงได้10.8.0.1และการตรวจสอบขาออก IPv4 รายงานที่อยู่สาธารณะของเซิร์ฟเวอร์ รีบูตเฉพาะหลังจากที่ตั้งค่าไฟร์วอลล์และการส่งต่อแบบถาวรเรียบร้อยแล้ว จากนั้นทำการตรวจสอบเหล่านั้นซ้ำอีกครั้ง สำหรับอุปกรณ์เพิ่มเติม ให้กำหนดคู่คีย์แยกต่างหากและที่อยู่ IP อุโมงค์ที่ไม่ซ้ำกัน จากนั้นลบอุปกรณ์โดยการลบรายการอุปกรณ์นั้นและโหลดอินเทอร์เฟซใหม่