ตั้ง Kill Switch สำหรับ VPN บน Linux อย่างไร
บน Linux kill switch คือกฎไฟร์วอลล์ ไม่ใช่ปุ่ม สามวิธีในการสร้าง ทราฟฟิกที่ยังต้องอนุญาต และขั้นตอนทดสอบอย่างปลอดภัย
อ่าน 12 นาทีอัปเดตเมื่อ 15 ต.ค. 2569โดย XPASS Editorial Team

VPN ปกป้องคุณเฉพาะตอนที่มันยังทำงานอยู่ เมื่ออุโมงค์หลุดเพราะ Wi-Fi สะดุด เซิร์ฟเวอร์รีสตาร์ต หรือโน้ตบุ๊กตื่นจากโหมดหลับ ระบบปฏิบัติการจะกลับไปใช้การเชื่อมต่อปกติอย่างเงียบ ๆ และอะไรก็ตามที่ลองใหม่ในจังหวะนั้นจะออกไปด้วยที่อยู่จริงของคุณ kill switch ปิดช่องว่างนี้ด้วยการบล็อกเส้นทางปกติเมื่อไม่มีอุโมงค์
บน Windows หรือมือถือ kill switch เป็นช่องติ๊ก แต่บน Linux VPN Kill Switch Linux หมายถึงสิ่งต่างออกไป คือกฎไฟร์วอลล์ที่คุณเขียนเอง ฟังดูหนักกว่าความเป็นจริง บทความนี้แสดงสามวิธีในการสร้าง อธิบายว่าทราฟฟิกใดที่ยังต้องอนุญาตเพื่อไม่ให้ตัดขาตัวเอง และให้วิธีทดสอบที่ปลอดภัย แนวคิดพื้นฐานอยู่ใน kill switch ของ VPN คืออะไร ที่นี่เราเน้นการสร้างและตรวจสอบเท่านั้น
kill switch บน Linux คืออะไรจริง ๆ
Linux กรองแพ็กเก็ตในเคอร์เนลด้วย netfilter ส่วน nftables, iptables และ ufw เป็นส่วนหน้าที่ต่างกันของกลไกเดียวกัน kill switch คือนโยบายหนึ่งชุดที่เขียนในกลไกนั้น
- อนุญาตทราฟฟิกบนอินเทอร์เฟซ loopback
- อนุญาตทราฟฟิกที่ออกทางอินเทอร์เฟซ VPN เช่น
wg0หรือtun0 - อนุญาตทราฟฟิกเล็กน้อยที่ใช้สร้างอุโมงค์ คือแพ็กเก็ตไปยังที่อยู่และพอร์ตของเซิร์ฟเวอร์ VPN
- อนุญาตสิ่งที่คุณตั้งใจให้อยู่นอกอุโมงค์ เช่นเครือข่ายเครื่องพิมพ์ในบ้าน ถ้ามี
- ทิ้งหรือปฏิเสธทุกอย่างที่เหลือซึ่งพยายามออกไป
ไม่มีเวทมนตร์ในนี้ หากอุโมงค์หายไป ข้อ 2 จะไม่ตรงกับอะไรเลย ข้อ 5 รับส่วนที่เหลือ และแอปจะหมดเวลาแทนที่จะเชื่อมต่อแบบเปิดโล่ง เพราะนโยบายนี้เป็นกฎไฟร์วอลล์ มันจึงทำงานไม่ว่าอุโมงค์จะถูกจัดการด้วย wg-quick, NetworkManager หรือคำสั่ง OpenVPN เปล่า ๆ

