Tôi có một hệ thống phụ trợ được sử dụng cho các thiết bị IOT sử dụng giao thức UDP để liên lạc. Và có một số API dựa trên TCP (HTTP2) nhất định cho các ứng dụng dành cho thiết bị di động từ cùng một chương trình phụ trợ.
Tôi đang cố gắng xây dựng tính năng cập nhật cuốn chiếu để cho phép vá lỗi 0 thời gian ngừng hoạt động của các dịch vụ phụ trợ.
Thiết lập của tôi là như thế này.
Thay vì hiển thị trực tiếp các ổ cắm cho ứng dụng, tôi đang cố gắng tạo proxy trong suốt cho các quy trình của mình. Tôi đã hiển thị 2 ổ cắm (1 udp và 1 tcp) với internet công cộng bằng tường lửa.
Máy chủ sản xuất của tôi đang mở các bộ cổng khác nhau cho udp và tcp (có thể thay đổi thông qua các biến môi trường mà không thay đổi tệp nhị phân cơ bản).
Bước 1:
Tôi đang cố gắng tạo proxy minh bạch trong cùng một máy từ cổng udp 16002 đến 17002. Đối với udp, máy chủ của tôi cũng sẽ bắt đầu một số giao tiếp với các thiết bị trong tự nhiên. Máy chủ sẽ thấy IP/cổng nguồn cũng như liên lạc lại với các thiết bị này có thể thuộc một số NAT (thông thường, bộ định tuyến WiFi) bằng cách tôn trọng chính sách gốc của NAT.
Và tương tự cho tcp. Từ cổng 16012 đến cổng 17012.
Đây là triển khai điển hình bằng cách bên ngoài các cổng thực.
Tôi không thể thực hiện công việc này.
Bước 2:
Bất cứ khi nào có mã mới cần vá, tôi muốn hiển thị mã mới trên hai bộ cổng khác nhau như trong hình bên dưới (P2 - Quy trình 2).
Khi quy trình 2 được thiết lập và chạy, tôi sẽ thay đổi ánh xạ địa chỉ IP thành Quy trình mới (P2). Sau khi dành thời gian nhất định để P1 hoàn thành mọi hoạt động IO đang chờ xử lý, chúng tôi sẽ gỡ bỏ Quy trình P1.
Đối với bản vá tiếp theo, chúng tôi sẽ đưa ra P1' và quá trình ngược lại.
Có lỗ hổng nào trong thiết kế này không? Điều này có thể đạt được về mặt kỹ thuật bằng cách sử dụng iptables và tproxy hoặc bất kỳ công cụ linux nào khác không?
Tôi đã xem xét việc xây dựng một bộ định tuyến L7 và chuyển tiếp các gói qua lại bằng cách xác định các đối tượng cấp cao. Nhưng tôi tò mò liệu điều này có thể được thực hiện bằng cách sử dụng định tuyến cấp thấp L3/L4 hay không vì nó có thể hiệu quả hơn và đã được thử nghiệm trong trận chiến. Chắc chắn, các công cụ nft, iptables này có vấn đề về khả năng sử dụng và không trực quan lắm, đặc biệt là nft, đối với nhà phát triển.