วิธีตั้งค่า VPS ให้เป็น Tailscale exit node อย่างละเอียด
เปลี่ยน VPS ให้เป็น Tailscale exit node เพื่อใช้งานอินเทอร์เน็ตผ่าน IP สาธารณะของเซิร์ฟเวอร์ เรียนรู้วิธีติดตั้ง ประกาศโหนด เปิด IP forwarding และตั้งค่า DNS ให้ถูกต้อง
หน้าที่ของ Tailscale exit node
Tailscale exit node คือเครื่องใน tailnet ของคุณที่ทำหน้าที่รับส่งข้อมูลอินเทอร์เน็ตทั้งหมดให้กับอุปกรณ์อื่น ๆ ของคุณ โดย VPS (virtual private server) เป็นตัวเลือกที่เหมาะสมเนื่องจากมีหมายเลข IP สาธารณะที่คงที่และออนไลน์อยู่ตลอดเวลา การตั้งค่ามี 5 ขั้นตอน ได้แก่ ติดตั้ง Tailscale บนเซิร์ฟเวอร์, ประกาศตัวเป็น exit node, เปิดใช้งาน IP forwarding, อนุมัติเส้นทางใน admin console และเลือกโหนดดังกล่าวบนแล็ปท็อปของคุณ ขั้นตอนที่สี่เป็นการสลับสวิตช์บนหน้าเว็บไม่ใช่การใช้คำสั่ง ซึ่งเป็นจุดที่ผู้ใช้ส่วนใหญ่มักติดขัด
เมื่อเปิดใช้งานแล้ว แล็ปท็อปของคุณจะเข้ารหัสแพ็กเก็ตข้อมูลทั้งหมดแล้วส่งไปยัง VPS จากนั้น VPS จะทำ source NAT (network address translation) และส่งแพ็กเก็ตออกไปด้วยหมายเลข IP สาธารณะของตัวมันเอง เว็บไซต์ต่าง ๆ จะมองเห็นเป็น VPS ส่วน Wi-Fi ของร้านกาแฟจะเห็นเพียงการเชื่อมต่อ UDP ที่เข้ารหัสไปยัง VPS เท่านั้นโดยไม่เห็นข้อมูลอื่น
Tailscale คือ WireGuard ในส่วนของเส้นทางข้อมูล (data path) ร่วมกับ coordination server ที่ทำหน้าที่แจกจ่ายคีย์และช่วยให้อุปกรณ์สองเครื่องค้นหากันเจอผ่าน NAT ซึ่ง coordination server นี้เองที่เป็นเหตุผลว่าทำไมจึงไม่ต้องคัดลอกคีย์ใด ๆ ในขั้นตอนด้านล่างนี้ สำหรับรายละเอียดข้อดีข้อเสียที่ชัดเจน โปรดอ่าน การเปรียบเทียบระหว่าง Tailscale กับ WireGuard แบบปกติ หากคุณต้องการควบคุมทุกส่วนของอุโมงค์ข้อมูลด้วยตนเอง ให้เลือก การทำ self-host VPN ด้วย WireGuard บน VPS แทน
ขั้นตอนด้านล่างนี้สมมติว่า Tailscale ทำงานบนแล็ปท็อปของคุณเรียบร้อยแล้ว และอุปกรณ์ทั้งสองเครื่องล็อกอินเข้าสู่ tailnet เดียวกัน โดย tailnet คือเครือข่าย Tailscale ส่วนตัวของคุณ และอุปกรณ์ทุกเครื่องในเครือข่ายจะได้รับที่อยู่คงที่ภายใน 100.64.0.0/10
การติดตั้ง Tailscale บน VPS ของคุณ
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upสคริปต์ติดตั้งจะเลือกที่เก็บแพ็กเกจที่เหมาะสมกับดิสทริบิวชันของคุณและติดตั้ง daemon tailscaled จากนั้น tailscale up จะแสดง URL สำหรับยืนยันตัวตน ให้เปิด URL ดังกล่าวในเบราว์เซอร์และลงชื่อเข้าใช้ด้วยบัญชีเดียวกับที่ใช้บนแล็ปท็อปของคุณ เนื่องจาก VPS ที่ลงชื่อเข้าใช้ใน tailnet อื่นจะไม่สามารถเชื่อมต่อกับแล็ปท็อปของคุณได้
tailscale status
tailscale ip -4tailscale status ควรแสดงรายการเครื่องทั้งสองเครื่องในขณะนี้ tailscale ip -4 จะแสดงที่อยู่ tailnet ของ VPS ซึ่งเป็นที่อยู่ที่คุณต้องนำไปใช้กับไคลเอนต์ในภายหลัง
Tailscale จำเป็นต้องใช้อุปกรณ์ TUN เพื่อสร้างอุโมงค์เชื่อมต่อ บน VPS แบบ KVM อุปกรณ์นี้จะมีอยู่แล้ว แต่สำหรับแผนบริการที่ใช้การจำลองเสมือนแบบคอนเทนเนอร์ (container virtualization) ซึ่งใช้ kernel ร่วมกับโฮสต์ บางครั้ง /dev/net/tun จะไม่มีอยู่ ทำให้ tailscaled ไม่สามารถสร้างอินเทอร์เฟซ tailscale0 ได้ ให้รันคำสั่ง ls -l /dev/net/tun ก่อนดำเนินการขั้นตอนถัดไป
เปิดใช้งาน IP forwarding มิฉะนั้น VPS จะทิ้งแพ็กเก็ตทั้งหมด
เครื่อง Linux จะทิ้งแพ็กเก็ตใดก็ตามที่ไม่ได้ส่งมาถึงตัวมันเอง เนื่องจากค่า net.ipv4.ip_forward ถูกตั้งไว้เป็น 0 โดยค่าเริ่มต้น โหนดทางออก (exit node) จะรับทราฟฟิกของคุณ ถอดรหัส แล้วทิ้งมันไป ให้เขียนการตั้งค่านี้ลงในไฟล์เพื่อให้คงอยู่หลังการรีบูต
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conftee -a จะเป็นการเพิ่มข้อมูลต่อท้าย ดังนั้นหากรันคำสั่งเหล่านี้ซ้ำเป็นครั้งที่สอง จะทำให้มีการเขียนการตั้งค่าทั้งสองรายการซ้ำสองครั้ง ผลลัพธ์ยังคงทำงานได้ แต่ cat /etc/sysctl.d/99-tailscale.conf จะดูแปลกตา ให้ตรวจสอบค่าที่ใช้งานจริงแทนการเชื่อถือไฟล์:
sysctl net.ipv4.ip_forwardระบบต้องแสดงผลเป็น net.ipv4.ip_forward = 1 หากคุณข้ามขั้นตอนนี้และใช้ tailscale up --advertise-exit-node ไคลเอนต์จะแจ้งเตือนคุณว่า:
Warning: IP forwarding is disabled, subnet routing/exit nodes will not work.tailscale set --advertise-exit-node ไม่ได้รันการตรวจสอบนั้น ดังนั้นความเงียบจาก set จึงไม่ใช่หลักฐานว่าการส่งต่อ (forwarding) เปิดใช้งานอยู่ ให้คุณอ่านค่า sysctl ด้วยตนเอง
คุณไม่จำเป็นต้องเขียนกฎ masquerade ด้วยตนเอง tailscaled จะติดตั้ง firewall chain ของตัวเอง ซึ่งมีชื่อว่า ts-input, ts-forward และ ts-postrouting โดยกฎ NAT สำหรับทราฟฟิกของ exit node จะอยู่ใน ts-postrouting ให้ตรวจสอบกฎเหล่านี้ด้วย sudo iptables-save | grep ts- หรือ sudo nft list ruleset บนเครื่องที่ใช้ nftables
การประกาศให้ VPS เป็น exit node
sudo tailscale set --advertise-exit-nodetailscale set จะเปลี่ยนการตั้งค่าเพียงรายการเดียวและคงค่าอื่นไว้ตามเดิม ส่วน tailscale up --advertise-exit-node จะประกาศสถานะของโหนดด้วย ซึ่งมีผลข้างเคียงคือ up จะถือว่า flag ที่ระบุในบรรทัดคำสั่งเป็นชุดการตั้งค่าที่ไม่ใช่ค่าเริ่มต้นทั้งหมด ดังนั้นการใช้ sudo tailscale up เปล่าๆ ในภายหลังจะทำให้คำสั่งไม่ทำงานและแสดงข้อความ
changing settings via 'tailscale up' requires mentioning all
non-default flags. To proceed, either re-run your command with --reset or
use the command below to explicitly mention the current value of
all non-default settings:ให้ใช้ set สำหรับการเปลี่ยนแปลงอย่างต่อเนื่องเพื่อหลีกเลี่ยงข้อความดังกล่าว
การประกาศสถานะเป็นเพียงการเสนอตัวเท่านั้น ขณะนี้ VPS กำลังแจ้งไปยัง coordination server ว่าพร้อมที่จะทำหน้าที่เป็น exit node แต่ยังไม่มี client ใดสามารถใช้งานได้ในขณะนี้
อนุมัติ Tailscale exit node ใน admin console
ขั้นตอนนี้ไม่มีคำสั่งที่ต้องรัน ให้เปิด หน้า Machines ใน admin console ค้นหา VPS ของคุณ เปิดเมนูจุดสามจุดที่ท้ายแถว เลือก Edit route settings แล้วเปิดใช้งาน Use as exit node
ตราบใดที่ยังไม่ได้เปิดสวิตช์นี้ control plane จะระงับข้อเสนอไว้และไม่ส่งต่อให้ใคร ผลลัพธ์ของ tailscale exit-node list บนแล็ปท็อปของคุณจะไม่แสดงรายการใดๆ และทราฟฟิกของคุณจะยังคงใช้เส้นทางปกติ โดยไม่มีข้อความแจ้งเตือนความผิดพลาดบนเครื่องใดๆ ทั้งสิ้น exit node จะไม่ปรากฏขึ้นมาให้ใช้งาน
คุณสามารถอนุมัติ exit node โดยอัตโนมัติได้ด้วยการเพิ่มรายการในไฟล์นโยบายของ tailnet:
"autoApprovers": {
"exitNode": ["tag:exit"],
}อุปกรณ์ที่ถูกนำเข้ามาด้วย --advertise-tags=tag:exit จะได้รับการอนุมัติด้วยตัวเองทันที ตราบใดที่มีการกำหนด tag:exit ไว้ภายใต้ tagOwners ในไฟล์นโยบายเดียวกัน การติด tag จะเปลี่ยนความเป็นเจ้าของ: อุปกรณ์ที่ติด tag จะถือเป็นของ tailnet แทนที่จะเป็นของบัญชีผู้ใช้ของคุณ และกฎการเข้าถึงที่ใช้กับอุปกรณ์นั้นก็จะเปลี่ยนไปตามไปด้วย สำหรับ VPS เพียงเครื่องเดียว การใช้สวิตช์เปิด-ปิดนั้นทำได้ง่ายกว่า
เลือก exit node บนแล็ปท็อปของคุณ
บนไคลเอนต์ Linux:
tailscale exit-node list
sudo tailscale set --exit-node=vps.your-tailnet.ts.netexit-node list จะแสดงรายการ exit node ที่ได้รับอนุมัติใน tailnet ของคุณพร้อมที่อยู่ หากรายการว่างเปล่าแสดงว่าขั้นตอนการอนุมัติยังไม่เสร็จสิ้น สำหรับ macOS, Windows, iOS และ Android ตัวเลือกเดียวกันนี้จะอยู่ในเมนู Exit Node ภายในแอป Tailscale
ตรวจสอบจากฝั่งไคลเอนต์ ห้ามตรวจสอบจากฝั่งเซิร์ฟเวอร์:
curl -4 https://ifconfig.meให้รันคำสั่งนี้หนึ่งครั้งก่อนเลือก exit node และอีกครั้งหลังจากเลือกแล้ว ที่อยู่ IP จะต้องเปลี่ยนจากที่อยู่ภายในเครือข่ายของคุณเป็น IP สาธารณะของ VPS หากต้องการหยุดใช้งาน exit node ให้ใช้คำสั่ง:
sudo tailscale set --exit-node=มีอีกหนึ่ง flag ที่สำคัญในการใช้งานวันแรก เมื่อเลือก exit node แล้ว ไคลเอนต์จะส่งทราฟฟิกทั้งหมดเข้าไปใน tunnel รวมถึงแพ็กเก็ตที่ส่งไปยัง 192.168.1.50 ซึ่งจะทำให้เครื่องพิมพ์และอุปกรณ์จัดเก็บข้อมูลในเครือข่ายของคุณไม่ตอบสนอง หากต้องการให้เครือข่ายท้องถิ่นยังคงใช้เส้นทางเดิม ให้ใช้คำสั่ง:
sudo tailscale set --exit-node=<name> --exit-node-allow-lan-access=trueเหตุใด DNS ของคุณจึงเปลี่ยนทันทีที่เปิดใช้งาน exit node
โดยค่าเริ่มต้น อุปกรณ์ที่ใช้ exit node จะใช้ exit node นั้นเป็นตัวแก้ไข DNS (Domain Name System) สำหรับทุกโดเมน ซึ่งการกระทำนี้จะแทนที่ nameserver แบบ global และแบบ split ที่กำหนดไว้สำหรับ tailnet ของคุณ พฤติกรรมนี้ถูกออกแบบมาโดยเจตนา หากคำขอยังคงถูกส่งไปยังตัวแก้ไขของเครือข่ายท้องถิ่น เราเตอร์ของร้านกาแฟก็จะยังคงเห็นชื่อเว็บไซต์ทุกแห่งที่คุณเข้าชม ในขณะที่ตัว traffic เองถูกทำให้เป็นส่วนตัว ดังนั้นทั้งชื่อโดเมนและแพ็กเก็ตข้อมูลควรออกจากจุดเดียวกัน
ผลกระทบประการหนึ่งที่มักพบในผู้ที่รันตัวแก้ไข DNS ภายในคือ nameserver ของ tailnet ที่คุณใช้งานอยู่จะหยุดทำงานในขณะที่เปิดใช้งาน exit node ให้เปิดตัวเลือก Use with exit node สำหรับ nameserver นั้นในหน้า DNS ของ admin console เพื่อให้กลับมาใช้งานได้อีกครั้ง
ชื่อ MagicDNS จะยังคงทำงานได้ตามปกติ เนื่องจากไคลเอนต์ Tailscale จะตอบกลับชื่อเหล่านั้นในเครื่องที่ 100.100.100.100 ก่อนที่ข้อมูลใดๆ จะถูกส่งไปยัง exit node คุณสามารถตรวจสอบได้ด้วย dig @100.100.100.100 your-vps.your-tailnet.ts.net หรือบนไคลเอนต์ที่ใช้ systemd-resolved ด้วย resolvectl status ซึ่งอินเทอร์เฟซของ Tailscale จะแสดงรายการ 100.100.100.100 เป็นเซิร์ฟเวอร์ DNS ของตน
หากคุณปิดการจัดการ DNS ของ Tailscale ด้วย --accept-dns=false ไคลเอนต์จะยังคงใช้ตัวแก้ไข DNS ที่ได้รับมาจากเครือข่ายท้องถิ่นต่อไป ส่งผลให้ traffic ถูกส่งผ่านอุโมงค์ (tunnel) แต่คำขอ DNS ไม่ได้ถูกส่งผ่าน ซึ่งเป็น การรั่วไหลของ DNS แบบเดียวกับที่มักเกิดขึ้นในอุโมงค์ WireGuard ที่สร้างขึ้นเอง อย่าแก้ไข --accept-dns เว้นแต่คุณจะมีเหตุผลเฉพาะเจาะจงในการเปลี่ยนแปลงค่าดังกล่าว
IPv6 ผ่าน exit node
Exit node จะประกาศเส้นทางเริ่มต้นทั้ง 0.0.0.0/0 และ ::/0 หาก VPS ไม่มีเส้นทาง IPv6 ที่ใช้งานได้จริงเพื่อออกสู่อินเทอร์เน็ต แพ็กเก็ต IPv6 จะถูกส่งผ่านอุโมงค์มาถึงแค่ที่นั่น ให้ทดสอบบน VPS ก่อนที่จะใช้งานจริง:
ip -6 addr show
curl -6 https://ifconfig.meหากคำขอไม่สำเร็จ แสดงว่า VPS ไม่มี IPv6 upstream เว็บไซต์แบบ dual stack มักจะยังคงโหลดได้เนื่องจากไคลเอนต์จะยกเลิกการใช้ IPv6 แล้วลองใหม่ผ่าน IPv4 แม้ว่าการลองใหม่นี้จะทำให้เกิดความหน่วงในการเชื่อมต่อครั้งแรกกับแต่ละเว็บไซต์ก็ตาม แต่ปลายทางที่เป็น IPv6-only จะไม่สามารถเข้าถึงได้
อีกส่วนหนึ่งคือการส่งต่อ (forwarding) การตั้งค่า net.ipv4.ip_forward = 1 โดยปล่อยให้ net.ipv6.conf.all.forwarding เป็น 0 จะทำให้คุณมีเส้นทาง IPv4 ที่ใช้งานได้ แต่ IPv6 จะกลายเป็นหลุมดำ ซึ่งผู้ใช้งานจะรู้สึกว่า "บางเว็บไซต์โหลดช้า" แทนที่จะเป็นข้อผิดพลาดที่สามารถค้นหาสาเหตุได้ ทั้งสองบรรทัดนี้ควรอยู่ในไฟล์ sysctl
VPS ควรประกาศ subnet route ด้วยหรือไม่
Exit node จะทำหน้าที่รับส่ง traffic อินเทอร์เน็ตทั้งหมด ส่วน subnet route จะทำหน้าที่รับส่ง traffic ของช่วง IP ภายในที่อยู่หลังเครื่องที่ประกาศ route นั้น ทั้งสองฟีเจอร์นี้แยกจากกันและต้องได้รับการอนุมัติแยกกัน โดยเครื่องเดียวสามารถทำทั้งสองอย่างได้
sudo tailscale set --advertise-routes=10.0.0.0/24ให้ประกาศ subnet เมื่อ VPS เชื่อมต่ออยู่ในเครือข่ายส่วนตัวเดียวกับเซิร์ฟเวอร์อื่นที่คุณต้องการเข้าถึงผ่าน IP ภายใน โดยให้ไปอนุมัติในหน้า Edit route settings เดียวกันผ่านสวิตช์เปิดปิดแยกต่างหาก
โปรดเลือกช่วง IP อย่างระมัดระวัง เนื่องจาก route ที่ประกาศออกไปจะมีลำดับความสำคัญสูงกว่า default route ของแล็ปท็อป ดังนั้นหากคุณประกาศ 192.168.1.0/24 จาก VPS มันจะเข้าไปแทนที่เส้นทางของเครือข่ายในบ้านที่ใช้ช่วง IP เดียวกัน ส่งผลให้อุปกรณ์บนโต๊ะทำงานของคุณไม่สามารถสื่อสารได้ ควรใช้ช่วง IP ที่คุณกำหนดขึ้นเอง ไม่ใช่ช่วง IP ที่ router ในบ้านกำหนดให้โดยอัตโนมัติ
เพิ่มความเร็วให้กับ exit node ด้วย UDP GRO forwarding
Tailscale เวอร์ชัน 1.54 ขึ้นไป บน Linux kernel เวอร์ชัน 6.2 ขึ้นไป สามารถใช้ฟีเจอร์ receive offload เพื่อเพิ่ม throughput สำหรับทราฟฟิกที่ถูกส่งต่อ (forwarded traffic) ได้ โดย GRO (generic receive offload) จะทำการรวมแพ็กเก็ตขาเข้าก่อนที่ kernel จะประมวลผลทีละแพ็กเก็ต ณ เดือนสิงหาคม 2026 ขั้นตอนนี้ยังคงต้องดำเนินการด้วยตนเองบน exit node
sudo apt install -y ethtool
NETDEV=$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")
sudo ethtool -K $NETDEV rx-udp-gro-forwarding on rx-gro-list offip -o route get 8.8.8.8 จะรายงานอินเทอร์เฟซที่เชื่อมต่อกับอินเทอร์เน็ตจริง ทำให้คุณไม่ต้องคาดเดาระหว่าง eth0, ens3 และ enp1s0 ยืนยันผลด้วย ethtool -k $NETDEV | grep udp-gro-forwarding ซึ่งควรแสดงค่าเป็น on ในขณะนี้
การตั้งค่านี้จะหายไปเมื่อรีบูตระบบ หากระบบของคุณใช้ networkd-dispatcher อยู่ ให้ตั้งค่าให้ทำงานโดยอัตโนมัติดังนี้:
printf '#!/bin/sh\n\nethtool -K %s rx-udp-gro-forwarding on rx-gro-list off \n' "$(ip -o route get 8.8.8.8 | cut -f 5 -d " ")" | sudo tee /etc/networkd-dispatcher/routable.d/50-tailscale
sudo chmod 755 /etc/networkd-dispatcher/routable.d/50-tailscaleตรวจสอบก่อนว่า /etc/networkd-dispatcher/routable.d/ มีอยู่จริงหรือไม่ หากไม่มี แสดงว่าเครื่องไม่ได้ใช้งาน networkd-dispatcher ให้สร้าง systemd unit ขนาดเล็กเพื่อรันคำสั่ง ethtool ในช่วงบูตระบบแทน ซึ่งจะให้ผลลัพธ์เช่นเดียวกัน
ความหมายของนโยบายการใช้งานที่ยอมรับได้ของผู้ให้บริการต่อทราฟฟิกขาออก
ทุกแพ็กเก็ตที่ไคลเอนต์ส่งผ่าน exit node จะถูกส่งออกด้วย IP address สาธารณะของ VPS ดังนั้นทราฟฟิกทั้งหมดจึงถูกระบุว่าเป็นความรับผิดชอบของบัญชีผู้ใช้ของคุณ รายงานการละเมิดจะถูกส่งมายังกล่องจดหมายของคุณ เช่น ประกาศการละเมิดลิขสิทธิ์ หรือข้อร้องเรียนเรื่องการสแกนพอร์ต โปรดอ่าน AUP (นโยบายการใช้งานที่ยอมรับได้) ของผู้ให้บริการก่อนที่คุณจะกำหนดเส้นทางทราฟฟิกของครัวเรือนหรือทีมงานผ่านเซิร์ฟเวอร์เดียว และห้ามเปิดใช้งาน exit node ให้กับบุคคลที่คุณไม่สามารถรับรองได้
ปริมาณการใช้งานแบนด์วิดท์จะถูกนับเป็นสองเท่า ทราฟฟิกจะเข้ามายัง VPS ผ่านอุโมงค์เชื่อมต่อและส่งออกไปยังอินเทอร์เน็ตอีกครั้ง ซึ่งทั้งสองทิศทางมักจะถูกนำไปคำนวณรวมกับโควตาการถ่ายโอนข้อมูลตามแผนบริการของคุณ การรับชมวิดีโอสตรีมมิ่งผ่าน exit node จะใช้ปริมาณข้อมูลมากกว่าที่คนส่วนใหญ่คาดคิด
ช่วง IP address ของศูนย์ข้อมูลยังมีชื่อเสียงเฉพาะตัว เว็บไซต์บางแห่งจะแสดง CAPTCHA กับ IP เหล่านี้บ่อยขึ้น และบริการสตรีมมิ่งบางแห่งอาจปฏิเสธการเข้าถึงโดยตรง การตั้งค่าของคุณไม่สามารถแก้ไขปัญหานี้ได้ เนื่องจากเป็นคุณสมบัติของกลุ่ม IP address ที่ผู้ให้บริการของคุณเป็นเจ้าของ
เหตุใดทราฟฟิกยังคงออกผ่านการเชื่อมต่อในเครื่องของคุณ
มีการประกาศ exit node แต่ยังไม่ได้รับการอนุมัติ tailscale exit-node list บนเครื่องไคลเอนต์ไม่แสดงผลลัพธ์ใดๆ และไม่มีเครื่องใดบันทึกข้อผิดพลาด ให้ไปที่หน้า Machines แล้วเปิดใช้งาน Use as exit node
ไคลเอนต์ไม่ได้เลือกใช้งาน การอนุมัติทำให้โหนดพร้อมใช้งานบน tailnet แต่การเลือกใช้งานเป็นขั้นตอนแยกต่างหากบนอุปกรณ์แต่ละเครื่อง ให้รัน sudo tailscale set --exit-node=<name> อีกครั้ง จากนั้นตรวจสอบ curl -4 https://ifconfig.me อีกครั้ง
การส่งต่อ (forwarding) ถูกปิดอยู่ อาการนี้มีความเฉพาะตัวคือ tailscale ping <vps> ทำงานสำเร็จ อุโมงค์เชื่อมต่อขึ้นชัดเจน แต่ที่อยู่ภายนอกทั้งหมดกลับหมดเวลา (timeout) sysctl net.ipv4.ip_forward แสดงค่าเป็น 0 ให้แก้ไขไฟล์ sysctl แล้วรัน sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
ไฟร์วอลล์ดรอปแพ็กเก็ตที่ส่งต่อ tailscaled จะแทรก chain ts-forward ของตัวเองเข้าไป ซึ่งบน VPS ที่สะอาดนั้นเพียงพอแล้ว แต่สำหรับเครื่องที่รัน ufw หรือ Docker อยู่ก่อนแล้ว อาจจบลงด้วยนโยบาย FORWARD เป็น DROP และมีกฎที่ถูกจัดลำดับไว้ก่อนกฎของ Tailscale อย่าเดาว่าเกิดจากอะไร ให้รัน sudo iptables -L FORWARD -n -v ในขณะที่ไคลเอนต์พยายามโหลดหน้าเว็บ แล้วสังเกตว่าตัวนับ (counter) ใดมีการเปลี่ยนแปลง สำหรับเครื่องที่ใช้ ufw วิธีแก้ไขทั่วไปคือการตั้งค่า DEFAULT_FORWARD_POLICY="ACCEPT" ใน /etc/default/ufw ตามด้วย sudo ufw reload นอกจากนี้ให้ตรวจสอบไฟร์วอลล์เครือข่ายของผู้ให้บริการในแผงควบคุมด้วย เนื่องจากเป็นการควบคุมที่แยกต่างหากจากสิ่งที่รันอยู่บนเซิร์ฟเวอร์
ใช้งานได้แต่ช้า ให้รัน tailscale netcheck บนเครื่องทั้งสอง หากรายงานว่า UDP ถูกบล็อก อุปกรณ์ทั้งสองจะไม่สามารถสร้างเส้นทางตรงได้และต้องย้อนกลับไปใช้ DERP relay ซึ่งจะเพิ่มความหน่วง (latency) ให้กับการเชื่อมต่อทุกรายการ การอนุญาตให้ UDP ขาเข้าที่พอร์ต 41641 ไปยัง VPS ในไฟร์วอลล์เครือข่ายของผู้ให้บริการมักจะช่วยให้กลับมาใช้เส้นทางตรงได้อีกครั้ง
เมื่อใดที่ควรเลิกใช้ coordination server ของ Tailscale
ทุกขั้นตอนข้างต้นต้องพึ่งพา coordination server ของ Tailscale ในการแลกเปลี่ยนกุญแจและการอนุมัติที่คุณคลิก ข้อมูลของคุณยังคงวิ่งตรงจากแล็ปท็อปไปยัง VPS โดยที่ coordination server ไม่ได้เป็นตัวรับส่งข้อมูลนั้น แม้ว่ามันจะเป็นตัวตัดสินว่าใครสามารถเข้าร่วม tailnet ได้และอุปกรณ์แต่ละเครื่องเข้าถึงอะไรได้บ้าง หากคุณต้องการลดการพึ่งพาส่วนนี้ ให้ รัน Headscale เป็น control server ของ Tailscale ด้วยตนเอง แล้วชี้ไคลเอนต์ทั้งสองฝั่งไปที่เซิร์ฟเวอร์นั้น ขั้นตอนการตั้งค่า exit node หลังจากนั้นจะเหมือนเดิม โดยการอนุมัติเส้นทางจะทำผ่านบรรทัดคำสั่งของ Headscale แทนการใช้คอนโซลบนคลาวด์ Headscale จะเข้ามาแทนที่ control plane แต่ยังคงให้คุณใช้งานไคลเอนต์ของ Tailscale ได้ตามปกติ ดังนั้นหากคุณต้องการรัน stack ทั้งหมดด้วยตัวเอง NetBird มี coordination server และไคลเอนต์ที่คุณสามารถโฮสต์บน VPS เครื่องเดียวได้
FAQ
ทำไม traffic ของฉันยังคงใช้การเชื่อมต่อในเครื่องหลังจากเลือก exit node แล้ว?
มีสาเหตุหลัก 2 ประการ ประการแรกคือมีการประกาศ exit node แต่ยังไม่ได้รับการอนุมัติ ให้ไปที่หน้า Machines ใน admin console ค้นหา VPS ของคุณ เลือก Edit route settings แล้วเปิดใช้งาน Use as exit node การอนุมัตินี้เป็นการตั้งค่าผ่าน console เท่านั้น ไม่มีคำสั่งบนเซิร์ฟเวอร์ที่ทำหน้าที่นี้ได้ สาเหตุที่สองมีลักษณะต่างออกไป คือ IP forwarding ถูกปิดอยู่ ทำให้ tunnel เชื่อมต่อได้ tailscale ping ไปยัง VPS ได้ แต่ที่อยู่ภายนอกทั้งหมดจะหมดเวลา (timeout) ให้ตรวจสอบด้วย sysctl net.ipv4.ip_forward ซึ่งค่าที่อ่านได้ต้องเป็น 1
ฉันต้องอนุมัติ exit node ด้วยตนเองทุกครั้งหรือไม่?
การสลับสวิตช์นี้เป็นการดำเนินการเพียงครั้งเดียวสำหรับแต่ละเครื่อง หากคุณสร้าง VPS ใหม่บ่อยครั้ง ให้เพิ่มบล็อก autoApprovers ลงในไฟล์นโยบาย tailnet ของคุณโดยระบุ "exitNode": ["tag:exit"], กำหนด tag:exit ภายใต้ tagOwners และเริ่มการทำงานของ node ด้วย --advertise-tags=tag:exit อุปกรณ์ที่ถูกติดแท็ก (tagged device) จะเป็นกรรมสิทธิ์ของ tailnet แทนที่จะเป็นบัญชีผู้ใช้ของคุณ ดังนั้นกฎการเข้าถึงที่ใช้กับอุปกรณ์ดังกล่าวก็จะเปลี่ยนไปด้วย
แล็ปท็อปของฉันใช้ DNS server ใดในขณะที่เปิดใช้งาน exit node?
ใช้ DNS server ของตัว exit node เอง อุปกรณ์ที่ใช้ exit node จะส่ง DNS query ทั้งหมดไปที่นั่น ซึ่งจะไปแทนที่ global และ split DNS nameservers ที่ตั้งค่าไว้สำหรับ tailnet วิธีนี้ช่วยป้องกันไม่ให้เครือข่ายท้องถิ่นเห็นชื่อที่คุณค้นหา หากต้องการให้ nameserver ของ tailnet ยังคงทำงานอยู่ ให้เปิดใช้งาน Use with exit node สำหรับ nameserver นั้นในหน้า DNS ของ admin console ชื่อ MagicDNS ยังคง resolve ได้ตามปกติเนื่องจากไคลเอนต์ Tailscale จะตอบกลับชื่อเหล่านั้นในเครื่องที่ 100.100.100.100
VPS หนึ่งเครื่องสามารถเป็นทั้ง exit node และ subnet router ในเวลาเดียวกันได้หรือไม่?
ได้ sudo tailscale set --advertise-exit-node และ sudo tailscale set --advertise-routes=10.0.0.0/24 เป็นอิสระต่อกัน และแต่ละรายการจะมีสวิตช์อนุมัติแยกต่างหากภายใต้ Edit route settings ทั้งสองอย่างจำเป็นต้องเปิดใช้งาน IP forwarding บน VPS หลีกเลี่ยงการประกาศช่วง IP ที่ตรงกับเครือข่ายในบ้านของแล็ปท็อปคุณ เพราะเส้นทางที่ประกาศไว้จะมีความเฉพาะเจาะจงมากกว่าเส้นทางเริ่มต้น (default route) และจะทำให้อุปกรณ์ในเครือข่ายท้องถิ่นของคุณไม่สามารถเข้าถึงได้
exit node ช่วยซ่อน traffic ของฉันจากผู้ให้บริการ VPS ได้หรือไม่?
ไม่ได้ tunnel จะสิ้นสุดที่ VPS ดังนั้น traffic จะออกจากเซิร์ฟเวอร์ในรูปแบบที่ปลายทางคาดหวัง และผู้ให้บริการของคุณจะส่งข้อมูลนั้นแบบไม่เข้ารหัสในกรณีที่เว็บไซต์ปลายทางไม่ได้ใช้การเข้ารหัส exit node ทำหน้าที่เพียงย้ายจุดที่ traffic ของคุณเชื่อมต่อกับอินเทอร์เน็ต จากเครือข่ายที่คุณใช้งานอยู่ไปยังเซิร์ฟเวอร์ที่คุณเช่าไว้เท่านั้น มันช่วยซ่อนประวัติการท่องเว็บของคุณจาก Wi-Fi ร้านกาแฟและจาก ISP ที่บ้าน แต่จะแสดงประวัติการท่องเว็บเดียวกันนั้นให้ผู้ให้บริการ VPS เห็นพร้อมกับชื่อบัญชีของคุณที่ผูกอยู่