ตัดสินใจว่าจะบล็อกอะไร
เลือกระดับก่อนเขียนอะไร
| แนวทาง | บล็อกอะไร | จุดแข็ง | ความเสี่ยง |
|---|---|---|---|
| กฎ PostUp ของ wg-quick | ทุกอย่างที่ไม่ผ่านอินเทอร์เฟซ WireGuard ขณะที่ยังทำงาน | อยู่ในไฟล์ตั้งค่า ขึ้นและหายไปพร้อมอุโมงค์ | ไม่ปกป้องก่อนอุโมงค์เริ่มหรือหลังปิดอุโมงค์ |
| นโยบาย nftables ถาวร | ทุกอย่างยกเว้นอุโมงค์ เซิร์ฟเวอร์ และข้อยกเว้น ตลอดเวลา | ปกป้องช่วงบูต โหมดหลับ และช่วงเชื่อมต่อใหม่ | ต้องดูแลข้อยกเว้น ผิดพลาดแล้วอาจหลุดจากเครื่อง |
| ufw ปฏิเสธขาออกโดยปริยาย | แนวคิดเดียวกันด้วยเครื่องมือที่เป็นมิตรกว่า | อ่านง่ายและคงอยู่หลังรีบูต | ต้องมีกฎอนุญาตหลายข้อ ลืม DHCP ง่าย |
| ควบคุมต่อแอป | เฉพาะโปรแกรมเดียว | มีประโยชน์กับแอปเดียว | แอปอื่นยังรั่ว |
ต้องเข้าใจข้อแลกเปลี่ยนหนึ่งข้อ กฎที่มีเฉพาะตอนอุโมงค์ขึ้นไม่อาจปกป้องช่วงรอบ ๆ ได้ ส่วนนโยบายถาวรปกป้องช่วงเหล่านั้นแต่หมายความว่าคอมพิวเตอร์ไม่มีอินเทอร์เน็ตเลยจนกว่าจะเปิดอุโมงค์ สำหรับโน้ตบุ๊กที่ใช้บน Wi-Fi สาธารณะ หลายคนยอมรับได้ ส่วนเครื่องในบ้านบางคนชอบกฎที่เบากว่า
วิธีที่ 1 กฎภายใน wg-quick
เอกสารของ WireGuard เองอธิบายสองบรรทัดที่ใส่ในส่วน Interface ของไฟล์ได้ ทำให้เพิ่มกฎเมื่ออุโมงค์ขึ้นและลบเมื่ออุโมงค์ลง
[Interface]
PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT && ip6tables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT
วิธีอ่าน ปฏิเสธแพ็กเก็ตขาออกที่ไม่ได้ออกทางอินเทอร์เฟซอุโมงค์ (%i) ไม่ได้ถูกทำเครื่องหมายว่าเป็นทราฟฟิกเข้ารหัสของอุโมงค์เอง (fwmark ที่ WireGuard ตั้ง) และไม่ได้ส่งไปยังที่อยู่ในเครื่อง แพ็กเก็ตของอุโมงค์เองที่ไปหาเซิร์ฟเวอร์มีเครื่องหมายนั้นจึงผ่านได้
ข้อจำกัดที่ควรรู้ วิธีนี้ใช้กับ wg-quick ไม่ใช่โปรไฟล์ WireGuard ที่นำเข้า NetworkManager และดิสโทรที่ใช้แบ็กเอนด์ nft สำหรับ iptables ก็ทำงานแบบเดียวกัน เพราะกฎถูกลบใน PreDown การรัน wg-quick down จะคืนอินเทอร์เน็ตตามปกติ ซึ่งถูกต้องเมื่อคุณเลือกตัดการเชื่อมต่อเอง แต่ถ้าแครชข้าม PreDown กฎอาจค้างอยู่ ตรวจด้วย sudo iptables -S OUTPUT
วิธีที่ 2 นโยบาย nftables ถาวร
nftables ให้คุณอธิบายนโยบายทั้งหมดในไฟล์เดียวที่อ่านง่าย แทนตัวพิมพ์ใหญ่ด้วยค่าของคุณ
table inet killswitch {
chain output {
type filter hook output priority 0; policy accept;
oif "lo" accept
oifname "wg0" accept
ip daddr SERVER_IP udp dport 51820 accept
ip daddr 192.168.1.0/24 accept
udp dport { 67, 68 } accept
counter drop
}
}
โหลดด้วย sudo nft -f killswitch.nft และลบด้วย sudo nft delete table inet killswitch หมายเหตุแต่ละบรรทัด
oif "lo"ทำให้บริการในเครื่อง เช่น DNS stub ยังทำงานได้oifname "wg0"อนุญาตทุกอย่างที่ออกผ่านอุโมงค์ ใช้tun0สำหรับ OpenVPN- บรรทัด
SERVER_IPให้แพ็กเก็ตที่เข้ารหัสไปถึงเซิร์ฟเวอร์ VPN ใช้ที่อยู่ ไม่ใช่ชื่อโฮสต์ เพราะต้องแปลงชื่อนอกอุโมงค์ก่อนจึงจะทำงาน - บรรทัดซับเน็ตในบ้านเป็นทางเลือก ทำให้เครื่องพิมพ์และ NAS ยังเข้าถึงได้ ลบออกหากไม่ต้องการ
- พอร์ต DHCP ให้เครื่องต่ออายุที่อยู่บน Wi-Fi ได้ หากไม่มี การเชื่อมต่อจะตายเมื่อสัญญาเช่าหมดอายุ
counter dropปิดท้ายเชนและแสดงจำนวนแพ็กเก็ตที่ถูกบล็อก มีประโยชน์ตอนทดสอบ
เพราะตารางชื่อ inet ครอบคลุมทั้ง IPv4 และ IPv6 ทราฟฟิก IPv6 ที่ไม่ได้ออกทางอุโมงค์จะถูกทิ้ง ซึ่งป้องกัน การรั่วของ IPv6 ที่หลายคนมองข้าม IPv6 ถูกกำหนดไว้ใน RFC 8200 และหลายเครือข่ายใช้เป็นค่าเริ่มต้นในปัจจุบัน จึงอย่าข้ามส่วนนี้
วิธีที่ 3 ufw สำหรับคนที่ชอบคำสั่งง่าย ๆ
ufw เหมาะกับเดสก์ท็อปที่ใช้อยู่แล้ว
sudo ufw default deny outgoing
sudo ufw default deny incoming
sudo ufw allow out on wg0
sudo ufw allow out to SERVER_IP port 51820 proto udp
sudo ufw allow out 67/udp
sudo ufw allow out to 192.168.1.0/24
sudo ufw enable
ufw จัดการ loopback ในกฎเริ่มต้นอยู่แล้ว ตรวจผลด้วย sudo ufw status verbose หากต้องการกู้คืน ปิดด้วย sudo ufw default allow outgoing และ sudo ufw disable กฎของ ufw คงอยู่หลังรีบูต ซึ่งดีต่อการป้องกัน แต่ไม่ดีถ้าคุณลืมว่ามีอยู่และสงสัยว่าทำไมเครือข่ายใหม่ใช้ไม่ได้ อีกเรื่องคือโน้ตบุ๊กที่ย้ายไปเครือข่ายที่มี captive portal ต้องโหลดหน้าพอร์ทัลก่อนอุโมงค์จะเริ่มได้ คุณจึงอาจต้องผ่อนกฎชั่วคราว
อนุญาตสิ่งที่ต้องผ่านให้ได้
การล็อกตัวเองส่วนใหญ่เกิดจากลืมข้อใดข้อหนึ่งเหล่านี้
- เซิร์ฟเวอร์ VPN เอง หากไม่มีกฎสำหรับที่อยู่และพอร์ต อุโมงค์จะไม่มีวันเริ่ม
- DHCP เครื่องขอที่อยู่จากเราเตอร์ผ่านพอร์ต UDP 67 และ 68
- การเข้าถึงเครือข่ายในบ้าน เฉพาะเมื่อคุณต้องการ ไม่เช่นนั้นเว้นไว้
- ชื่อโฮสต์ที่ไฟล์ตั้งค่าใช้ หากไฟล์ใช้ชื่อ ให้แปลงเป็นที่อยู่ก่อนแล้วเขียนที่อยู่
- Captive portal เครือข่ายโรงแรมและร้านกาแฟต้องโหลดหน้าก่อนอุโมงค์จะทำงาน วางแผนขั้นตอนผ่อนกฎด้วยมือ
- ทางเข้าสำรอง บนเครื่องระยะไกล เซสชัน SSH จากที่อยู่เฉพาะอาจต้องมีกฎอนุญาตของตัวเอง ไม่เช่นนั้นคุณเสียเซสชันทันทีที่นโยบายโหลด
เรื่อง SSH โดยเฉพาะ อ่านคำเตือนใน คู่มือบรรทัดคำสั่ง

