Tailscale บนมือถือ: เข้าเครือข่ายบ้านผ่านเน็ตมือถือ
ต่อมือถือเข้ากับ NAS กล้องวงจรปิด และเครื่องที่บ้านด้วย Tailscale โดยไม่ต้องเปิดพอร์ตและไม่ต้องมี IP จริง ใช้ได้แม้เน็ตบ้านอยู่หลัง CGNAT พร้อมบอกว่ามันไม่ได้ทำอะไรบ้าง
Tailscale บนมือถือคืออะไร และมันแก้ปัญหาอะไรให้คุณ
Tailscale ทำให้มือถือของคุณเข้าถึงเครือข่ายบ้านได้จากเน็ตมือถือ โดยไม่ต้องเปิดพอร์ตบนเราเตอร์และไม่ต้องมี IP จริง มันสร้างเครือข่ายส่วนตัวขึ้นมาระหว่างอุปกรณ์ที่คุณเป็นเจ้าของเอง ไม่ใช่บริการที่ส่งการท่องเว็บของคุณออกไปทางเซิร์ฟเวอร์ของคนอื่น ผลลัพธ์ที่จับต้องได้คือ NAS ที่บ้าน เครื่องบันทึกกล้องวงจรปิด กล่อง Home Assistant หรือเซิร์ฟเวอร์เล็ก ๆ สักเครื่อง กลายเป็นสิ่งที่เปิดจากมือถือได้ทุกที่ที่มีสัญญาณ
การติดตั้งจบได้ในสิบนาที ลงไคลเอนต์บนเครื่องที่บ้าน ลงแอปบนมือถือ แล้วล็อกอินด้วยบัญชีเดียวกันทั้งสองฝั่ง หลังจากนั้นอุปกรณ์แต่ละเครื่องจะได้ที่อยู่ประจำตัวในช่วง 100.x.x.x และเรียกหากันด้วยชื่อได้เลย ส่วนที่ยาวของคู่มือนี้จึงไม่ใช่ขั้นตอนติดตั้ง แต่คือคำอธิบายว่ามันทำงานอย่างไร และพังเพราะอะไร
เบื้องหลังคือ WireGuard ซึ่งเป็นโพรโทคอล VPN ที่อยู่ในเคอร์เนล Linux มาตั้งแต่รุ่น 5.6 สิ่งที่ Tailscale เพิ่มเข้ามาคือส่วนที่ WireGuard เปล่า ๆ ไม่มีให้ นั่นคือการแจกและหมุนกุญแจให้อัตโนมัติ และการพาอุปกรณ์สองเครื่องที่อยู่หลัง NAT (network address translation คือการที่เราเตอร์แปลงที่อยู่ภายในให้กลายเป็นที่อยู่สาธารณะหมายเลขเดียว) มาเจอกันเองโดยไม่ต้องตั้งเส้นทางด้วยมือ ถ้าอยากเห็นภาพรวมของตัวบริการก่อน อ่าน Tailscale คืออะไรและทำงานอย่างไร และถ้าคุณเคยตั้ง WireGuard เองมาแล้วอยากรู้ว่าต่างกันตรงไหน การเทียบ WireGuard กับ Tailscale ทีละส่วน ตอบไว้ละเอียดกว่า
Tailscale ไม่ใช่ VPN แบบที่ขายกันตามโฆษณา
เรื่องนี้ต้องเคลียร์ก่อนอย่างอื่น เพราะคนส่วนใหญ่รู้จักคำว่า VPN จากโฆษณาก่อนจะมารู้จักบริการแบบนี้ ตัวมันไม่ได้เปลี่ยน IP ของคุณให้เป็นของประเทศอื่น ไม่ได้ทำให้ดูคอนเทนต์ที่ล็อกโซนไว้ได้ และไม่ได้ซ่อนการท่องเว็บของคุณจากผู้ให้บริการอินเทอร์เน็ต เพราะโดยค่าเริ่มต้น มีเพียงทราฟฟิกที่วิ่งไปหาอุปกรณ์ในเครือข่ายของคุณเองเท่านั้นที่เข้าอุโมงค์ การเปิดยูทูบหรือแอปธนาคารยังออกทางเน็ตมือถือตามเส้นทางเดิมทุกประการ
สิ่งที่มันปกป้องคือทราฟฟิกระหว่างอุปกรณ์ของคุณกันเอง ข้อมูลชุดนั้นถูกเข้ารหัสจากปลายทางถึงปลายทาง และกุญแจลับไม่เคยออกจากตัวเครื่อง แม้ในกรณีที่ทราฟฟิกต้องวิ่งผ่านเซิร์ฟเวอร์รีเลย์ของ Tailscale เซิร์ฟเวอร์นั้นก็อ่านเนื้อหาไม่ได้ สิ่งที่ระบบส่วนกลางเห็นคือใครคุยกับใคร ไม่ใช่คุยกันว่าอะไร รายละเอียดว่าอะไรที่บริษัทมองเห็นและอะไรที่มองไม่เห็นอยู่ใน สิ่งที่ Tailscale เห็นและไม่เห็นในเครือข่ายของคุณ
ถ้าคุณอยากได้พฤติกรรมแบบ VPN เชิงพาณิชย์จริง ๆ คือให้ทราฟฟิกทั้งหมดออกจากที่อื่น มันทำได้ แต่ต้องตั้ง exit node ขึ้นมาเอง และ IP ที่ได้คือ IP ของเครื่องที่คุณเลือก ไม่ใช่เมนูรายชื่อประเทศให้กด อีกอย่างที่ควรรู้ก่อนเสียเวลา บริการสตรีมมิงส่วนใหญ่บล็อกที่อยู่ของดาต้าเซ็นเตอร์อยู่แล้ว การตั้ง exit node บน VPS จึงมีประโยชน์ตอนใช้ไวไฟสาธารณะที่คุณไม่ไว้ใจ ไม่ใช่เรื่องปลดล็อกคอนเทนต์ ขั้นตอนอยู่ใน การทำ VPS ให้เป็น exit node
ทำไมการเปิดพอร์ตบนเราเตอร์ถึงไม่ได้ผลอีกต่อไป
คำแนะนำรุ่นเก่าคือ forward พอร์ต 5000 ที่เราเตอร์ แล้วเข้าจากข้างนอกผ่านชื่อ DDNS วิธีนั้นใช้ไม่ได้แล้วกับเน็ตบ้านและเน็ตมือถือจำนวนมาก สาเหตุคือ CGNAT (carrier-grade NAT คือการที่ผู้ให้บริการเอาลูกค้าหลายพันรายมาแชร์ที่อยู่สาธารณะหมายเลขเดียวกัน) ที่อยู่ซึ่งเราเตอร์ของคุณได้รับไม่ใช่ที่อยู่สาธารณะ แต่เป็นเลขในช่วง 100.64.0.0/10 ที่สงวนไว้สำหรับงานนี้โดยเฉพาะ
ตรวจได้ในหนึ่งนาที เปิดหน้าสถานะของเราเตอร์แล้วจดค่า WAN IP จากนั้นถามโลกภายนอกว่าเห็นคุณเป็นเลขอะไร
curl -4 https://ifconfig.meถ้าสองเลขนี้ไม่ตรงกัน แปลว่ามีอุปกรณ์ NAT ของผู้ให้บริการคั่นอยู่ระหว่างคุณกับอินเทอร์เน็ต และกฎ forward port ที่คุณกรอกไว้จะไม่มีผล เพราะแพ็กเก็ตขาเข้าจากภายนอกไปไม่ถึงเราเตอร์ของคุณตั้งแต่แรก หน้าตั้งค่าจะรับกฎนั้นไว้เงียบ ๆ ไม่มีข้อความแจ้งเตือน และไม่มีอะไรเกิดขึ้น การซื้อ IP จริงจากผู้ให้บริการเป็นทางออกหนึ่ง แต่ต้องจ่ายเพิ่มรายเดือน และไม่ใช่ทุกแพ็กเกจจะขายให้
Tailscale เลี่ยงปัญหานี้ด้วยการไม่รอการเชื่อมต่อขาเข้าเลย ทั้งมือถือและเครื่องที่บ้านต่างเปิดการเชื่อมต่อขาออกไปหาเซิร์ฟเวอร์ประสานงาน (coordination server) เพื่อแลกกุญแจสาธารณะและบอกที่อยู่ปลายทางที่ตัวเองมองเห็น จากนั้นทั้งคู่ยิงแพ็กเก็ต UDP หากันในเวลาไล่เลี่ยกัน เพื่อให้ NAT ของแต่ละฝั่งเปิดช่องขากลับค้างไว้ให้ ถ้าสำเร็จ ทราฟฟิกวิ่งตรงระหว่างสองเครื่องโดยไม่ผ่านใคร ถ้าไม่สำเร็จ มันถอยไปใช้เซิร์ฟเวอร์รีเลย์ที่เรียกว่า DERP ซึ่งช้ากว่าแต่ยังใช้งานได้ ถ้าคุณเคยแก้ปัญหาเดียวกันนี้ด้วยมือมาก่อน การเปิดบริการที่อยู่หลัง CGNAT ด้วย reverse tunnel ผ่าน VPS คือแนวคิดเดียวกันในเวอร์ชันที่คุณประกอบเอง
ติดตั้งบนเครื่องที่บ้านก่อน แล้วค่อยไปที่มือถือ
เริ่มจากฝั่งที่ยากกว่าเสมอ คือเครื่อง Linux ที่บ้าน คำสั่งชุดนี้เขียนสำหรับ Ubuntu 24.04
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale upคำสั่งที่สองจะพิมพ์ลิงก์ออกมาแบบนี้ ให้เปิดลิงก์ในเบราว์เซอร์แล้วล็อกอิน
To authenticate, visit:
https://login.tailscale.com/a/1234567890abเมื่อล็อกอินเสร็จ บรรทัดนั้นจะหายไปเองและ prompt กลับมา ตรวจผลด้วยสองคำสั่งนี้
tailscale ip -4
tailscale statustailscale ip -4 ต้องคืนเลขหนึ่งตัวในช่วง 100.64.0.0/10 เช่น 100.101.102.103 นั่นคือที่อยู่ของเครื่องนี้ในเครือข่ายส่วนตัวของคุณ และมันจะไม่เปลี่ยนอีก ไม่ว่าเครื่องจะย้ายไปต่อเน็ตที่ไหนก็ตาม ตัวติดตั้งเปิดบริการ tailscaled ให้ทำงานถาวรไว้แล้ว ยืนยันด้วย systemctl is-enabled tailscaled ซึ่งต้องตอบว่า enabled ถ้ามันตอบ disabled เครื่องนี้จะหายจากเครือข่ายหลังรีบูตครั้งแรก และคุณจะรู้ตัวตอนที่ออกไปอยู่นอกบ้านแล้ว
NAS ยี่ห้อหลักมีแพ็กเกจของตัวเอง เช่น Synology ติดตั้งผ่าน Package Center ส่วน Windows และ macOS ใช้ตัวติดตั้งสำเร็จรูปจากหน้าดาวน์โหลดของ Tailscale ถ้าติดตั้งบน Ubuntu แล้วติดปัญหาเรื่อง repository หรือ GPG key ให้ดู วิธีแก้ error ตอนติดตั้ง Tailscale บน Ubuntu ก่อนลองซ้ำ
ลงแอปบนมือถือ และจุดที่คนพลาดกันมากที่สุด
ค้นคำว่า Tailscale ใน Play Store หรือ App Store แล้วติดตั้ง เปิดแอป กด Sign in แล้วเลือกผู้ให้บริการล็อกอินตัวเดียวกับที่ใช้บนเครื่องที่บ้าน จุดนี้คือที่ที่คนพลาดกันมากที่สุด บัญชีคนละตัวหมายถึงเครือข่าย (tailnet) คนละวง อุปกรณ์จะมองไม่เห็นกัน และหน้ารายชื่ออุปกรณ์บนมือถือจะว่างเปล่าโดยไม่มีข้อความอธิบายว่าทำไม ถ้าเครื่องที่บ้านล็อกอินด้วยบัญชี Google ส่วนมือถือล็อกอินด้วยบัญชี Microsoft คุณเพิ่งสร้างเครือข่ายเปล่าวงที่สองขึ้นมา ไม่ได้เข้าวงเดิม
จากนั้นกดสวิตช์ในแอปให้ขึ้นสถานะ Connected บน Android ระบบจะขออนุญาตสร้าง VPN ในครั้งแรก และจะมีไอคอนกุญแจค้างบนแถบสถานะตลอดเวลาที่เชื่อมต่ออยู่ บน iOS แอปจะติดตั้งโปรไฟล์ VPN ให้ ไอคอน VPN บนแถบสถานะไม่ได้แปลว่าทราฟฟิกทั้งหมดของคุณกำลังวิ่งผ่านอุโมงค์ มันแปลว่าระบบปฏิบัติการมอบอินเทอร์เฟซเครือข่ายหนึ่งชุดให้แอปนี้ดูแลเท่านั้น
ทดสอบให้ถูกวิธีด้วย ปิด Wi-Fi บนมือถือให้เหลือแต่เน็ตมือถือ แล้วเปิดเบราว์เซอร์ไปที่ที่อยู่ 100.x ของเครื่องที่บ้านพร้อมพอร์ตของบริการ เช่น http://100.101.102.103:5000 ถ้าหน้าเว็บขึ้น แปลว่าครบวงจรแล้ว การทดสอบตอนที่มือถือยังเกาะ Wi-Fi บ้านอยู่พิสูจน์อะไรไม่ได้ เพราะสองเครื่องอาจคุยกันตรงผ่าน LAN ในบ้านโดยไม่เกี่ยวกับ Tailscale เลย
รายชื่ออุปกรณ์บอกอะไรคุณบ้าง
หน้ารายชื่ออุปกรณ์ในแอปและในหน้า admin คือข้อมูลชุดเดียวกับที่ tailscale status พิมพ์ออกมาบนเครื่อง Linux หน้าตาประมาณนี้
100.101.102.103 nas-home you@example.com linux -
100.88.14.9 pixel-9 you@example.com android active; direct 203.0.113.5:41641
100.75.200.4 vps-sg you@example.com linux idle; relay "sin"คอลัมน์แรกคือที่อยู่ประจำตัวของอุปกรณ์ ถัดมาคือชื่อเครื่อง เจ้าของ ระบบปฏิบัติการ และสภาพการเชื่อมต่อ คำว่า direct ตามด้วยคู่ที่อยู่กับพอร์ตแปลว่าสองเครื่องคุยกันตรง ส่วน relay ตามด้วยชื่อเมืองแปลว่าตอนนี้ทราฟฟิกวิ่งอ้อมผ่านรีเลย์ เครื่องที่ไม่มีการคุยกันอยู่จะขึ้นขีดกลางเฉย ๆ ซึ่งไม่ได้แปลว่าเครื่องนั้นออฟไลน์
ชื่อเครื่องใช้แทนที่อยู่ได้ถ้าเปิด MagicDNS ไว้ เช่น http://nas-home:5000 และชื่อเต็มจะอยู่ในรูป nas-home.ชื่อ-tailnet.ts.net ใช้ชื่อดีกว่าจำเลข เพราะวันที่คุณลงเครื่องใหม่แล้วตั้งชื่อเดิม ลิงก์เก่าที่บันทึกไว้ยังใช้ได้
เรื่องที่ควรรู้ล่วงหน้าคือกุญแจของอุปกรณ์มีวันหมดอายุ ค่าเริ่มต้นคือ 180 วัน เมื่อครบกำหนด เครื่องนั้นจะหลุดออกจากเครือข่ายจนกว่าจะมีคนไปล็อกอินใหม่ที่ตัวเครื่อง สำหรับ NAS หรือเซิร์ฟเวอร์ที่บ้านนี่คือปัญหาจริง เพราะมันมักหลุดตอนที่คุณไม่อยู่บ้าน เข้าไปที่หน้า admin เลือกเครื่องนั้น แล้วสั่ง Disable key expiry ให้กับเครื่องที่อยู่กับที่ ส่วนมือถือปล่อยให้หมดอายุตามปกติได้ เพราะเครื่องอยู่ในมือคุณอยู่แล้ว
บางครั้งเร็ว บางครั้งช้า ต่างกันตรงเส้นทาง
ใช้ tailscale ping แทน ping ปกติ เพราะมันบอกเส้นทางที่ใช้จริงมาด้วย
tailscale ping nas-homeผลลัพธ์ที่ดีจะเปลี่ยนบรรทัดกลางทางแบบนี้
pong from nas-home (100.101.102.103) via DERP(sin) in 68ms
pong from nas-home (100.101.102.103) via 203.0.113.5:41641 in 21msบรรทัดแรกวิ่งผ่านรีเลย์ เพราะการเจาะ NAT ยังไม่เสร็จในวินาทีแรก บรรทัดที่สองคือหลังจากเจาะสำเร็จ ค่าหน่วงลดลงเพราะแพ็กเก็ตไม่ต้องวิ่งอ้อมอีกต่อไป ถ้าทุกบรรทัดยังเป็น DERP ไม่ว่าจะรอนานแค่ไหน แปลว่าเจาะไม่ผ่าน และคุณจะติดเพดานความเร็วของรีเลย์ไปตลอด
tailscale netcheckคำสั่งนี้บอกว่าเครือข่ายที่คุณอยู่ยอมให้ UDP ออกไหม NAT เป็นแบบไหน และรีเลย์ที่ใกล้ที่สุดอยู่ที่ไหน ตัดมาบางบรรทัด
Report:
* UDP: true
* IPv4: yes, 203.0.113.5:41641
* MappingVariesByDestIP: false
* Nearest DERP: SingaporeUDP: false แปลว่าเครือข่ายนั้นบล็อก UDP ขาออก ซึ่งพบบ่อยในไวไฟของออฟฟิศและโรงแรม ผลคือทุกอย่างถูกบังคับให้วิ่งผ่านรีเลย์ ส่วน MappingVariesByDestIP: true แปลว่า NAT ฝั่งนั้นเปลี่ยนพอร์ตขาออกไปตามปลายทาง ทำให้เจาะยากขึ้นมาก สาเหตุของความช้าและวิธีไล่ทีละชั้นอยู่ใน ทำไมบางเส้นทางของ Tailscale ถึงช้ากว่าที่ควรจะเป็น
แบตเตอรี่ และการสลับระหว่าง Wi-Fi กับเน็ตมือถือ
WireGuard ระบุตัวอีกฝั่งด้วยกุญแจสาธารณะ ไม่ใช่ด้วยหมายเลข IP ดังนั้นตอนที่มือถือย้ายจาก Wi-Fi ไปเน็ตมือถือ อุโมงค์ไม่ได้ตายทิ้ง แพ็กเก็ตชุดถัดไปที่มาถึงจากที่อยู่ใหม่จะอัปเดตปลายทางของ session เดิมให้เอง สิ่งที่คุณสัมผัสได้คือการสะดุดไม่กี่วินาที ช่วงที่เส้นทางตรงเส้นเก่าใช้ไม่ได้แล้วแต่เส้นใหม่ยังเจาะไม่เสร็จ ระหว่างนั้นทราฟฟิกมักตกไปที่รีเลย์ก่อน แล้วค่อยกลับมาเป็นเส้นตรง
เรื่องแบตเตอรี่ตอบได้ตรง ๆ ว่าการเปิดค้างไว้เฉย ๆ แทบไม่กินอะไร ตราบใดที่ไม่มีแอปไหนคุยกับอุปกรณ์ในเครือข่ายของคุณ ก็แทบไม่มีแพ็กเก็ตวิ่ง สิ่งที่กินแบตจริงคือการเปิด exit node ทิ้งไว้ เพราะตอนนั้นทราฟฟิกทุกอย่างของเครื่องถูกเข้ารหัสแล้วส่งอ้อมไปอีกที่หนึ่ง วิทยุของเครื่องจึงทำงานหนักขึ้นตลอดเวลา เปิด exit node เฉพาะตอนที่ต้องการ แล้วปิดเมื่อใช้เสร็จ
บน Android ถ้าอยากให้ Tailscale ต่ออยู่เสมอ ให้เปิด Always-on VPN ในหน้าตั้งค่า VPN ของระบบ ส่วนตัวเลือก Block connections without VPN ที่อยู่ใต้กันนั้นแนะนำให้ปิดไว้ เพราะมันสั่งให้ระบบทิ้งทราฟฟิกทุกอย่างที่ไม่ได้ผ่าน VPN วันที่กุญแจของอุปกรณ์หมดอายุแล้ว Tailscale หลุดล็อกอิน มือถือของคุณจะไม่มีอินเทอร์เน็ตเลย และหน้าล็อกอินซึ่งต้องใช้อินเทอร์เน็ตก็เปิดไม่ได้เช่นกัน
ping ได้แต่หน้าเว็บไม่ขึ้น ต้องเปิดให้ถูกฝั่ง
นี่คืออาการที่พบบ่อยที่สุดหลังติดตั้งเสร็จ และมีสองสาเหตุที่แยกจากกันชัดเจน
สาเหตุแรก บริการฟังอยู่แค่ที่ localhost ตรวจบนเครื่องที่บ้าน
sudo ss -tlnp | grep 5000ถ้าผลลัพธ์ขึ้น 127.0.0.1:5000 แปลว่าบริการนั้นรับเฉพาะการเชื่อมต่อที่เกิดในเครื่องตัวเอง แพ็กเก็ตที่มาจากที่อยู่ 100.x จึงถูกปฏิเสธตั้งแต่ชั้นนั้น ต้องแก้ค่าของบริการให้ฟังที่ 0.0.0.0:5000 หรือผูกกับที่อยู่ Tailscale ของเครื่องโดยตรง ถ้าผลลัพธ์ขึ้น 0.0.0.0:5000 อยู่แล้ว ปัญหาไม่ได้อยู่ตรงนี้
สาเหตุที่สอง ไฟร์วอลล์ของเครื่องที่บ้านบล็อกอยู่ วิธีเปิดที่ปลอดภัยคือเปิดตามอินเทอร์เฟซ ไม่ใช่ตามช่วงที่อยู่
sudo ufw allow in on tailscale0 to any port 5000 proto tcp
sudo ufw status verboseเหตุผลที่ควรผูกกฎกับ tailscale0 แทนที่จะเขียนว่าอนุญาตจาก 100.64.0.0/10 ก็เพราะช่วงที่อยู่นั้นคือช่วงเดียวกับที่ผู้ให้บริการใช้ทำ CGNAT กฎที่อิงช่วงที่อยู่จึงกำกวม ส่วนกฎที่อิงอินเทอร์เฟซหมายถึงทราฟฟิกที่ออกมาจากอุโมงค์เท่านั้น ไม่มีทางตีความเป็นอย่างอื่น
ถ้าอยากได้ HTTPS พร้อมใบรับรองที่เบราว์เซอร์ยอมรับ แทนการพิมพ์ที่อยู่กับพอร์ตเอง Tailscale มีคำสั่ง tailscale serve ให้ใช้ ระวังอย่าสับสนกับ tailscale funnel ซึ่งเปิดบริการนั้นออกสู่อินเทอร์เน็ตสาธารณะจริง ๆ ความต่างของสองคำสั่งนี้อยู่ใน การเทียบ tailscale serve กับ funnel
ขั้นต่อไปที่หนึ่ง เข้าถึงทั้งวงเน็ตบ้าน ไม่ใช่แค่เครื่องเดียว
คุณลง Tailscale ทุกเครื่องในบ้านไม่ได้ กล้องวงจรปิด ปริ๊นเตอร์ และเราเตอร์ตัวรองไม่มีที่ให้ลงแอป ทางออกคือให้เครื่อง Linux หนึ่งเครื่องทำหน้าที่เป็น subnet router คือประกาศเส้นทางของวง LAN ทั้งวงเข้าไปในเครือข่ายของคุณ
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
sudo tailscale set --advertise-routes=192.168.1.0/24บรรทัดแรกจำเป็นเพราะโดยปกติเคอร์เนล Linux จะทิ้งแพ็กเก็ตที่ไม่ได้จ่าหน้าถึงตัวเอง เครื่องนี้ต้องส่งต่อแพ็กเก็ตให้เครื่องอื่นในบ้าน จึงต้องเปิด forwarding ก่อน การเขียนค่าลงไฟล์ใน /etc/sysctl.d/ ทำให้ค่านี้อยู่ต่อหลังรีบูต ต่างจาก sysctl -w ที่หายไปเงียบ ๆ
เส้นทางที่ประกาศออกไปจะยังไม่ถูกใช้ จนกว่าคุณจะอนุมัติมันในหน้า admin เลือกเครื่องนั้น เข้าไปที่การตั้งค่าเส้นทาง แล้วกดอนุมัติ ก่อนอนุมัติ ทุกอย่างดูเหมือนทำงานปกติแต่มือถือจะเข้าไม่ถึงอะไรเลย ความเงียบตรงนี้ทำให้คนเสียเวลาไล่ผิดจุดบ่อยมาก ฝั่งมือถือใช้เส้นทางที่อนุมัติแล้วได้ทันที ส่วนไคลเอนต์ Linux เครื่องอื่นต้องสั่ง sudo tailscale set --accept-routes เพิ่มเอง
ข้อควรระวังที่สำคัญที่สุดของวิธีนี้คือเลขวงซ้ำกัน ถ้าบ้านคุณใช้ 192.168.1.0/24 และร้านกาแฟที่คุณนั่งอยู่ก็ใช้ 192.168.1.0/24 เหมือนกัน เส้นทางของวงในเครื่องจะชนะเสมอ มือถือของคุณจะไปเจอปริ๊นเตอร์ของร้าน ไม่ใช่ NAS ที่บ้าน ทางแก้คือย้ายวงในบ้านไปใช้เลขที่คนอื่นไม่ค่อยใช้ เช่น 192.168.42.0/24 รายละเอียดการตั้งค่าและกรณีที่ซับซ้อนกว่านี้อยู่ใน การทำ subnet router เพื่อประกาศวงส่วนตัวเข้าเครือข่าย
ขั้นต่อไปที่สอง มี VPS หนึ่งเครื่องเป็นสมาชิกที่เปิดตลอด
เครื่องที่บ้านดับได้เสมอ ไฟดับ เน็ตบ้านล่ม หรือมีคนถอดปลั๊กเพื่อเสียบพัดลม การมี VPS หนึ่งเครื่องอยู่ในเครือข่ายเดียวกันจึงเปลี่ยนโครงสร้างทั้งหมด เพราะคุณได้สมาชิกที่ออนไลน์ตลอดเวลาและมีที่อยู่แน่นอน ติดตั้งเหมือนเครื่องที่บ้านทุกประการ
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up --hostname=vps-sgตั้ง Disable key expiry ให้เครื่องนี้ในหน้า admin ด้วย เพราะไม่มีใครนั่งเฝ้าเพื่อล็อกอินใหม่ให้มัน ประโยชน์ที่ได้ทันทีคือที่เก็บสำรองข้อมูลซึ่งอยู่คนละที่กับบ้าน เป็นปลายทางของ backup ที่ยิงข้ามอุโมงค์ไปโดยไม่ต้องเปิดพอร์ต SSH สู่อินเทอร์เน็ต และเป็นเครื่องที่คอยเช็กว่าเครื่องที่บ้านยังตอบอยู่หรือไม่ พูดให้ชัดคือ VPS ไม่ได้ช่วยให้คุณเข้าถึงเครื่องที่บ้านตอนบ้านไฟดับ ไม่มีอะไรทำแบบนั้นได้ แต่มันทำให้บริการสำคัญไม่ผูกกับความเสถียรของเน็ตบ้านอีกต่อไป
เครื่องเดียวกันนี้ทำเป็นทางออกสู่อินเทอร์เน็ตให้มือถือของคุณตอนใช้ไวไฟสาธารณะได้ด้วย
sudo tailscale set --advertise-exit-nodeเหมือนกับเส้นทาง subnet คือต้องเข้าไปอนุมัติในหน้า admin ก่อน แล้วจึงเลือกเครื่องนี้เป็น exit node จากในแอปมือถือ แผนฟรีของ Tailscale เพียงพอสำหรับอุปกรณ์ในบ้านและ VPS สักเครื่องสองเครื่องอยู่แล้ว ตัวเลขที่แน่นอน ณ เดือนกันยายน 2026 อยู่ใน ขอบเขตของแผนฟรีและจุดที่ต้องเริ่มจ่าย และถ้าคุณไม่อยากให้เซิร์ฟเวอร์ประสานงานอยู่ในมือบริษัทอื่นเลย Headscale ซึ่งเป็นเซิร์ฟเวอร์ควบคุมที่คุณโฮสต์เอง ใช้ไคลเอนต์ตัวเดียวกันนี้ได้
อาการที่พบบ่อย และสาเหตุที่แท้จริง
มือถือไม่เห็นเครื่องที่บ้านเลย และรายชื่ออุปกรณ์ว่างเปล่า เกือบทุกครั้งคือล็อกอินคนละบัญชี ทำให้อยู่คนละ tailnet เปิดหน้าตั้งค่าของแอปทั้งสองฝั่งแล้วเทียบชื่อ tailnet กับอีเมลที่ใช้ล็อกอิน ถ้าไม่ตรงกัน ให้ออกจากระบบฝั่งหนึ่งแล้วล็อกอินใหม่ด้วยบัญชีเดียวกับอีกฝั่ง
เครื่องที่บ้านเคยใช้ได้ แล้วอยู่ ๆ ก็หายไปหลังผ่านไปหลายเดือน นั่นคือกุญแจหมดอายุตามค่าเริ่มต้น 180 วัน ไม่ใช่ของเสีย ล็อกอินใหม่ที่ตัวเครื่องด้วย sudo tailscale up แล้วสั่ง Disable key expiry ให้เครื่องนั้นเพื่อไม่ให้เกิดซ้ำ
เชื่อมต่อได้แต่ช้ามาก โดยเฉพาะตอนดูภาพจากกล้อง ดูคำว่า relay ใน tailscale status ถ้ามี แปลว่าทราฟฟิกกำลังวิ่งอ้อมผ่านรีเลย์ ไล่ต่อด้วย tailscale netcheck ถ้าได้ UDP: false เครือข่ายที่คุณอยู่บล็อก UDP ขาออก ลองสลับไปใช้เน็ตมือถือเพื่อยืนยันว่าปัญหาอยู่ที่เครือข่ายนั้นจริง
อยู่บ้านเข้าได้ แต่ออกนอกบ้านแล้วเข้าไม่ได้ แปลว่าที่ผ่านมาคุณเข้าผ่าน LAN ไม่ได้เข้าผ่าน Tailscale แก้ด้วยการเปลี่ยนลิงก์ที่บันทึกไว้ให้ใช้ที่อยู่ 100.x แทนที่อยู่ 192.168.x แล้วทดสอบซ้ำโดยปิด Wi-Fi
รีบูตเครื่องที่บ้านแล้วไม่กลับเข้าเครือข่าย ตรวจ systemctl is-enabled tailscaled และ systemctl status tailscaled บริการที่ไม่ได้ถูก enable ไว้จะไม่ขึ้นมาเอง และไม่มีใครแจ้งคุณจนกว่าคุณจะต้องใช้งานมัน
FAQ
Tailscale เปลี่ยน IP ให้เป็นของต่างประเทศเพื่อดูคอนเทนต์ที่ล็อกโซนได้ไหม
ไม่ได้ โดยค่าเริ่มต้นไม่มีทราฟฟิกอินเทอร์เน็ตทั่วไปของคุณวิ่งผ่าน Tailscale เลย มีแต่ทราฟฟิกที่ส่งไปหาอุปกรณ์ของคุณเองเท่านั้น ถ้าตั้ง exit node ขึ้นมา ทราฟฟิกทั้งหมดจะออกทางเครื่องนั้นจริง แต่ IP ที่ได้คือ IP ของ VPS ที่คุณเช่า ซึ่งเป็นที่อยู่ของดาต้าเซ็นเตอร์ และบริการสตรีมมิงส่วนใหญ่บล็อกที่อยู่กลุ่มนั้นอยู่แล้ว ประโยชน์ที่ได้จริงคือความเป็นส่วนตัวตอนใช้ไวไฟสาธารณะ
บ้านผมอยู่หลัง CGNAT ไม่มี IP จริง ใช้ Tailscale ได้ไหม
ได้ และนี่คือกรณีที่มันถูกออกแบบมาเพื่อแก้โดยตรง เพราะไม่มีฝั่งไหนต้องรอการเชื่อมต่อขาเข้า ทั้งสองเครื่องต่อขาออกออกไปแล้วนัดเจอกันกลางทาง ถ้าเจาะ NAT ผ่าน ทราฟฟิกวิ่งตรงหากัน ถ้าไม่ผ่าน มันใช้เซิร์ฟเวอร์รีเลย์ DERP แทน ซึ่งช้ากว่าแต่ยังทำงานได้ ตรวจว่าคุณได้เส้นทางแบบไหนด้วย tailscale ping ชื่อเครื่อง แล้วดูว่าบรรทัดผลลัพธ์เขียนว่า DERP หรือเป็นคู่ที่อยู่กับพอร์ต
เปิด Tailscale ค้างไว้บนมือถือทั้งวันเปลืองแบตไหม
การเปิดค้างไว้เฉย ๆ แทบไม่กินแบต เพราะเมื่อไม่มีแอปไหนคุยกับอุปกรณ์ในเครือข่ายของคุณ ก็แทบไม่มีแพ็กเก็ตวิ่งผ่านอุโมงค์ สิ่งที่กินแบตจริงคือการเลือก exit node ทิ้งไว้ เพราะทราฟฟิกทุกอย่างของเครื่องจะถูกเข้ารหัสแล้วส่งอ้อม ทำให้วิทยุของเครื่องทำงานตลอดเวลา เปิด exit node เฉพาะตอนที่ต้องใช้ก็พอ
มือถือ ping เจอเครื่องที่บ้าน แต่เปิดหน้าเว็บของบริการไม่ได้ เพราะอะไร
อาการนี้แปลว่าชั้นเครือข่ายทำงานแล้ว ปัญหาอยู่ที่ตัวบริการหรือที่ไฟร์วอลล์ รัน sudo ss -tlnp | grep 5000 บนเครื่องที่บ้าน ถ้าเห็น 127.0.0.1 บริการนั้นรับเฉพาะการเชื่อมต่อจากในเครื่องเอง ต้องแก้ให้ฟังที่ 0.0.0.0 หรือที่อยู่ Tailscale ของเครื่อง ถ้าฟังถูกอยู่แล้ว ให้เปิดไฟร์วอลล์เฉพาะอินเทอร์เฟซของอุโมงค์ด้วย sudo ufw allow in on tailscale0 to any port 5000 proto tcp