Ở 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:
- Google Home nhận lệnh giọng nói và gửi đến Sinric Pro (một virtual smart switch)
- 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
- Bridge này sẽ thực hiện gọi Webhook đến n8n để kích hoạt workflow
- n8n thực hiện lệnh SSH đến router qua mạng ảo Tailscale
- 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
Nhập vào thông số:
- Name:
Netflix Vietnam - Description::
Switch to activate Netflix Vietnam via Tailscale Exit Node - Device Type:
Switch
Sau khi tạo xong, copy lại các thông số quan trọng:
- Device ID
- App Key
- App Secret
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
mkdir-p~/n8ncd~/n8n
Tạo .env
N8N_HOST=n8n.thuanbui.meN8N_PORT=5678N8N_PROTOCOL=httpsWEBHOOK_URL=https://n8n.thuanbui.me/GENERIC_TIMEZONE=Asia/Ho_Chi_MinhN8N_RUNNERS_ENABLED=true
Tạo tiếp file compose.yaml
services:n8n:image:docker.n8n.io/n8nio/n8ncontainer_name:n8nrestart:alwaysports:-"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
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
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
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)
Lưu lại đường dẫn Production URL
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):
ssh-keygen-ted25519
2. Xem và copy public key:
cat~/.ssh/id_ed25519.pub
Thêm vào public key vào router:
# 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
3. Xem private key:
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
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
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
n8n workflow đã được tạo thành công. Bấm Publish để kích hoạt workflow.
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ụ:
- Kết nối WebSocket đến Sinric Pro và lắng nghe sự kiện thay đổi trạng thái switch
- Khi Google Home bật/tắt “Netflix Vietnam”, bridge nhận được sự kiện
- 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.
cd~gitclonehttps://github.com/10h30/sinric-n8n-bridge.gitcdsinric-n8n-bridge
Cập nhật file .env
cp.env.example.envnano.env
Bổ sung các thông số như bên dưới
APP_KEY=your_app_keyAPP_SECRET=your_app_secretDEVICE_ID=your_device_idN8N_WEBHOOK_URL=https://n8n.thuanbui.me/webhook/proxy-toggleN8N_TOKEN=your_secret_token
Kích hoạt
dockercomposeup-d--build
Kiểm tra log
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!
