Image default
Máy Tính

Điều Khiển Homelab Từ Xa: Tích Hợp Home Assistant & Tines Qua Email

Với vai trò là một người yêu thích thử nghiệm các dịch vụ và kết nối chúng lại với nhau để tạo ra những “công thức” độc đáo, gần đây tôi đã khám phá nền tảng tự động hóa Tines. Tines nổi bật với khả năng tự động hóa tập trung vào bảo mật và cung cấp nhiều tính năng hữu ích ngay cả trong phiên bản miễn phí. Tuy nhiên, tính năng Tines Tunnel – một công cụ tương tự Cloudflare Tunnel cho phép truy cập an toàn từ xa vào mạng nội bộ – lại bị giới hạn cho các gói đăng ký trả phí. Để có được gói đăng ký này, người dùng cần liên hệ trực tiếp với Tines để nhận báo giá, và nền tảng này chủ yếu nhắm đến các doanh nghiệp lớn.

Tôi thực sự đánh giá cao những tính năng mà Tines mang lại, điều này đã thôi thúc tôi suy nghĩ: liệu có cách nào để tự xây dựng một “đường hầm” tương tự, hoàn toàn thông qua sức mạnh của Home Assistant và các quy trình tự động hóa của nó? Với gói đăng ký Nabu Casa, tôi có thể tạo ra các webhook công khai. Kết hợp điều này với khả năng gửi yêu cầu HTTP và lưu trữ webhook riêng của Tines, tôi có thể tạo ra một chức năng tương tự như Tines Tunnel, với khả năng giao tiếp hai chiều an toàn giữa hai nền tảng. Mặc dù giải pháp này không linh hoạt bằng một đường hầm thực sự, nhưng như bạn sẽ thấy, nó hoàn thành tốt công việc.

Cần lưu ý rằng đây là một thử nghiệm thuần túy mang tính “tôi làm điều này vì tôi có thể,” chứ không phải là một giải pháp mà ai cũng nên cân nhắc. Nó thú vị, hấp dẫn và là cơ hội để học hỏi các phần mềm mới. Đôi khi, việc thử một điều gì đó mới và xem kết quả ra sao lại là điều vui vẻ nhất, và đây chính xác là một trải nghiệm như vậy.

Lựa Chọn Dự Án Và Lên Kế Hoạch

Làm Những Điều Home Assistant Thông Thường Không Thể

Sau khi xác định khả năng thiết lập giao tiếp hai chiều, bước tiếp theo là tìm một dự án cụ thể và lên kế hoạch thực hiện. Với việc Home Assistant có thể liên kết hầu hết mọi thứ trong ngôi nhà của tôi, việc tìm kiếm một ý tưởng độc đáo trở nên khá khó khăn. Với đa số các trường hợp, việc triển khai một quy trình tự động hóa ngay trong Home Assistant là điều dễ dàng, nên tôi cần nghĩ ra một thứ gì đó khác biệt.

Đó là lúc tôi phát hiện hai tính năng thú vị của Tines: “Send email” (Gửi email) và “Receive email” (Nhận email). Những tính năng này hoạt động đúng như tên gọi của chúng; “Send email” dùng để gửi thư điện tử, trong khi “Receive email” sẽ tạo một địa chỉ email ngẫu nhiên gồm các chữ số và ký tự mà bạn có thể gửi yêu cầu đến. Vậy nếu tôi có thể gửi lệnh qua email, sau đó nhận lại phản hồi từ Tines với thông tin yêu cầu hoặc một email xác nhận hành động đã được hoàn tất thì sao? Có thể nói email chính là API nguyên thủy, vì vậy việc thử nghiệm ý tưởng này nghe có vẻ rất thú vị.

Giao diện quản lý TrueNAS và Proxmox trên laptop Windows 11, minh họa môi trường homelabGiao diện quản lý TrueNAS và Proxmox trên laptop Windows 11, minh họa môi trường homelab

