Score:0

อัปเดตแบ็กเอนด์ด้วยซ็อกเก็ตเซิร์ฟเวอร์ udp

ธง fr

ฉันมีระบบแบ็กเอนด์ที่ใช้กับอุปกรณ์ IOT ซึ่งใช้โปรโตคอล UDP ในการสื่อสาร และมี API ที่ใช้ TCP (HTTP2) บางตัวสำหรับแอปมือถือจากแบ็กเอนด์เดียวกัน

ฉันกำลังพยายามสร้างคุณลักษณะการอัปเดตแบบต่อเนื่องเพื่อเปิดใช้งานการแพตช์บริการแบ็กเอนด์ที่หยุดทำงานเป็น 0

การตั้งค่าของฉันเป็นแบบนี้

แทนที่จะเปิดเผยซ็อกเก็ตไปยังแอปโดยตรง ฉันกำลังพยายามใช้พร็อกซีแบบโปร่งใสกับกระบวนการของฉัน ฉันได้เปิดเผย 2 ซ็อกเก็ต (1 udp และ 1 tcp) กับอินเทอร์เน็ตสาธารณะโดยใช้ไฟร์วอลล์

เซิร์ฟเวอร์ที่ใช้งานจริงของฉันกำลังเปิดชุดพอร์ตที่แตกต่างกันสำหรับ udp และ tcp (ซึ่งสามารถเปลี่ยนแปลงได้ผ่านตัวแปรสภาพแวดล้อมโดยไม่ต้องเปลี่ยนไบนารีพื้นฐาน)

ขั้นตอนที่ 1:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันกำลังพยายามสร้างพร็อกซีโปร่งใสในเครื่องเดียวกันจากพอร์ต udp 16002 ถึง 17002 สำหรับ udp เซิร์ฟเวอร์ของฉันจะเริ่มต้นการสื่อสารบางอย่างกับอุปกรณ์ในไวด์ด้วย เซิร์ฟเวอร์ควรเห็น IP/พอร์ตต้นทาง รวมทั้งสื่อสารกลับกับอุปกรณ์เหล่านี้ซึ่งอาจอยู่ภายใต้ NAT บางตัว (โดยทั่วไปคือเราเตอร์ WiFi) โดยเคารพนโยบายแหล่งกำเนิดเดียวกันของ NAT

และเช่นเดียวกันสำหรับ tcp จากพอร์ต 16012 ไปยังพอร์ต 17012 นี่คือการปรับใช้ทั่วไปโดยการทำพอร์ตจริงให้อยู่ภายนอก

ฉันไม่สามารถทำงานนี้ได้

ขั้นตอนที่ 2:

เมื่อใดก็ตามที่มีโค้ดใหม่ที่ต้องแพตช์ ฉันต้องการนำโค้ดใหม่มาแสดงบนพอร์ตสองชุดที่ต่างกันดังภาพด้านล่าง (P2 - กระบวนการที่ 2)

เมื่อกระบวนการที่ 2 เริ่มทำงาน ฉันจะเปลี่ยนการแมปที่อยู่ IP เป็นกระบวนการใหม่ (P2) หลังจากให้เวลา P1 เสร็จสิ้นการดำเนินการ IO ที่ค้างอยู่ เราจะนำกระบวนการ P1 ลงมา

สำหรับแพตช์ต่อไป เราจะนำเสนอ P1' และกระบวนการผกผัน

ป้อนคำอธิบายรูปภาพที่นี่

มีข้อบกพร่องในการออกแบบนี้หรือไม่? สิ่งนี้สามารถทำได้ในทางเทคนิคโดยใช้ iptables และ tproxy หรือเครื่องมือ linux อื่น ๆ หรือไม่

ฉันได้พิจารณาสร้างเราเตอร์ L7 และถ่ายทอดแพ็กเก็ตไปมาโดยกำหนดวัตถุระดับสูง แต่ฉันสงสัยว่าสามารถทำได้โดยใช้การกำหนดเส้นทางระดับต่ำ L3/L4 หรือไม่ เนื่องจากสามารถทดสอบประสิทธิภาพและการต่อสู้ได้ดีกว่า แน่นอนว่าเครื่องมือ nft, iptables เหล่านี้มีปัญหาด้านการใช้งานและใช้งานไม่ได้ง่ายนัก โดยเฉพาะ nft สำหรับนักพัฒนา

Score:1
ธง br

คุณสามารถทำได้ด้วย iptables หากต้องการสร้างการส่งต่อพอร์ตจาก 17X ถึง 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

จากนั้นเมื่อคุณต้องการเปลี่ยนพอร์ตที่พอร์ตนั้นชี้ไปหลังจากที่คุณเริ่มแอปเวอร์ชันอัปเดตแล้ว ให้ทำดังนี้

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

หากคุณอยู่ใน distro โดยใช้ไฟล์ iptables.service และคุณต้องการให้การเปลี่ยนแปลงเหล่านี้เป็นแบบถาวร คุณสามารถเพิ่มบรรทัด -A เข้าไปได้ /etc/sysconfig/iptables หรือที่ใดก็ตามที่ไฟล์ปรับแต่งของคุณตั้งอยู่ หากคุณใช้ distro ที่ใช้ a firewalld.service จากนั้นคุณสามารถบรรลุเป้าหมายเดียวกันและให้มันถาวรตลอดการรีบูตด้วยวิธีนี้:

บรรทัดแรกนี้จำเป็นเพียงครั้งเดียวในการเปิดใช้งานการปลอมตัวโดยทั่วไป

firewall-cmd --permanent --add-masquerade

จากนั้นเพื่อสร้างการส่งต่อเริ่มต้นของคุณ:

firewall-cmd --permanent --add-forward-port=port=16002:proto=udp:toport=17002
ไฟร์วอลล์ cmd --permanent --add-forward-port=port=16012:proto=tcp:toport=17012

เมื่อคุณต้องการเปลี่ยนแอปพลิเคชันเป็นการฟังพอร์ตอื่น ให้เรียกใช้:

firewall-cmd --permanent --remove-forward-port=port=16002:proto=udp:toport=17002
firewall-cmd --permanent --remove-forward-port=port=16012:proto=tcp:toport=17012
ไฟร์วอลล์ cmd --permanent --add-forward-port=port=16002:proto=udp:toport=18002
ไฟร์วอลล์ cmd --permanent --add-forward-port=port=16012:proto=tcp:toport=18012
fr flag
ขอบคุณ Bofa สำหรับคำตอบที่ชัดเจน ฉันจะพยายามอัปเดตการยอมรับในหนึ่งหรือสองวันเนื่องจากฉันยุ่งอยู่กับการทำงานกับรุ่นอื่น ๆ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา