Điểm:0

Cập nhật liên tục phụ trợ với ổ cắm máy chủ udp

lá cờ fr

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:

nhập mô tả hình ảnh ở đây

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.

nhập mô tả hình ảnh ở đây

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.

Điểm:1
lá cờ br

Bạn có thể làm điều này với iptables. Để tạo cổng chuyển tiếp từ 17X sang 16X:

iptables -A PREROUTING -t nat -p tcp -m tcp --dport 16012 -j DNAT --to-destination :17012
iptables -A PREROUTING -t nat -p udp -m udp --dport 16002 -j DNAT --to-destination :17002

Sau đó, khi bạn muốn chuyển cổng mà nó đang trỏ tới sau khi bạn đã khởi động phiên bản cập nhật của ứng dụng:

iptables -D PREROUTING -t nat -p tcp -m tcp --dport 16012 -j DNAT --to-destination :17012
iptables -D PREROUTING -t nat -p udp -m udp --dport 16002 -j DNAT --to-destination :17002
iptables -A PREROUTING -t nat -p tcp -m tcp --dport 16012 -j DNAT --to-destination :18012
iptables -A PREROUTING -t nat -p udp -m udp --dport 16002 -j DNAT --to-destination :18002

Nếu bạn đang sử dụng một bản phân phối bằng cách sử dụng iptables.service và bạn muốn những thay đổi này là vĩnh viễn, bạn có thể thêm các dòng -A vào /etc/sysconfig/iptables hoặc bất cứ nơi nào tập tin cấu hình của bạn được đặt. Nếu bạn đang sử dụng một bản phân phối sử dụng một tường lửa.service sau đó bạn có thể đạt được mục tiêu tương tự và để nó tồn tại vĩnh viễn trong các lần khởi động lại theo cách này:

Dòng đầu tiên này chỉ cần một lần để kích hoạt giả mạo nói chung

tường lửa-cmd -- Permanent --add-masquerade

Sau đó, để tạo chuyển tiếp ban đầu của bạn:

tường lửa-cmd -- Permanent --add-forward-port=port=16002:proto=udp:toport=17002
tường lửa-cmd -- Permanent --add-forward-port=port=16012:proto=tcp:toport=17012

Khi bạn muốn thay đổi ứng dụng để nghe trên một cổng khác, chỉ cần chạy:

tường lửa-cmd -- Permanent --remove-forward-port=port=16002:proto=udp:toport=17002
tường lửa-cmd -- Permanent --remove-forward-port=port=16012:proto=tcp:toport=17012
tường lửa-cmd -- Permanent --add-forward-port=port=16002:proto=udp:toport=18002
tường lửa-cmd -- Permanent --add-forward-port=port=16012:proto=tcp:toport=18012
lá cờ fr
Cảm ơn Bofa cho câu trả lời rõ ràng. Tôi sẽ cố gắng cập nhật việc chấp nhận trong một hoặc hai ngày tới vì tôi đang bận làm việc với một số bản phát hành khác.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.