Giao diện TrueNAS và Proxmox hiển thị trên laptop Windows 11, minh họa hệ thống homelab.
Máy Tính

Tự động hóa Homelab từ xa qua Email: Kết hợp Home Assistant và Tines

Trong hành trình khám phá các dịch vụ và liên kết chúng lại với nhau để tạo ra những cấu hình độc đáo, tôi đã dành thời gian trải nghiệm Tines. Đây là một nền tảng tự động hóa tập trung mạnh mẽ vào bảo mật, và mặc dù có các gói đăng ký trả phí, phiên bản miễn phí cũng cho phép thực hiện nhiều tác vụ. Tuy nhiên, tính năng Tines Tunnel – tương tự như Cloudflare Tunnel – lại bị giới hạn sau rào cản đăng ký trả phí, vốn chỉ dành cho các doanh nghiệp sau khi liên hệ để nhận báo giá.

Với sự yêu thích các tính năng mà Tines cung cấp, tôi bắt đầu suy nghĩ: liệu có cách nào để tự xây dựng một dạng “tunnel” tương tự, hoàn toàn thông qua sức mạnh của Home Assistant và các automation của nó? Với gói đăng ký Nabu Casa, tôi có thể tạo các webhook công khai, và Tines có khả năng thực hiện các yêu cầu HTTP cũng như tự host các webhook. Bằng cách kết nối hai nền tảng này lại với nhau, tôi có thể tạo ra chức năng tương tự như một tunnel, với khả năng giao tiếp hai chiều an toàn giữa chúng. Mặc dù không linh hoạt bằng một tunnel thực sự, nhưng như bạn sẽ thấy, nó hoàn toàn đáp ứng được mục tiêu.

Điều quan trọng cần lưu ý là đây là một thử nghiệm mang tính “làm vì tôi có thể”, chứ không phải một giải pháp mà mọi người nên cân nhắc. Nó mang lại niềm vui, sự thú vị và cơ hội học hỏi những 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 tuyệt vời nhất, và đây chính là ví dụ điển hình.

Lựa chọn dự án và xây dựng kế hoạch

Tận dụng khả năng độc đáo của Tines với Home Assistant

Giao diện TrueNAS và Proxmox hiển thị trên laptop Windows 11, minh họa hệ thống homelab.Giao diện TrueNAS và Proxmox hiển thị trên laptop Windows 11, minh họa hệ thống homelab.

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

Đó là lúc tôi phát hiện hai hành động thú vị mà Tines cung cấp: “Send email” (Gửi email) và “Receive email” (Nhận email). Các 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 email, trong khi “Receive email” tạo ra một địa chỉ email ngẫu nhiên gồm các số và chữ cái 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, và 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ủa tôi đã hoàn tất thì sao? Một số người có thể coi email là API nguyên thủy, vì vậy việc đưa nó vào thử nghiệm nghe có vẻ là một ý tưởng thú vị.

Cuối cùng, tôi chọn hai hướng tiếp cận để làm bằng chứng về khái niệm: thứ nhất là tương tác với mô hình LLM (Large Language Model) tự host 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 của tôi, cho phép tôi khởi động (start), dừng (stop) hoặc khởi động lại (reboot) chúng từ xa. Tất nhiên, có những vấn đề về bảo mật liên quan đến điều này, nhưng tôi sẽ trình bày 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ó lại dễ dàng đến bất ngờ.

Giải thích cơ chế xử lý lệnh gửi qua Email

Đảm bảo bảo mật và xác thực nguồn gửi Email

Ứng dụng Home Assistant trên máy tính bảng hiển thị trạng thái hệ thống Raspberry Pi.Ứng dụng Home Assistant trên máy tính bảng hiển thị trạng thái hệ thống Raspberry Pi.

Email là một giao thức khá phức tạp với nhiều thành phần giúp tin tưởng rằng người gửi đúng là người họ nói. Ví dụ, nếu bạn nhận được một email từ “[email protected]”, làm thế nào bạn có thể 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 có các lệnh điều khiển homelab của mình, tôi cần phải đảm bảo rằng những lệnh đó thực sự đến từ tôi chứ không phải từ một kẻ mạo danh đị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 và DomainKeys Identified Mail. SPF là một kiểm tra đơn giản để đảm bảo rằng địa chỉ IP gửi email được phép gửi bởi tên miền đó. Điều này vốn đã khó giả mạo, và sẽ yêu cầu tấn công man-in-the-middle, chiếm quyền BGP, hoặc chính sách SPF được triển khai kém trên tên miền để vượt qua.

Tuy nhiên, DKIM lại khó 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 tên miền. Nếu khớp, email đến từ một người gửi hợp pháp và chưa bị can thiệp. Bằng cách kết hợp hai công nghệ này với DMARC, rất khó để có một cơ chế xác thực mạnh mẽ hơn mà không cần thêm một khóa bí mật chỉ bạn biết vào email để kiểm tra. Nếu tôi có ý đị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 bước đó.

Khi bạn gửi email đến địa chỉ Tines cung cấp, tất cả các kiểm tra này đều nằm trong phần header. Vì vậy, 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 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.

Tích hợp và xử lý lệnh trong Tines

Sơ đồ luồng tự động hóa email của Tines với các trigger xử lý kết quả xác thực SPF, DKIM, DMARC.Sơ đồ luồng tự động hóa email của Tines với các trigger xử lý kết quả xác thực SPF, DKIM, DMARC.

Phần còn lại của luồng làm việc khá đơn giản. Đầu tiên, chúng ta cần trích xuất các lệnh từ tiêu đề (subject) và nội dung (body) của email, sau đó thiết lập một luồng chuyển đến các trigger khác nhau. Các trigger về cơ bản là một chuỗi các khối “if-else”, vì chúng ta có thể kích hoạt dựa trên một lệnh và có nhiều chuỗi lệnh này 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 cho việc này khá dễ dàng. Bạn có thể đơn giả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 như thế này (dấu ngoặc nhọn đã được thay bằng dấu ngoặc vuông):

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

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

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

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

Sơ đồ chi tiết các trigger của Tines xử lý lệnh điều khiển Proxmox (start, stop, reboot) từ email.Sơ đồ chi tiết các trigger của Tines xử lý lệnh điều khiển Proxmox (start, stop, reboot) từ email.

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, nhưng tôi lại thực hiện một yêu cầu HTTP từ Tines đến webhook Home Assistant của tôi, 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? Các lệnh phải được gửi đến một nơi nào đó, vì vậy chúng ta sẽ chuyển sang việc kết nối tất cả lại với nhau.

Thiết lập Home Assistant cho việc điều khiển

Triển khai tự động hóa chỉ với một automation

Giao diện thiết lập automation trong Home Assistant để tích hợp điều khiển Proxmox qua Tines.Giao diện thiết lập automation trong Home Assistant để tích hợp điều khiển Proxmox qua Tines.

Đầu tiên và quan trọng nhất, tôi đang sử dụng tích hợp HACS Proxmox VE, đâ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 khá dài, nhưng kết quả là có thể điều khiển tất cả các máy ảo (VM) và container LXC của bạn 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. Việc này sẽ tự động tạo webhook cho bạn. Ở đây tôi chỉ thiết lập nó cho các LXC, nhưng việc chuyển đổi để điều khiển các máy ảo cũng khá dễ dàng. Chúng ta có thể tận dụng thực tế là mọi sensor được tạo bởi tích hợp đều tuân theo cùng một định dạng:

button.lxc_(name)_(number)_(start/stop/reboot)

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

  • action: có thể 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 số được gửi
  • status_sensor: sensor liên quan đến dịch vụ, để xác nhận liệu hành động của chúng ta có hoạt động hay không

Với những thiết lập 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 sẽ được trích xuất và sau đó được gửi đến webhook Home Assistant của chúng ta. Lệnh sẽ được giải thích, các biến được đặt, và chúng ta nhấn vào biến “button_entity”.

Cuối cùng, chúng ta đợi 15 giây, sau đó thăm dò sensor. Nếu nó trả về giá trị mong đợi, chúng ta gửi một lệnh rest_command đến webhook Tines của chúng ta, lệnh này sẽ kích hoạt một email thông báo liệu hành động có thành công hay thất bại, 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 có thể mở khóa những cách mới để điều khiển homelab

Hãy rõ ràng: đâ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ư thế này 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 như một dạng tunnel, bạn có thể kích hoạt giao tiếp hai chiều giữa homelab 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 hướng dẫn đến các máy chủ hoặc container khác trong mạng của bạn.

Đối với những ai 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 đặt bảo mật lên hàng đầu. Dịch vụ đám mây của họ tuân thủ tiêu chuẩn 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 đó. Tuy nhiên, hãy yên tâm rằng Tines được xây dựng trên nền tảng tự động hóa và bảo mật vững chắc. Các tài khoản Community edition, mà tôi đang sử dụng ở đây, chỉ lưu giữ nhật ký trong bảy ngày. Có những hạn chế đối với điều đó, chẳng hạn như các tự động hóa dài hạn bị giới hạn trong một tuần, nhưng điều này cũng 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 gọi. Nhưng 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 họ.


Related posts

Tiện ích Chrome “Scream to Unlock”: La Lớn Để Kiểm Soát Nghiện Mạng Xã Hội?

Administrator

Joplin Năm 2024: Liệu Ứng Dụng Ghi Chú Này Còn Đáng Dùng Trong Thế Giới Notion và Obsidian?

Administrator

Tailscale Funnel: Giải Pháp Đơn Giản Cho Truy Cập Dịch Vụ Tự Host Từ Xa

Administrator

Microsoft Đại Tu Windows Để Tối Ưu Cho Máy Chơi Game Cầm Tay

Administrator

Microsoft Store trên Windows 10 Mobile Đã Chính Thức Ngừng Hoạt Động

Administrator

Nvidia Đã Đạt Đỉnh Với GTX 10 Series – Liệu Có Thể Vượt Qua?

Administrator