Cuối cùng, tôi chọn hai kịch bản làm bằng chứng khái niệm: thứ nhất là tương tác với mô hình LLM (Large Language Model) tự host của mình và nhận phản hồi qua email; thứ hai là điều khiển các container Proxmox đang chạy trong homelab, cho phép tôi khởi động, dừng hoặc khởi động lại chúng từ xa. Điều này có những ẩn ý về bảo mật, nhưng tôi sẽ đề cập và giải thích cách tôi xử lý chúng. Chúng ta đã có một kế hoạch, và việc triển khai nó thực sự dễ dàng một cách đáng ngạc nhiên.

Giải Mã Lệnh Gửi Qua Email

Bảo Mật Dữ Liệu: Kiểm Soát Đầu Vào Home Assistant

Email là một giao thức khá phức tạp với nhiều thành phần giúp chúng ta tin tưởng rằng người gửi đúng là người họ nói. Ví dụ, nếu bạn nhận một email từ “[email protected]”, làm thế nào để bạn xác minh rằng nó thực sự đến từ tôi? Việc giả mạo nguồn gốc email là vô cùng dễ dàng, và nếu tôi sử dụng các lệnh điều khiển homelab của mình, tôi phải chắc chắn rằng những lệnh đó thực sự đến từ tôi chứ không phải từ ai đó đang giả mạo địa chỉ email của tôi.

Trong lĩnh vực email, có một số công nghệ có thể chứng minh liệu người gửi email có thực sự là người gửi hay không. Hai trong số đó là SPF và DKIM, viết tắt của Sender Policy Framework (Khung Chính Sách Người Gửi) và DomainKeys Identified Mail (Thư Điện Tử Được Xác Thực Bằng Khóa Miền). SPF là một kiểm tra đơn giản để đảm bảo rằng địa chỉ IP đã gửi email được miền ủy quyền để làm như vậy. Điều này đã khó giả mạo, và sẽ yêu cầu một cuộc tấn công xen giữa (man-in-the-middle), cướp quyền định tuyến BGP (BGP hijacking), hoặc một chính sách SPF được triển khai kém trên tên miền để vượt qua nó.

Thứ hai, DKIM, lại càng khó bị vượt qua hơn nhiều. DKIM về cơ bản cung cấp một chữ ký số với mỗi email được gửi, và chữ ký này sau đó có thể được so sánh với khóa công khai liên kết với miền. Nếu khớp, email đến từ một người gửi hợp pháp và chưa bị giả mạo. Bằng cách kết hợp hai công nghệ này với DMARC (Domain-based Message Authentication, Reporting, and Conformance), khó có thể đạt được mức độ bảo mật mạnh mẽ hơn mà không cần thêm một khóa bí mật mà chỉ bạn biết vào email để kiểm tra. Nếu tôi định sử dụng giải pháp này lâu dài, tôi chắc chắn sẽ triển khai thêm khóa bí mật đó.

Khi bạn gửi một email đến địa chỉ Tines cung cấp, các kiểm tra này đều có trong các tiêu đề (headers). Do đó, chúng ta có thể đơn giản kiểm tra xem “spf=pass”, “dkim=pass” và “dmarc=pass” có tồn tại trong đối tượng “Authentication-Results” hay không. Nếu không, chúng ta có thể tạo một luồng thất bại để gửi email thông báo cho tôi, và nếu chúng đều vượt qua, chúng ta có thể tiếp tục với phần còn lại của quy trình.

Xây Dựng Luồng Tự Động Hóa Trên Tines

Sơ đồ luồng tự động hóa email trong Tines, minh họa các bước xử lý và kiểm tra xác thựcSơ đồ luồng tự động hóa email trong Tines, minh họa các bước xử lý và kiểm tra xác thực

Phần còn lại của luồng tự động hóa tương đối đơn giản. Đầu tiên, chúng ta cần trích xuất các lệnh từ chủ đề và nội dung email, sau đó thiết lập một luồng dẫn đến các bộ kích hoạt (triggers) khác nhau. Các Triggers về cơ bản là một chuỗi các khối “if-else”, nơi chúng ta có thể kích hoạt dựa trên một lệnh và có nhiều chuỗi này cùng nhau dựa trên văn bản mà chúng ta trích xuất.

