Điều khiển Tailscale Exit Node bằng giọng nói với Google Home, Sinric Pro và n8n
Ở bài trước mình đã hướng dẫn dựng Tailscale Exit Node để xem Netflix Việt Nam từ nước ngoài. Setup chạy ngon, nhưng có một vấn đề phát sinh trong thực tế: mỗi lần muốn bật/tắt Exit Node lại phải mở trang admin của router, đăng nhập, click vài bước. Mình làm thì không sao, nhưng người nhà – bố mẹ, con nhỏ – thì chịu.
Thế là mình nghĩ: sao không biến nó thành một “công tắc” trong Google Home? Muốn xem phim Việt Nam thì chỉ cần nói “Hey Google, turn on Netflix Vietnam”, xong phim thì bảo tắt. Không admin panel, không SSH, ai trong nhà cũng dùng được. Bài này mình sẽ chia sẻ cách làm.
Kiến trúc tổng thể
Hệ thống là một chuỗi nối tiếp các công cụ, dữ liệu chạy như sau:
- Bạn ra lệnh giọng nói cho Google Home.
- Sinric Pro đóng vai công tắc thông minh ảo, nhận lệnh bật/tắt từ Google.
- Sinric bridge (một app cầu nối nhỏ) lắng nghe thay đổi trạng thái từ Sinric Pro qua WebSocket.
- Khi công tắc đổi trạng thái, bridge bắn một Webhook sang n8n.
- n8n nhận tín hiệu và chạy một lệnh SSH qua mạng Tailscale.
- Lệnh này đi vào router GL.iNet Flint 2 (hoặc router OpenWRT bất kỳ) để bật/tắt Exit Node.
Nghe qua thì nhiều tầng, nhưng mỗi tầng đều đơn giản và setup một lần là chạy mãi.
Cần chuẩn bị những gì
- Một VPS ở Việt Nam đã cấu hình sẵn làm Tailscale Exit Node (xem bài trước).
- Router chạy OpenWRT – mình dùng GL-MT6000 Flint 2 của GL.iNet.
- Tailscale đã cài và đăng nhập trên cả VPS lẫn router.
- Loa Google Home hoặc Google Assistant trên điện thoại.
- Tài khoản Sinric Pro (miễn phí).
- Một máy chạy 24/7 để host n8n và Sinric bridge – homelab, LXC hay VPS đều được.
Tạo công tắc ảo trên Sinric Pro
Sinric Pro là dịch vụ giúp đưa thiết bị IoT tự chế vào Google Home / Alexa mà không phải tự viết phần tích hợp – đúng thứ mình cần.
Đăng ký tài khoản trên trang chủ Sinric Pro, vào dashboard, tìm mục thiết bị và bấm thêm thiết bị mới.

Điền thông tin cho công tắc:
- Name: đặt tên dễ gọi, ví dụ “Netflix Vietnam” (đây cũng là tên bạn sẽ nói với Google).
- Description: Chuyển đổi Tailscale Exit Node để xem phim Việt Nam.
- Device Type: bắt buộc chọn Switch.

Tạo xong, Sinric sẽ cấp cho bạn ba thông số: Device ID, App Key và App Secret. Lưu lại cẩn thận, lát nữa sẽ dùng.

Cài n8n
n8n là trung tâm điều phối logic của cả hệ thống. Cách nhanh nhất là chạy bằng Docker.
Tạo thư mục chứa dữ liệu:
mkdir -p ~/n8n
cd ~/n8nTạo file .env:
N8N_HOST=n8n.vnrom.net
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.n8n.vnrom.net/
GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
N8N_RUNNERS_ENABLED=trueRồi file 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/.n8nKhởi chạy:
docker compose up -dLưu ý: bạn cần trỏ tên miền và có SSL cho n8n (qua reverse proxy như Caddy hoặc Nginx Proxy Manager) để webhook hoạt động an toàn từ bên ngoài.
Dựng workflow trong n8n
Lần đầu vào giao diện web n8n, bạn tạo tài khoản admin rồi bấm tạo workflow mới.
Bước 1 – Webhook node. Thêm node Webhook với cấu hình:
- HTTP Method: POST
- Path: proxy-toggle
- Authentication: Header Auth


Ở phần credential, tạo một header tên X-Token với giá trị là một chuỗi mật khẩu dài ngẫu nhiên – để không ai ngoài Sinric bridge gọi được webhook này.

Nhớ copy lại Production URL của webhook, lát nữa cấu hình bridge sẽ cần.

