Điều khiển Tailscale Exit Node bằng giọng nói với Google Home, Sinric Pro và n8n

Ở bài viết trước, mình đã hướng dẫn cách cài đặt Tailscale Exit Node để chủ động định tuyến mạng nội bộ theo ý muốn.

Mình đang sử dụng tính năng này trên router GL.iNet Flint 2, định tuyến kết nối mạng từ Osaka về Việt Nam để có thể xem Netflix Việt Nam mỗi khi cần (mình đang sống ở Nhật). Lý do vì một số phim chỉ có trên Netflix Việt Nam chứ không có trên Netflix Nhật, ví dụ: các phim của Ghibli Studio (pirited Away, My Neighbor Totoro, and Princess Mononoke,…), phim hài nhảm Việt Nam,…

Tuy nhiên, cách bật/tắt Exit Node qua admin panel của router quá bất tiện. Mỗi lần muốn chỉnh phải dùng trình duyệt truy cập vào router để thao tác. Cách này cũng quá khó cho vợ con để tự xử lý.

Vì vậy, mình đã xây dựng một giải pháp điều khiển Tailscale Exit Node bằng giọng nói qua Google Home, tương tự như giải pháp mở máy tính tự động bằng Google Home mình đã chia sẻ trước đây:

Mục tiêu:

  • Không cần SSH vào router
  • Không cần mở admin panel
  • Có thể bật/tắt bằng giọng nói
  • Người già, trẻ con vẫn dùng được

Gia đình mình đã quen dùng Google Assistant cho các tác vụ như mở nhạc, chỉnh báo thức, bật TV, mở đèn, bật máy lạnh. Vì vậy mình chọn cách điều khiển bằng giọng nói cho đơn giản nhất.

Khi cần xem phim trên Netflix Vietnam, chỉ cần nói:

Hey Google, turn on Netflix Vietnam

Router sẽ tự chuyển toàn bộ kết nối qua exit node Việt Nam.

Khi không cần nữa:

Hey Google, turn off Netflix Vietnam

Router sẽ quay lại kết nối trực tiếp ở Nhật.

I. Kiến trúc tổng thể

Mình ra lệnh “Hey Google, turn on/off Netflix Vietnam”, hệ thống sẽ hoạt động như sau:

  1. Google Home nhận lệnh giọng nói và gửi đến Sinric Pro (một virtual smart switch)
  2. Sinric bridge có chạy ở bất kỳ đâu (VPS, homelab, Proxmox LXC) nhận ra switch của Sinric Pro đã thay đổi trạng thái on/off
  3. Bridge này sẽ thực hiện gọi Webhook đến n8n để kích hoạt workflow
  4. n8n thực hiện lệnh SSH đến router qua mạng ảo Tailscale
  5. Router GL.iNet Flint 2 nhận lệnh và bật/tắt Exit Node
Google Home
Sinric Pro
Sinric Bridge (Node.js/Server)
n8n webhook
SSH qua Tailscale
GL.iNet Flint 2
Switch exit node

Stack sử dụng:

Thành phần Vai trò
Google Home Kích hoạt bằng giọng nói
Sinric Pro Virtual smart switch
Sinric Bridge Nhận event từ Sinric Pro
n8n Điều phối workflow
Tailscale Kết nối bảo mật
GL.iNet Flint 2 Bật/tắt exit node

II. Chuẩn bị

Trước khi bắt đầu, cần phải chuẩn bị:

  • 1 VPS ở Việt Nam đã dược kích hoạt làm Tailscale Exit Node (xem hướng dẫn.)
  • Router OpenWRT (mình dùng Flint 2 GL-MT6000)
  • Tailscale đã được cài đặt trên VPS và Router
  • Google Home
  • Tài khoản Sinric Pro free

III. Tạo Virtual Switch trên Sinric Pro

1. Giới thiệu Sinric Pro

Sinric Pro là một dịch vụ cloud cho phép bạn kết nối các thiết bị IoT với Google Home, Alexa, SmartThings mà không cần code phức tạp. Sinric Pro cung cấp REST API và WebSocket để điều khiển thiết bị, đồng thời tự động sync trạng thái với Google Home.

Với Sinric Pro, mình có thể tạo một “virtual switch” đại diện cho việc bật/tắt Exit Node. Khi Google Home nhận lệnh “turn on Netflix Vietnam”, nó sẽ gửi lệnh đến Sinric Pro, rồi sau đó kích hoạt workflow trong n8n thông qua Sinric Bridge.

Ưu điểm:

  • Miễn phí cho tài khoản cá nhân
  • Không cần code – chỉ cần cấu hình qua portal
  • Hỗ trợ nhiều nền tảng – Google Home, Alexa, SmartThings

2. Tạo tài khoản Sinric Pro

Truy cập vào https://portal.sinric.pro/register để tạo tài khoản mới.

Sau khi đăng nhập, truy cập vào phần Device, bấm Add Device

Tạo Device

Nhập vào thông số:

  • Name:Netflix Vietnam
  • Description:: Switch to activate Netflix Vietnam via Tailscale Exit Node
  • Device Type:Switch
Nhập thông số

Sau khi tạo xong, copy lại các thông số quan trọng:

  • Device ID
  • App Key
  • App Secret
Switch đã tạo xong

IV. Cài đặt n8n

Bạn nào có sẵn Proxmox thì có thể cài đặt nhanh gọn lên LXC theo cách này

Mình sẽ cài đặt n8n bằng Docker lên VPS Vietnam

Terminal window
mkdir-p~/n8n
cd~/n8n

Tạo .env

.env
N8N_HOST=n8n.thuanbui.me
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.thuanbui.me/
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
N8N_RUNNERS_ENABLED=true

Tạo tiếp file compose.yaml

compose.yaml
services:
n8n:
image:docker.n8n.io/n8nio/n8n
container_name:n8n
restart:always
ports:
-"5678:5678"
environment:
-N8N_HOST=${N8N_HOST}
-N8N_PORT=${N8N_PORT}
-N8N_PROTOCOL=${N8N_PROTOCOL}
-NODE_ENV=production
-WEBHOOK_URL=${WEBHOOK_URL}
-GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
-N8N_RUNNERS_ENABLED=${N8N_RUNNERS_ENABLED}
volumes:
-./n8n_data:/home/node/.n8n

Kích hoạt n8n

Terminal window
dockercomposeup-d

Tiếp theo tạo reverse proxy bằng Caddy, theo hướng dẫn bên dưới

V. Tạo workflow trong n8n

Khi truy cập n8n lần đầu tiên, bạn cần phải tạo tài khoản admin để quản lý hệ thống.

Sau đó bấm vào nút Create new workflow để tạo workflow mới.

1. Thêm Webhook

Bấm vào nút Add first step > Tìm và chọn Webhook

n8n

Cấu hình webhook

  • HTTP Method: POST
  • Path: proxy-toggle
  • Authentication: Header Auth

Bấm vào nút Set up credential để tạo thông tin xác thực

Cấu hình webhook

Nhập vào thông tin sau:

  • Name: X-Token
  • Value: your-secret-token-here (nhập vào token bất kỳ, càng dài và càng phức tạp càng tốt)
Cấu hình credential

Lưu lại đường dẫn Production URL

n8n

2. Chuẩn bị SSH key

Trước khi cấu hình SSH node, cần chuẩn bị một cặp SSH key:

1. Generate SSH key (có thể generate ở bất kỳ đâu – VPS, laptop, máy tính khác):

Terminal window
ssh-keygen-ted25519

2. Xem và copy public key:

Terminal window
cat~/.ssh/id_ed25519.pub

Thêm vào public key vào router:

Terminal window
# Thay thế bằng nội dung public key (bắt đầu bằng ssh-ed25519), thay 100.x.x.x bằng Tailscale IP của Router
ssh[email protected]"echo 'ssh-ed25519 AAAA...' >> /etc/dropbear/authorized_keys"

3. Xem private key:

Terminal window
cat~/.ssh/id_ed25519

Copy toàn bộ nội dung (bao gồm cả header/footer -----BEGIN OPENSSH PRIVATE KEY-----). Private key này sẽ dùng ở bước tiếp theo.

3. Thêm SSH Node

Tiếp theo, thêm node SSH vào workflow. Tìm SSH > chọn Execute SSH Command

Bấm vào nút Set up credential

Cấu hình SSH Node

Chọn xác thực bằng Private key

  • Host: nhập vào Tailscale IP của Router
  • Port: 22
  • Username: root
  • Private key: dán nội dung file private key đã copy ở trên
n8n

Nhập đoạn mã sau vào phần Command

{
{
$json.body.action ==="on"
?"uci set tailscale.settings.exit_node_ip='100.x.x.x' && uci commit tailscale && /usr/bin/gl_tailscale restart"
:"uci set tailscale.settings.exit_node_ip='' && uci commit tailscale && /usr/bin/gl_tailscale restart";
}
}

Thay thế 100.x.x.x bằng địa chỉ Tailscale IP của VPS đang dùng làm Tailscale Exit Node

Cấu hình command SSH node

n8n workflow đã được tạo thành công. Bấm Publish để kích hoạt workflow.

Workflow đã sẵn sàng

Lưu ý: Cần lưu lại hai thông số này sẽ cần dùng ở phần cấu hình Sinric Bridge:

  • Production URL: https://n8n.thuanbui.me/webhook/proxy-toggle
  • Token: giá trị bạn nhập ở bước Header Auth (ví dụ: your-secret-token-here)

VI. Deploy Sinric Bridge

1. Tại sao cần Sinric Bridge?

Sinric Pro giao tiếp qua WebSocket (kết nối liên tục), không phải HTTP webhook. Điều này có nghĩa là:

  • Sinric Pro không gửi HTTP request đến server khi có thay đổi trạng thái
  • Thay vào đó, các thiết bị/phần mềm phải kết nối đến Sinric Pro và giữ kết nối WebSocket để nhận sự kiện real-time

Sinric Bridge là một ứng dụng Node.js có nhiệm vụ:

  1. Kết nối WebSocket đến Sinric Pro và lắng nghe sự kiện thay đổi trạng thái switch
  2. Khi Google Home bật/tắt “Netflix Vietnam”, bridge nhận được sự kiện
  3. Bridge gọi n8n webhook để kích hoạt workflow đã tạo ở phần trước

Vì bridge phải duy trì kết nối WebSocket liên tục, nên cần chạy trên thiết bị có uptime cao như VPS, homelab, hoặc Proxmox LXC.

2. Cài đặt Sinric Bridge

Mình tạo sẵn 1 repo dựa trên code mẫu để tạo bridge kết nối Sinric Pro và n8n.

Terminal window
cd~
gitclonehttps://github.com/10h30/sinric-n8n-bridge.git
cdsinric-n8n-bridge

Cập nhật file .env

Terminal window
cp.env.example.env
nano.env

Bổ sung các thông số như bên dưới

APP_KEY=your_app_key
APP_SECRET=your_app_secret
DEVICE_ID=your_device_id
N8N_WEBHOOK_URL=https://n8n.thuanbui.me/webhook/proxy-toggle
N8N_TOKEN=your_secret_token

Kích hoạt

Terminal window
dockercomposeup-d--build

Kiểm tra log

Terminal window
dockercomposelogs-f

Thấy hiện ra như sau nghĩa là Bridge đã kết nối thành công

[SinricPro:INFO] Connecting to wss://ws.sinric.pro:443/
[bridge] Connected

VII. Liên kết Sinric Pro với Google Home

Mở ứng dụng Google Home trên điện thoại → Bấm dấu + trên menu bar để thêm dịch vụ mới → Chọn Link app or service → Chọn Works with Google

Tìm Sinric Pro và sau đó làm theo hướng dẫn để kết nối Sinric Pro và Google Home.

Trong danh sách thiết bị giờ đã có thêm switch Netflix Vietnam

Giờ mình đã có thể ra lệnh

Hey Google, turn on Netflix Vietnam

hoặc

Google, turn off Netflix Vietnam

Tương tự, bạn nào dùng Alexa thì thêm Skill Sinric để điều khiển thông qua các thiết bị Alexa của Amazon.

VIII. Kiểm tra hoạt động

Giờ là lúc kiểm tra thành quả.

Mình ra lệnh “Hey Google, turn on Netflix Vietnam”, rồi mở dashboard admin của router, chọn mục Tailscale trong phần Application. Nếu không có gì sai sót, mục Custom Exit Node đã được tự động kích hoạt và mục Exit Node đã chọn đúng IP của VPS Vietnam.

Truy cập bằng điện thoại hay máy tính vào https://www.whatismyip.com/ để xem có hiện ra IP Việt Nam không. Tiếp theo mở Netflix, sẽ tìm được phim Spirited Away (phim này Netflix Nhật không có, chỉ có trên Netflix Việt Nam)

Nếu hệ thống không hoạt động, cần phải kiểm tra lại ở từng bước để tìm ra lỗi xảy ra ở dâu

  • Sinric Pro: Vào portal Sinric Pro > Device > bật/tắt switch thủ công → xem n8n có nhận được webhook không
  • Xem log của Sinric Bridge: docker compose logs -f
  • n8n: Vào workflow > Manual execution > gọi thử webhook với payload {"action": "on"} hoặc {"action": "off"}
  • Xem log n8n: Dashboard > Workflow > xem execution log
  • Test SSH thủ công từ máy chạy n8n xem kết nối được chưa

IX. Kết luận

Chỉ với Google Home, Sinric Pro, n8n và Tailscale, mình đã biến việc bật/tắt Exit Node thành một trải nghiệm cực kỳ đơn giản — chỉ cần ra lệnh bằng giọng nói, không cần thao tác phức tạp.

Giải pháp này tận dụng tối đa các dịch vụ miễn phí, không cần mua thêm thiết bị, phù hợp cho mọi gia đình muốn tự động hóa mạng một cách linh hoạt và tiết kiệm.

Bên cạnh việc bật/tắt Exit Node, bạn hoàn toàn có thể ứng dụng giải pháp này để tự động hoá nhiều tác vụ mạng nội bộ trong nhà. Ví dụ: tự động khởi động lại router khi mạng chập chờn, bật/tắt VPN cho từng thiết bị, điều khiển các thiết bị IoT không hỗ trợ Google Home/Alexa, hoặc gửi thông báo khi có sự kiện bất thường trên hệ thống mạng.

Combo Google Home + Sinric Pro + n8n + Tailscale này rất linh hoạt, chỉ cần sáng tạo một chút là bạn có thể mở rộng ra nhiều kịch bản tự động hoá khác nhau cho gia đình mình.

Chúc bạn cài đặt thành công!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *