Skip to content

Hướng dẫn đầy đủ: Cài đặt Tailscale Exit Node trên MikroTik RouterOS v7

Tổng quan

Tài liệu này hướng dẫn chi tiết cách cài đặt và cấu hình Tailscale Exit Node trên MikroTik RouterOS v7 sử dụng container. Exit Node cho phép route toàn bộ internet traffic của các thiết bị Tailscale qua MikroTik router, hoạt động như một VPN server[1].

Yêu cầu hệ thống

Phần cứng và phần mềm

  • RouterOS v7.6 trở lên (hỗ trợ container)
  • Architecture: x86_64, ARM64, hoặc ARM32v7
  • RAM: Tối thiểu 512MB (khuyến nghị 1GB+)
  • Storage: Tối thiểu 2GB cho container và image cache
  • Internet connection: Kết nối internet ổn định với IP public

Kiểm tra cấu hình hiện tại

# Kiểm tra version và architecture
/system resource print

# Kiểm tra disk space
/disk print
/system resource print

Bước 1: Chuẩn bị RouterOS

Kích hoạt Container Mode

# Enable container device mode
/system/device-mode/update container=yes

# Thông báo: Phải reboot trong vòng 5 phút
# Thực hiện HARD REBOOT qua hypervisor (đối với CHR)

Quan trọng: Với MikroTik CHR, phải thực hiện hard power cycle qua hypervisor, không được dùng soft reboot từ RouterOS.

Xác minh container đã kích hoạt

# Sau khi reboot, kiểm tra
/system/device-mode/print
# Kết quả: container: yes

Bước 2: Thiết lập mạng cho Container

Tạo Virtual Ethernet Interface

/interface/veth/add name=veth1 address=172.17.0.2/16 gateway=172.17.0.1

Tạo Bridge và cấu hình IP

# Tạo bridge cho container
/interface/bridge/add name=dockers

# Gán IP cho bridge
/ip/address/add address=172.17.0.1/16 interface=dockers

# Thêm veth vào bridge
/interface/bridge/port add bridge=dockers interface=veth1

Cấu hình NAT cho container

# NAT cho container traffic ra ngoài
/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.17.0.0/16 out-interface-list=WAN comment="Container NAT"

Bước 3: Thiết lập Storage

Sử dụng external storage (khuyến nghị)

# Format external disk (nếu chưa có)
/disk format sata1 file-system=ext4 label=storage

# Tạo cấu trúc thư mục
/file add name=sata1/containers type=directory
/file add name=sata1/containers/tailscale type=directory
/file add name=sata1/pull type=directory
/file add name=sata1/mounts type=directory
/file add name=sata1/mounts/tailscale type=directory

Cấu hình Container Registry

# Sử dụng external storage cho image cache
/container/config set registry-url=https://registry-1.docker.io tmpdir=sata1/pull

Bước 4: Tạo Tailscale Auth Key

Trong Tailscale Admin Console

  1. Truy cập Tailscale Admin Console
  2. Vào SettingsKeys
  3. Tạo Auth Key với cấu hình:
  4. Reusable: true (để có thể setup lại)
  5. Ephemeral: false (persistent device)
  6. Pre-approved: true (tự động approve)
  7. Tags: Tùy chọn gắn tag

Auth key có dạng: tskey-abcdef1432341818[1]

Bước 5: Cấu hình Environment Variables

Tạo environment cho Exit Node

# Xóa envs cũ (nếu có)
/container/envs remove [find name="tailscale"]

# Cấu hình Exit Node
/container/envs/add name="tailscale" key="TS_AUTH_KEY" value="tskey-your-auth-key-here"
/container/envs/add name="tailscale" key="TS_EXTRA_ARGS" value="--advertise-exit-node"
/container/envs/add name="tailscale" key="TS_HOSTNAME" value="mikrotik-exit-node"
/container/envs/add name="tailscale" key="TS_STATE_DIR" value="/var/lib/tailscale"
/container/envs/add name="tailscale" key="TS_AUTH_ONCE" value="true"

Tạo Mount Point

# Mount point cho persistent state
/container/mounts/add name="tailscale" src="sata1/mounts/tailscale" dst="/var/lib/tailscale"

Bước 6: Tạo và khởi động Container

Sử dụng Official Tailscale Image

# Tạo container với official image
/container add remote-image=tailscale/tailscale:latest interface=veth1 envlist=tailscale root-dir=sata1/containers/tailscale mounts=tailscale start-on-boot=yes hostname=mikrotik dns=8.8.8.8,8.8.4.4 logging=yes

Khởi động container

# Kiểm tra trạng thái
/container print

# Start container
/container start 0

# Xem logs để debug (nếu cần)
/log print where topics~"container"

Bước 7: Cấu hình Firewall và Routing

FastTrack và Firewall Rules (RouterOS v7)

# FastTrack cho performance
/ip firewall filter add chain=forward action=fasttrack-connection connection-state=established,related hw-offload=yes comment="FastTrack Exit Node" place-before=0

# Accept established/related
/ip firewall filter add chain=forward action=accept connection-state=established,related comment="Accept established/related" place-before=1

# Allow Tailscale exit traffic
/ip firewall filter add chain=forward src-address=100.64.0.0/10 action=accept comment="Allow Tailscale Exit Traffic"

# Allow return traffic
/ip firewall filter add chain=forward dst-address=100.64.0.0/10 action=accept comment="Allow return traffic"

# Drop invalid connections
/ip firewall filter add chain=forward connection-state=invalid action=drop comment="Drop invalid"

NAT Rules cho Exit Node

# Masquerade Tailscale traffic ra internet
/ip firewall nat add chain=srcnat action=masquerade src-address=100.64.0.0/10 out-interface-list=WAN comment="Tailscale Exit Node NAT"

# Route Tailscale network qua container
/ip route add dst-address=100.64.0.0/10 gateway=172.17.0.2 comment="Route to Tailscale container"

Bước 8: Approve Exit Node

Trong Tailscale Admin Console

  1. Vào Machines page
  2. Tìm mikrotik-exit-node device
  3. Click menu "...""Edit route settings"
  4. Bật "Use as exit node"
  5. Click "Save"

Container sẽ hiển thị Exit Node badge khi được approve[1].

Bước 9: Sử dụng Exit Node

Trên client devices

Windows/Mac/Linux:

# Enable exit node
tailscale up --exit-node=mikrotik-exit-node

# Hoặc sử dụng IP
tailscale up --exit-node=100.x.x.x

Mobile Apps: 1. Mở Tailscale app 2. Vào Exit Node section 3. Chọn mikrotik-exit-node 4. Toggle "Allow LAN access" nếu cần truy cập local network[3]

Xác minh kết nối

# Kiểm tra IP public từ client
curl ipinfo.io

# Kết quả sẽ hiển thị IP của MikroTik router

Bước 10: Monitoring và Tối ưu

Script monitor performance

/system script add name=monitor-exit-node source={
  :local fasttrackcount [/ip firewall filter get [find comment="FastTrack Exit Node"] bytes];
  :local exittraffic [/ip firewall nat get [find comment="Tailscale Exit Node NAT"] bytes];
  :log info ("FastTrack: " . $fasttrackcount . " bytes, Exit traffic: " . $exittraffic . " bytes");
}

# Chạy mỗi 10 phút
/system scheduler add name=exit-monitor interval=10m on-event=monitor-exit-node

Tối ưu performance

# Tăng connection tracking limits
/ip firewall connection tracking set max-entries=32768

# Enable TCP optimizations
/ip settings set tcp-syncookies=yes rp-filter=loose

# Hardware offload (nếu hỗ trợ)
/interface ethernet set [find] l2mtu=1598

Troubleshooting

Container không start

Kiểm tra logs:

/log print where topics~"container"

Nguyên nhân thường gặp: - AUTH_KEY hết hạn hoặc không hợp lệ - Architecture mismatch (image không tương thích) - Thiếu mount point hoặc permissions

Exit Node không hoạt động

Kiểm tra kết nối:

# Test từ container
/container shell 0
ping 8.8.8.8

# Kiểm tra routing
/ip route print where dst-address=100.64.0.0/10

# Xem active connections
/ip firewall connection print where src-address~"100.64"

Performance issues

Monitoring tools:

# Bandwidth usage
/interface monitor-traffic [find where list=WAN] duration=30s

# CPU usage
/system resource print

# Container resource usage
/container print stats

Security Considerations

Firewall protection

# Rate limiting (tùy chọn)
/ip firewall filter add chain=forward src-address=100.64.0.0/10 connection-limit=50,32 action=drop comment="Rate limit exit traffic"

# Geo-blocking malicious IPs
/ip firewall address-list add list=blocked-countries address=0.0.0.0/0
/ip firewall filter add chain=forward dst-address-list=blocked-countries action=drop

DNS filtering

# Redirect DNS qua MikroTik
/ip firewall nat add chain=dstnat protocol=udp dst-port=53 src-address=100.64.0.0/10 action=redirect to-ports=53 comment="DNS Redirect"

# Cấu hình DNS servers
/ip dns set allow-remote-requests=yes servers=1.1.1.1,8.8.8.8

Backup và Recovery

Backup cấu hình

# Export cấu hình
/export file=tailscale-exit-node-backup.rsc

# Backup container data
/file print where name~"sata1/mounts/tailscale"

Recovery procedures

# Recreate container nếu bị lỗi
/container remove 0
/container add remote-image=tailscale/tailscale:latest interface=veth1 envlist=tailscale root-dir=sata1/containers/tailscale mounts=tailscale start-on-boot=yes hostname=mikrotik dns=8.8.8.8,8.8.4.4 logging=yes

Kết luận

Với hướng dẫn này, bạn đã thành công thiết lập MikroTik RouterOS v7 làm Tailscale Exit Node, cho phép route toàn bộ internet traffic của các thiết bị Tailscale qua router này. Exit Node cung cấp:

  • Bảo mật cao: Mã hóa end-to-end cho tất cả internet traffic
  • Flexibility: Có thể bật/tắt exit node từ từng client device
  • Performance: Sử dụng FastTrack để tối ưu throughput
  • Scalability: Hỗ trợ multiple concurrent connections

Đảm bảo thường xuyên cập nhật Tailscale container image và monitor performance để duy trì hoạt động ổn định của hệ thống.

Sources [1] Exit nodes (route all traffic) https://tailscale.com/kb/1103/exit-nodes [2] Tailscale for Mikrotik Container https://github.com/Fluent-networks/tailscale-mikrotik [3] Use exit nodes https://tailscale.com/kb/1408/quick-guide-exit-nodes [4] Tailscale Node on MikroTik https://www.reddit.com/r/Tailscale/comments/rwrpzu/tailscale_node_on_mikrotik/ [5] Tailscale Exit Node - Setup and Configuration https://www.youtube.com/watch?v=HFTqo_ts0iw [6] Netflix over Tailscale (ExitNode) - Containers https://forum.mikrotik.com/t/netflix-over-tailscale-exitnode/163754 [7] FR: Mikrotik Plugin tailscale package · Issue #6743 https://github.com/tailscale/tailscale/issues/6743 [8] Subnet routers · Tailscale Docs https://tailscale.com/kb/1019/subnets [9] Using Tailscale with your firewall https://tailscale.com/kb/1181/firewalls [10] [2025] How to Set Up Tailscale: Network and Exit Node ... https://www.youtube.com/watch?v=IFmsItEmxmU