Bước 2 – Tạo SSH key. Để n8n ra lệnh cho router mà không cần mật khẩu, tạo cặp khóa SSH trên máy đang chạy n8n:
ssh-keygen -t ed25519In public key ra và copy:
cat ~/.ssh/id_ed25519.pubĐưa public key này vào router (thay IP bằng IP Tailscale của router bạn):
ssh [email protected] "echo 'ssh-ed25519 AAAA...' >> /etc/dropbear/authorized_keys"Còn private key thì xem bằng cat ~/.ssh/id_ed25519 và copy toàn bộ.
Bước 3 – SSH node. Thêm node SSH, chọn action Execute SSH Command.

Phần credential: chọn Private key, Host là IP Tailscale của router, Port 22, Username root, dán private key vào ô tương ứng.

Phần Command, dán đoạn này – nó đọc dữ liệu từ webhook và quyết định bật hay tắt Exit Node qua UCI (hệ thống cấu hình của OpenWRT):
{
{
$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";
}
}Nhớ thay 100.x.x.x bằng IP Tailscale của con VPS ở Việt Nam nhé.

Lưu và Activate workflow. Xong phần n8n.

Cài Sinric bridge
Có thể bạn thắc mắc: sao không nối thẳng Sinric Pro vào n8n cho gọn? Vấn đề là Sinric Pro giao tiếp với thiết bị qua WebSocket (kết nối thời gian thực), chứ không bắn HTTP webhook một chiều. Vì vậy cần một app trung gian nhỏ bằng Node.js: nó ngồi nghe WebSocket từ Sinric, khi công tắc đổi trạng thái thì chuyển thành HTTP POST gửi cho n8n.
Tải mã nguồn về:
cd ~
git clone https://github.com/10h30/sinric-n8n-bridge.git
cd sinric-n8n-bridgeCopy file cấu hình mẫu và sửa:
cp .env.example .env
nano .envĐiền các thông số đã lưu ở các bước trước:
APP_KEY=khóa_ứng_dụng_của_bạn
APP_SECRET=mật_khẩu_ứng_dụng_của_bạn
DEVICE_ID=mã_thiết_bị_trên_sinric
N8N_WEBHOOK_URL=https://n8n.vnrom.net/webhook/proxy-toggle
N8N_TOKEN=chuỗi_mật_khẩu_webhook_của_bạnChạy bằng Docker:
docker compose up -d --buildXem log để chắc là kết nối ổn:
docker compose logs -fThấy dòng báo kết nối thành công là bridge đã nói chuyện được với server của Sinric.
Liên kết với Google Home
Bước cuối, và cũng là bước dễ nhất. Mở app Google Home, bấm dấu + để thêm thiết bị, chọn Works with Google và tìm Sinric Pro. Đăng nhập tài khoản Sinric, cấp quyền, và công tắc “Netflix Vietnam” sẽ xuất hiện ngay trong app.
Nhà nào dùng Alexa thì cũng tương tự – kích hoạt skill Sinric Pro trong app Alexa là xong.
Chạy thử và xử lý sự cố
Giờ là lúc tận hưởng thành quả:
“Hey Google, turn on Netflix Vietnam”
Vào trang admin router kiểm tra, bạn sẽ thấy Custom Exit Node đã tự bật và trỏ về VPS ở Việt Nam. Mở trang check IP trên điện thoại – nếu nó báo bạn đang ở Việt Nam thay vì Nhật, và Netflix trên tivi hiện phim Spirited Away bản Việt, thì mọi thứ đã chạy ngon.
Xem xong thì:
“Hey Google, turn off Netflix Vietnam”
Nếu có gì đó không chạy, hãy debug theo đúng chuỗi:
- Bật/tắt công tắc thủ công trên web Sinric Pro – nếu không có gì xảy ra, vấn đề nằm ở phía sau.
- Xem log của Sinric bridge – bridge có nhận được tín hiệu không?
- Kiểm tra execution log trong n8n – webhook có vào không, lệnh SSH có gửi đi không?
- Cuối cùng, xác nhận router chấp nhận SSH key để lệnh chạy được mà không hỏi mật khẩu.
Setup này của mình đã chạy ổn định vài tháng nay. Điều mình thích nhất không phải là công nghệ, mà là việc cả nhà giờ ai cũng “quản trị mạng” được – chỉ bằng một câu nói.
Và một khi đã có bộ khung Google Home → Sinric → n8n → SSH này, bạn có thể chế ra vô số kịch bản khác: tự động restart router khi rớt mạng, giới hạn giờ dùng internet cho trẻ nhỏ, hay điều khiển mấy công tắc IoT trôi nổi không hỗ trợ trợ lý ảo. Có nền tảng rồi thì giới hạn chỉ còn là trí tưởng tượng thôi. Chúc bạn setup thành công!
Chia sẻ: Thuận Bùi







