เข้าถึง LAN ด้วย ZeroTier บน MikroTik โดยไม่ง้อ Public IP

ผมเองก็พึ่งได้ลองเล่น MikroTik มาไม่นานนัก และยังไม่ได้เก่ง MikroTik มากขนาดนั้น แต่ก็พอ Config เบื้องต้นได้ ส่วนตัวผมใช้ ZeroTier อยู่ก่อนหน้านี้แล้ว ไว้ลงในอุปกรณ์ต่างๆ ภายในบ้าน เช่น PC, NAS, Home Assistant ทำให้สามารถเข้าถึงอุปกรณ์เหล่านี้ได้จากภายนอกบ้านผ่าน VPN ของ ZeroTier ครับ

ภาพจาก ZeroTier

ถ้าถามว่า ZeroTier คืออะไร เอาแบบเข้าใจง่ายๆ เลยก็คือเป็นการจำลองวง LAN ขึ้นมา ทำให้เราสามารถเข้าถึงอุปกรณ์ของเราที่อยู่บนเน็ตเวิร์ค ZeroTier นี้จากที่ไหนก็ได้ โดยไม่ต้องอยู่ใน LAN เดียวกัน ไม่ต้องใช้ public IP หรือ forwarding port แต่อย่างใด

ซึ่ง ZeroTier นี้มีแพลนที่ฟรีให้ใช้อยู่ครับ และก็น่าจะเพียงพอสำหรับใช้งานในบ้าน หรือแล็บทั่วๆ ไป โดยรองรับสมาชิกในเน็ตเวิร์คไม่เกิน 50 คน และสร้างเน็ตเวิร์คได้ไม่จำกัด ถ้าต้องการมากกว่านี้ก็จะต้องเสียเงินรายเดือน หรือว่ารันบน self-hosted controller เองก็ได้เช่นกัน

ล่าสุด MikroTik ได้รองรับ ZeroTier อย่างเป็นทางการแล้ว ตั้งแต่ RouterOS v7.1rc2 ขึ้นไป และตัว RouterOS 7 ก็ได้ออกเวอร์ชัน stable ออกมาแล้ว โดยในวันนี้ผมจะทำบน RouterOS 7.1.3 ครับ

อ้างอิงจาก RouterOS Documentation หน้า ZeroTier ครับ

ภาพจาก MikroTik

1. สร้าง Network ขึ้นมาบน my.zerotier.com

โดยการเข้าไปยัง my.zerotier.com แล้วสมัครสมาชิกให้เรียบร้อย กด Create A Network ก็จะได้ network มา 1 อัน โดยมีรายละเอียดคือ Network ID และ Name ซึ่งสามารถกดเข้าไป และเปลี่ยนชื่อได้เลยครับ

สำหรับ Access Control จะมีให้เลือกแบบ Private หรือ Public ถ้าใช้งานส่วนตัวก็ให้เลือกเป็น Private ครับ โดยอุปกรณ์ที่จะเข้าเน็ตเวิร์คได้ต้องได้รับการอนุญาตจากเราก่อน

ในหน้านี้จะมีการตั้งค่า Routes, IPv4, IPv6 และ Rules ต่างๆ ด้วย ก็ตั้งตามที่เราต้องการครับ หรือถ้าไม่ได้ตั้งระบบก็ได้ตั้งค่าเบื้องต้นมาให้พร้อมใช้งานอยู่แล้ว

เน็ตเวิร์คที่สร้างได้บน Zerotier

2. Join Network จาก MikroTik

ZeroTier package บน MikroTik นั้นจะต้องไปดาวน์โหลดจาก Extra Packages มาติดตั้งก่อน จากนั้นก็เริ่มขั้นตอนแรกได้เลยครับ โดยการ enable zerotier instance

[admin@MikroTik] > /zerotier enable zt1

จากนั้นก็ Join Network ได้เลย โดยเปลี่ยน network= เป็น Network ID ของตัวเองนะครับ

[admin@MikroTik] > /zerotier interface add network=17d709436cb9c349 instance=zt1

เมื่อลองตรวจสอบดูจะพบว่าตอนนี้ status ของ zt1 เป็น ACCESS_DENIED ซึ่งเราจะต้องไปอนุญาตบนเว็บ ZeroTier ก่อนจึงจะ join network ได้สำเร็จ

[admin@MikroTik] > /zerotier interface print
Columns: NAME, MAC-ADDRESS, NETWORK, STATUS
#   NAME       MAC-ADDRESS        NETWORK           STATUS
0 R zerotier1  XX:XX:XX:XX:XX:XX  17d709436cb9c349  ACCESS_DENIED

โดยการกดติ๊กตรงช่อง Auth? เพื่ออนุญาตให้ join network เข้ามาได้ และสามารถตั้งชื่อให้อุปกรณ์ รวมถึงกำหนด IP เองได้ หากไม่ต้องการให้ระบบจ่าย IP ให้

เมื่อเรา Auth เสร็จ อุปกรณ์ก็จะเชื่อมต่อเข้ามา พร้อมกับได้รับ IP แล้วครับ

กลับมาเช็คสถานะที่ MikroTik จะได้ว่า

[admin@MikroTik] > /zerotier interface print
Flags: R - RUNNING
Columns: NAME, MAC-ADDRESS, NETWORK, NETWORK-NAME, STATUS
#   NAME       MAC-ADDRESS        NETWORK           NETWORK-NAME       STATUS
0 R zerotier1  XX:XX:XX:XX:XX:XX  17d709436cb9c349  jolly_christensen  OK

เท่านี้เมื่อนำอุปกรณ์อื่นๆ มา join network เดียวกันนี้ ก็จะสามารถเข้าถึง MikroTik ได้จากภายนอกแล้วครับ โดย client บน MikroTik นั้นรองรับตั้งแต่ Windows, MacOS, Android, iOS, Linux, Free BSD และ NAS สามารถดาวน์โหลดได้จากที่นี่

3. ลอง Routing เข้ามายังวง LAN

ในหน้าของ Network นั้นจะมีการตั้งค่า Managed Routes มาด้วย โดยในที่นี้ผมจะ Route ผ่าน MikroTik (10.147.20.151) เข้ามายังวงแลน (192.168.10.0/24) ทำให้เมื่อ client เชื่อมต่อเข้ามายัง Network แล้วจะสามารถเข้าถึงอุปกรณ์ภายใน LAN ได้ด้วย โดยไม่ต้องมานั่ง join network อุปกรณ์ภายในทีละตัวครับ

อันนี้เป็นเพียงการสาธิตการใช้ ZeroTier บน MikroTik เบื้องต้นนะครับ คิดว่าสามารถนำไป implement solution ต่างๆ ได้อีกเยอะเลย หากใครสนใจ สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ RouterOS Documentation หน้า ZeroTier ครับ