Khi nói đến việc trích xuất văn bản, Tines làm điều đó khá dễ dàng. Bạn có thể chỉ cần truyền một chuỗi từ một biến đã khai báo, hoặc bạn có thể trích xuất từ một đối tượng JSON, và còn nhiều tùy chọn khác nữa. Chúng ta sẽ trích xuất từ tham số “receive_email_action.body”, nhưng có một vấn đề: nội dung email trông giống như thế này (dấu ngoặc nhọn đã được thay thế bằng dấu ngoặc vuông thông thường):

"(div dir="ltr")104(/div)n"

Chúng ta muốn lấy phần “104”, nhưng việc chỉ lấy nội dung bên trong div thì khá khó. May mắn thay, Tines cũng hỗ trợ biểu thức chính quy (regex), vì vậy chúng ta có thể thực hiện như sau để lấy văn bản bên trong div một cách nhất quán, trong đó dấu ngoặc nhọn đã được thay thế bằng ký tự ‘C’:

Cdiv[^C]*C s*w+s+(.*?) C/divC

Điều này giúp chúng ta chỉ lấy được văn bản bên trong div và gán nó vào một biến. Dòng tiêu đề thì dễ dàng, và biểu thức chính quy duy nhất chúng ta cần là “.*”. Cuối cùng, các triggers đơn giản kiểm tra xem văn bản được trích xuất là gì, và phản ứng tương ứng dựa trên việc nó là “proxmox start”, “proxmox stop”, hoặc “proxmox reboot”.

Giao diện thiết lập các trigger và điều kiện trong luồng tự động hóa Tines, chi tiết các nhánh xử lý lệnhGiao diện thiết lập các trigger và điều kiện trong luồng tự động hóa Tines, chi tiết các nhánh xử lý lệnh

Phần tiếp theo này có thể được cải thiện đáng kể bằng cách kết nối mọi thứ vào một yêu cầu HTTP duy nhất. Tuy nhiên, ở đây tôi thực hiện một yêu cầu HTTP từ Tines đến webhook của Home Assistant, với khóa của đối tượng JSON được gửi là “start”, “stop” hoặc “reboot”, và giá trị là số được trích xuất từ email.

Để cải thiện thêm và giảm số lượng khối đang sử dụng, tôi có thể tạo động khóa được gửi trong đối tượng JSON dựa trên lệnh, và giữ tất cả trong một khối yêu cầu HTTP duy nhất trong Tines. Nhưng còn về phía Home Assistant thì sao? Các lệnh phải được đưa đến một nơi nào đó, vì vậy chúng ta sẽ chuyển sang phần kết nối tất cả lại với nhau.

Thiết Lập Home Assistant

Chỉ Cần Một Automation Duy Nhất

Trước hết, tôi đang sử dụng tích hợp Proxmox VE HACS, đây là một phiên bản nâng cao của tích hợp Proxmox tích hợp sẵn. Nó có một quá trình thiết lập hơi dài, nhưng kết quả là bạn có thể điều khiển tất cả các máy ảo (VM) và container LXC của mình từ Home Assistant.

Để bắt đầu, chúng ta tạo một automation trong Home Assistant, được kích hoạt dựa trên một webhook. Điều này sẽ tự động tạo webhook cho bạn. Ở đây, tôi chỉ thiết lập nó cho các container LXC, nhưng sẽ khá dễ dàng để chuyển đổi và giúp bạn điều khiển cả các máy ảo nữa. Chúng ta có thể tận dụng thực tế là mỗi cảm biến được tạo bởi tích hợp đều tuân theo cùng một định dạng:

button.lxc_(tên)_(số)_(start/stop/reboot)

Với tích hợp của mình, chúng ta định nghĩa các biến sau:

  • action: là start, stop, hoặc reboot
  • number: giá trị trong payload được gửi từ Tines
  • button_entity: lặp qua tất cả các nút, kiểm tra:
    • các nút bắt đầu bằng “button.lxc_”
    • các nút kết thúc bằng “_(action)”
    • các nút có chứa number
  • status_sensor: cảm biến liên quan đến dịch vụ, để xác nhận xem hành động của chúng ta có thành công hay không

