อยากเข้าระบบที่บ้าน ต้องเปิดทุกบริการออกอินเทอร์เน็ตไหม

เมื่อเริ่มมี Dashboard หรือบริการไว้ใช้ที่บ้าน เราก็มักอยากเปิดดูระหว่างอยู่นอกเครือข่ายด้วย วิธีที่นึกถึงได้เร็วคือเปิดพอร์ตจาก router แล้วจัดชื่อเว็บให้เข้ามา แต่ถ้าคนที่ต้องใช้มีเพียงเราและทีมเล็กๆ ก็ยังมีอีกทางเลือกให้พิจารณา
แทนที่จะเปิดทุกบริการให้เข้าจากภายนอกโดยตรง เราสามารถจัดเครือข่ายส่วนตัวให้เครื่องที่ได้รับอนุญาตเข้าถึงเส้นทางที่ต้องใช้ได้ อย่างไรก็ตาม การมีช่องทางเข้าบ้านไม่ได้ตอบแทนเราว่าใครควรไปถึงบริการใดบ้าง
Tailscale เป็นเครื่องมือหนึ่งสำหรับงานลักษณะนี้ครับ บทนี้จะชวนแยกการติดตั้งบนเครื่องปลายทางกับการใช้ subnet router แล้วตามต่อถึงสิทธิ์ DNS และสิ่งที่ต้องตรวจเวลาเข้าจากนอกบ้านจริง
เริ่มจากรายชื่อบริการกับคนที่ต้องเข้าถึง
ก่อนติดตั้ง ลองเขียนว่าต้องการเปิดอะไรจากข้างนอก เช่น หน้าอ่านสถานะ แอปไฟล์ หรือหน้าจัดการเครื่อง จากนั้นระบุว่าใครจำเป็นต้องใช้บริการนั้น เพราะการให้คนหนึ่งอ่าน Dashboard ไม่จำเป็นต้องให้ไปถึงทุกพอร์ตของเครื่องเดียวกัน
อุปกรณ์ที่รองรับการติดตั้ง Tailscale โดยตรงสามารถเข้าร่วม tailnet ตามกระบวนการของระบบได้ วิธีนี้ช่วยให้กำหนดตัวตนของเครื่องและขอบเขตการเข้าถึงได้ตรงกับปลายทาง แต่ยังต้องดูการรองรับของระบบปฏิบัติการและการดูแลเครื่องนั้นต่อ

หากมีอุปกรณ์ที่ติดตั้ง client ไม่ได้ เช่น เครื่องใช้หรือบริการบนเครือข่ายเดิม เราอาจใช้ subnet router เป็นจุดเชื่อมไปยังช่วง IP ที่กำหนด แต่การเลือกให้มันประกาศเส้นทางก็ควรเริ่มจากขอบเขตที่จำเป็น ไม่ประกาศทั้งเครือข่ายกว้างไว้ก่อนโดยยังไม่รู้ว่าต้องใช้ส่วนใด
การวาดรายการนี้ช่วยให้ตัดสินได้ว่าจะติดตั้งตรงเครื่องใด และเครื่องใดต้องผ่านตัวกลาง ไม่เอาความสะดวกตอนตั้งค่ามาเป็นเหตุให้ทุกอุปกรณ์ได้รับเส้นทางเข้าถึงเหมือนกันหมด
subnet router ทำให้ไปถึงเครือข่ายที่ไม่ได้ติดตั้ง client
subnet router ประกาศเส้นทางของเครือข่ายที่มันเข้าถึงได้ เพื่อให้เครื่องใน tailnet ใช้ตามเงื่อนไขที่อนุญาต แต่ยังมีขั้นตั้งค่าฝั่งเครื่อง router การอนุมัติเส้นทาง และพฤติกรรมรับเส้นทางของ client ตามระบบที่ใช้ ไม่ใช่เปิดตัวเลือกหนึ่งแล้วทุกเครื่องต้องใช้เส้นทางนั้นทันที
ชื่อที่คล้ายกันอย่าง exit node ก็มีหน้าที่ต่างออกไป เพราะเกี่ยวข้องกับการพาทราฟฟิกออกไปทางเครื่องนั้นตามที่เลือก ไม่ควรใช้สองคำนี้แทนกันโดยคิดว่าให้เข้าบริการที่บ้านแล้วทราฟฟิกทั้งหมดต้องออกบ้านไปด้วยเสมอ