ทดสอบอย่างปลอดภัย
อย่าโหลด kill switch ใหม่แล้วเดินจากไป ใช้ตัวจับเวลาให้กฎที่ผิดลบตัวเอง
- เปิดเทอร์มินัลสองหน้าต่าง ในหน้าแรก ตั้งเวลาลบ
sleep 300; sudo nft delete table inet killswitch(หรือคำสั่งยกเลิกของ ufw) - ในหน้าที่สอง โหลดกฎ
- ขณะอุโมงค์ขึ้น ตรวจว่าทราฟฟิกปกติใช้ได้
curl -s https://example.org -o /dev/null -w "%{http_code}\n" - ปิดอินเทอร์เฟซโดยไม่ลบกฎ
sudo ip link set wg0 down - ลอง
curlอีกครั้ง ควรล้มเหลวหรือหมดเวลา นั่นคือ kill switch ทำงาน - ตรวจว่า DNS ก็แปลงชื่อไม่ได้นอกอุโมงค์
resolvectl query example.orgไม่ควรคืนคำตอบผ่านลิงก์ Wi-Fi - เปิดอุโมงค์อีกครั้งและยืนยันการกู้คืน หากตัวจับเวลาทำงานก่อน ให้ทำซ้ำด้วยเวลารอที่นานขึ้น
จากนั้นทำตามการตรวจที่กว้างกว่าใน วิธีทดสอบ VPN รวมถึงการตรวจที่อยู่สาธารณะและ IPv6
ทำให้ถาวร และการถอดออก
หากต้องการโหลดกฎ nftables ตอนบูต ให้บันทึกไฟล์ในตำแหน่งที่ดิสโทรคาดไว้ (มักเป็น /etc/nftables.conf) และเปิดบริการ nftables บนระบบที่ใช้ ufw คำสั่ง ufw enable คงอยู่ถาวรอยู่แล้ว สำหรับกฎฮุกของ wg-quick การเปิด wg-quick@wg0 จะเพิ่มกฎทุกครั้งที่เริ่ม
จดวิธีถอดออกไว้ บันทึกที่เขียนว่า "sudo nft delete table inet killswitch" ช่วยให้คุณไม่ต้องเครียดทั้งเย็น หากจะขาย ให้ยืม หรือส่งต่อเครื่อง ให้ถอดนโยบายก่อน
สถานการณ์สั้น ๆ แสดงว่าทำไมข้อยกเว้นจึงสำคัญ เหมยใช้นโยบาย nftables ถาวรบนโน้ตบุ๊ก ที่บ้านทุกอย่างปกติ แต่ที่โรงแรม Wi-Fi แสดงหน้าล็อกอินซึ่งโหลดไม่ได้ เพราะนโยบายบล็อกทุกอย่างยกเว้นอุโมงค์ และอุโมงค์เริ่มไม่ได้หากไม่มีอินเทอร์เน็ต เธอจึงเก็บไฟล์ที่สองซึ่งเป็นนโยบายแบบผ่อนปรน พร้อมคำสั่งบรรทัดเดียวสำหรับสลับ ล็อกอินพอร์ทัลให้เสร็จ แล้วสลับกลับเป็นนโยบายเข้มและเปิดอุโมงค์ ไฟล์เพิ่มนี้ใช้เวลาเขียนสองนาที แต่ช่วยให้เธอไม่ต้องเจอโน้ตบุ๊กที่ล็อกตัวเองในล็อบบี้โรงแรม
ข้อจำกัดและข้อควรระวัง
- kill switch กันการรั่วเมื่ออุโมงค์ล้มเหลว ไม่ได้ทำให้คุณนิรนามและไม่ได้ปกป้องบัญชีจากฟิชชิง
- แอปที่เปิดการเชื่อมต่อค้างไว้แล้วอาจใช้เวลาสักพักกว่าจะล้มเหลว การหมดเวลาสั้น ๆ เป็นเรื่องปกติ
- นโยบายที่พึ่ง fwmark เหมือนวิธีที่ 1 ใช้เฉพาะ WireGuard สำหรับ OpenVPN ให้ใช้นโยบายแบบอิงอินเทอร์เฟซ
- เครื่องมือเดสก์ท็อป เครื่องเสมือน และคอนเทนเนอร์บางตัวมีเครือข่ายของตัวเองและอาจเลี่ยงกฎ OUTPUT ของคุณ ควรตรวจทราฟฟิกของมันด้วย
- อย่าคัดลอกกฎจากอินเทอร์เน็ตที่คุณไม่เข้าใจ บรรทัดที่ทิ้งทราฟฟิกเขียนง่ายแต่แก้ปัญหายาก
สรุป
บน Linux kill switch คือนโยบายไฟร์วอลล์ อนุญาต loopback อินเทอร์เฟซอุโมงค์ แพ็กเก็ตที่ไปถึงเซิร์ฟเวอร์ VPN และข้อยกเว้นไม่กี่ข้อที่ต้องการ แล้วทิ้งที่เหลือ ใช้ฮุกของ wg-quick สำหรับกฎเบาที่ผูกกับอุโมงค์ ใช้ nftables สำหรับนโยบายถาวรที่ครอบคลุมทั้ง IPv4 และ IPv6 หรือ ufw หากชอบคำสั่งง่าย ๆ ทดสอบด้วยตัวจับเวลาที่ลบตัวเอง ยืนยันว่าปิดอุโมงค์แล้วทราฟฟิกหยุดจริง และจดวิธียกเลิกไว้ หากอยากใช้แอปเดสก์ท็อปกับพาสเติมเงิน ดู หน้าดาวน์โหลด และ หน้าราคา
คำถามที่พบบ่อย
Linux มี kill switch ของ VPN ในตัวหรือไม่
ไม่มีเป็นสวิตช์เดียวในเคอร์เนลหรือเดสก์ท็อป kill switch บน Linux คือกฎไฟร์วอลล์ที่ให้ทราฟฟิกออกได้เฉพาะผ่านอินเทอร์เฟซ VPN บวกแพ็กเก็ตที่จำเป็นเพื่อติดต่อเซิร์ฟเวอร์ VPN คุณสร้างได้ด้วย nftables, iptables, ufw หรือฮุกใน wg-quick
kill switch จะล็อกฉันออกจากเครือข่ายของตัวเองไหม
อาจเกิดขึ้นได้หากลืมอนุญาต loopback, DHCP, เครือข่ายในบ้าน หรือที่อยู่เซิร์ฟเวอร์ VPN ควรทดสอบด้วยตัวจับเวลาที่ลบกฎให้อัตโนมัติ และมีคอนโซลสำรองบนเครื่องระยะไกล
ต้องมีกฎแยกสำหรับ IPv6 ไหม
ต้อง หากอุโมงค์ไม่ส่ง IPv6 ทราฟฟิกไปเว็บ IPv6 อาจออกนอกอุโมงค์ ให้บล็อก IPv6 ขาออกแบบเดียวกับ IPv4 หรือปิด IPv6 บนอินเทอร์เฟซจริง
kill switch ช่วยกัน DNS รั่วด้วยไหม
ช่วยกันไม่ให้แพ็กเก็ต DNS ออกทางอินเทอร์เฟซปกติ เพราะบล็อกทุกอย่างยกเว้นอุโมงค์ แต่ยังต้องตั้ง DNS ของอุโมงค์ให้ถูกเพื่อให้การค้นหาสำเร็จภายในอุโมงค์
ใช้กฎชุดเดียวกันกับ OpenVPN ได้ไหม
วิธี nftables และ ufw ใช้ได้กับอินเทอร์เฟซอุโมงค์ใดก็ได้ เช่น tun0 ตราบที่คุณอนุญาตที่อยู่และพอร์ตของเซิร์ฟเวอร์ OpenVPN ส่วนบรรทัดฮุกของ wg-quick ใช้เฉพาะ WireGuard
เกี่ยวกับผู้เขียน

Bob Kanokphon Thongdee
- ผู้ก่อตั้ง XPASS VPN
- ผู้ร่วมก่อตั้ง eSIMonline.asia
- ประสบการณ์ด้านการตลาดออนไลน์มากกว่า 7 ปี
- ผู้ก่อตั้ง Cojourney Visa และ Cojourney Travel
ต้องใช้ VPN ช่วงเดินทางหรือช่วงงานยุ่ง?
XPASS ขายแพ็กเกจแบบเติมเงินตามจำนวนวัน จ่ายครั้งเดียว ไม่มีการต่ออายุอัตโนมัติ
ดูแพ็กเกจอ่านต่อ

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

คู่มือตามอุปกรณ์
วิธีตั้งค่า VPN Kill Switch บน Windows
VPN ในตัว Windows ไม่มีสวิตช์ Kill Switch ดูวิธีมองหาในแอปของคุณ แนวทางตั้งไฟร์วอลล์เอง และวิธีทดสอบผลลัพธ์
อ่าน 10 นาที

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

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

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