Giao diện thiết lập tự động hóa Home Assistant cho Proxmox và Tines, hiển thị cấu hình webhook và điều kiệnGiao diện thiết lập tự động hóa Home Assistant cho Proxmox và Tines, hiển thị cấu hình webhook và điều kiện

Với cách này, chúng ta có thể gửi một lệnh như “proxmox start 104” qua email đến Tines, lệnh này được trích xuất, sau đó được gửi đến webhook của Home Assistant. Nó được diễn giải, các biến được thiết lập, và chúng ta nhấn nút thông qua biến “button_entity”.

Cuối cùng, chúng ta đợi 15 giây, sau đó thăm dò cảm biến. Nếu nó trả về giá trị mong đợi, chúng ta gửi một rest_command đến webhook của Tines, từ đó Tines sẽ gửi một email thông báo hành động có thành công hay không, bằng cách kiểm tra xem giá trị mong đợi có khớp với giá trị thực tế hay không.

Nền Tảng Tự Động Hóa Mở Ra Cơ Hội Mới Cho Homelab

Hãy nói rõ: đây là một “giải pháp” được thiết kế quá mức phức tạp cho một vấn đề thực sự không tồn tại. Tuy nhiên, tôi đã thực hiện nó để chỉ ra cách một công cụ như Tines có thể được sử dụng để tự động hóa việc điều khiển homelab của bạn. Thông qua Home Assistant đóng vai trò như một đường hầm, bạn có thể kích hoạt giao tiếp hai chiều giữa homelab của mình và nền tảng Tines dựa trên đám mây. Điều này có thể hữu ích theo nhiều cách khác thông qua các công cụ như tích hợp command_line để gửi chỉ thị đến các máy chủ hoặc container khác trong mạng của bạn.

Đối với những người lo ngại về bảo mật khi sử dụng một công cụ tự động hóa dựa trên đám mây, Tines luôn đặt bảo mật lên hàng đầu. Dịch vụ đám mây của họ tuân thủ SOC2 Type 2. Mặc dù “tuân thủ” là một chủ đề khác hoàn toàn khi không có cơ quan tập trung nào để thực hiện các cuộc kiểm toán đó, bạn có thể yên tâm rằng Tines được xây dựng dựa trên tự động hóa và bảo mật. Các tài khoản Community edition, như tôi đang sử dụng ở đây, chỉ lưu giữ nhật ký trong bảy ngày. Điều này có những hạn chế, chẳng hạn như các quy trình tự động hóa dài hạn bị giới hạn trong một tuần, nhưng cũng rất tuyệt vời vì nó có nghĩa là dữ liệu của bạn sẽ biến mất sau một tuần.

Việc triển khai một hệ thống như thế này đòi hỏi sự cẩn trọng đặc biệt trong việc bảo vệ dữ liệu và cách các lệnh của bạn được kích hoạt. Tuy nhiên, nền tảng này được xây dựng để cung cấp loại chức năng đó cho các doanh nghiệp lớn. Một số người thích kiểm soát mọi thứ cục bộ, điều này hoàn toàn dễ hiểu, và đối với những người đó, một công cụ như n8n sẽ phù hợp hơn với trường hợp sử dụng của bạn.

Bạn có bao giờ thử nghiệm những giải pháp “quá phức tạp” tương tự để điều khiển homelab của mình không? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới!

Related posts

Khai Thác Tiềm Năng Vô Tận Của NotebookLM: Hơn Cả Ghi Chú Thông Thường

Administrator

Vụ Lừa Đảo SoftRAM: Câu Chuyện Chấn Động Thập Niên 90 Về “Phần Mềm Tăng RAM” Giả Mạo

Administrator

5 Nguyên Nhân Thường Gặp Khiến Quạt PC Kêu To Và Cách Khắc Phục Hiệu Quả

Administrator