เส้นทางที่ประกาศได้กับเส้นทางที่ผู้ใช้ได้รับสิทธิ์ให้ใช้ก็ยังควรดูแยกกัน หาก router ประกาศช่วง IP หนึ่งไว้ เราก็ต้องกำหนดนโยบายว่าตัวตนใดไปถึงปลายทางกับพอร์ตใด ไม่ให้การอนุมัติ route ถูกเข้าใจว่าเป็นการเปิดสิทธิ์แอปทั้งหมดแล้ว
ถ้าเครือข่ายที่ผู้ใช้กำลังอยู่กับเครือข่ายบ้านใช้ช่วง IP ซ้ำกัน การเลือกเส้นทางอาจไม่เป็นอย่างที่คาด ควรตรวจ routing ที่เกิดบนเครื่องเรียกจริงตามระบบและตัวเลือกที่รองรับ ไม่แก้ DNS อย่างเดียวโดยยังมีปลายทาง IP ชนกันอยู่
สิทธิ์ของ tailnet ยังต้องสอดคล้องกับสิทธิ์ของแอป
นโยบายเครือข่ายช่วยจำกัดการไปถึงบริการ ส่วนแอปยังควรตรวจผู้ใช้กับการทำงานตามหน้าที่ของมัน หากคนหนึ่งมีสิทธิ์ต่อถึงหน้าเว็บ ก็ไม่ได้แปลว่าควรมีสิทธิ์ลบข้อมูลหรือจัดการผู้ใช้อื่นในแอปด้วย
ควรจัดกลุ่มและตัวตนตามวิธีดูแลที่ระบบรองรับ พร้อมมีรายการว่าอุปกรณ์ใดเป็นของใคร เครื่องที่ใช้เป็นบริการถาวรกับเครื่องส่วนตัวอาจต้องใช้รูปแบบดูแลต่างกัน ไม่ผูกทุกอย่างไว้กับบัญชีของคนเดียวจนเวลาปรับสิทธิ์แล้วกระทบงานทั้งหมดโดยไม่รู้ตัว
เมื่อเพิ่มคนหรือเครื่องใหม่ ให้ตรวจทั้งสิ่งที่ควรเข้าถึงได้และสิ่งที่ต้องเข้าไม่ได้ในระบบที่เราดูแล การเปิดบริการเป้าหมายสำเร็จอย่างเดียวไม่ยืนยันว่ากติกาไม่เปิดกว้างไปยังปลายทางอื่น
การเลิกใช้เครื่องก็ควรมีขั้นถอนสิทธิ์และจัดการข้อมูลที่เกี่ยวข้องด้วย เพราะเครือข่ายส่วนตัวจะดูแลต่อได้ก็ต่อเมื่อรายการสมาชิกและบทบาทยังตรงกับคนที่ควรใช้จริง ไม่สะสมเครื่องเก่าที่ไม่มีใครรู้เจ้าของไปเรื่อยๆ
ชื่อเรียกกับ HTTPS ต้องมีเส้นทางที่ตรงกัน
ต่อถึง IP ได้แล้วอาจยังเปิดชื่อที่เคยใช้ในบ้านไม่ได้ เพราะ DNS เป็นอีกส่วนหนึ่งที่ต้องตั้งให้ client มองเห็นชื่อภายในตามที่ต้องการ ควรตรวจ resolver และเงื่อนไข split DNS ตามสภาพติดตั้ง ไม่สมมติว่าชื่อทุกแบบถูกกระจายอัตโนมัติทั้งหมด
ส่วนใบรับรอง HTTPS ต้องตรงกับชื่อที่ใช้และระบบความเชื่อถือของ client เช่นเดิม การวิ่งผ่านเครือข่ายส่วนตัวไม่ได้ทำให้ปัญหาชื่อในใบรับรองหายไป ควรจัดชื่อและใบรับรองให้ถูกแทนการสอนให้คนใช้ข้ามคำเตือนทุกครั้ง
หากมี reverse proxy อยู่แล้ว ก็เลือกได้ว่าจะให้การเข้าถึงมาถึงจุดนั้นแล้วค่อยส่งต่อ หรือเข้า service ที่กำหนดโดยตรงตามนโยบาย แต่ต้องดูด้วยว่าทางเข้าด้านหลังยังเปิดกว้างนอกเส้นทางที่ตั้งใจไว้หรือไม่
เครื่องตัวกลางเป็นส่วนที่ต้องดูแล
ถ้าบริการหลายตัวอาศัย subnet router เครื่องเดียว เมื่อมันหยุดหรือไม่พร้อม เส้นทางจากภายนอกก็ได้รับผลตามนั้น จึงควรเก็บสถานะของเครื่องและรู้ว่ากู้จากที่ใด ไม่วางทุกทางจัดการไว้หลังตัวกลางที่กำลังต้องกู้เพียงเส้นทางเดียว
รายละเอียดอย่างการเริ่มทำงานหลังเปิดเครื่อง การหมดอายุของข้อมูลยืนยันตัวตน และการอนุมัติตามนโยบาย ควรถูกตรวจให้ตรงกับลักษณะเครื่องที่ทำงานต่อเนื่อง ไม่ใช้ค่าตอนล็อกอินครั้งแรกเป็นหลักฐานว่ามันจะพร้อมอยู่ตลอดไปโดยไม่ต้องดูแล
ผลด้านความเร็วกับเส้นทางเชื่อมต่อควรดูจากการใช้งานจริง เพราะการเชื่อมต่ออาจใช้เส้นทางต่างกันตามสภาพเครือข่าย บทนี้จึงยังไม่ให้ตัวเลขความเร็วหรือความหน่วง และไม่ถือว่าการตั้งสำเร็จรับรองประสิทธิภาพสำหรับทุกบริการ
ทดลองจากอีกเครือข่ายก่อนวางใจ
ใช้เครื่องที่ต้องเรียกจริงทดสอบจากนอก LAN แล้วตรวจชื่อ การเข้าบริการ และสิทธิ์ที่กำหนด รวมถึงลองช่วงที่บริการหรือ router เริ่มใหม่ตามขอบเขตทดสอบที่วางไว้ จะได้รู้ว่าหลังกลับมามีขั้นใดต้องทำเอง
ถ้ามีบริการที่ต้องเปิดสาธารณะให้คนทั่วไปใช้อยู่ด้วย ก็ควรแยกทางเข้ากับนโยบายของมันให้ชัด เครือข่ายส่วนตัวเหมาะกับคนและเครื่องที่เราจัดสมาชิกได้ ไม่ใช่คำตอบเดียวที่ต้องใช้แทนการเปิดเว็บทุกประเภท
สรุป
การเข้าระบบที่บ้านผ่าน Tailscale ควรเริ่มจากรู้ว่าคนใดต้องถึงบริการใด แล้วเลือกติดตั้งตรงหรือใช้ subnet router ตามความจำเป็น เมื่อกำหนด route, policy, DNS และสิทธิ์ของแอปให้สัมพันธ์กัน พร้อมตรวจจากเครือข่ายภายนอกจริง เราจะมีช่องทางใช้งานที่ตรงขอบเขตโดยไม่ต้องเปิดทุกบริการกว้างขึ้นพร้อมกันครับ


