Saya memiliki pengaturan server UDP (pada VM) di belakang penyeimbang beban jaringan Google Cloud. Server terikat 0.0.0.0
. Server UDP dapat menerima pesan yang dikirim ke penyeimbang, tetapi balasan tidak kembali ke klien. Tidak ada kesalahan yang dilaporkan, dan tcpdump
tidak menunjukkan apa pun yang tidak biasa. Saya telah memastikan bahwa semua aturan firewall mengizinkan lalu lintas ini, dan penyeimbang beban diatur untuk meneruskan semua port.
Saya bukan ahli jaringan, tetapi saya menduga ada sesuatu yang salah dengan server UDP karena alamat yang menerima pesan berbeda dengan yang digunakan untuk balasan ( sendto()
).
Saya menguji semua ini menggunakan socketserver
modul Python di perpustakaan standar sebagai server gema :
import SocketServer
class MyUDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print "{} wrote:".format(self.client_address[0])
print data
socket.sendto(data.upper(), self.client_address)
if __name__ == "__main__":
HOST, PORT = "0.0.0.0", 5029
server = SocketServer.UDPServer((HOST, PORT), MyUDPHandler)
server.serve_forever()
VM hanya memiliki satu antarmuka jaringan, dengan IP lokal 10.240.x.x
. Jika saya mengikat server UDPS ke IP lokal ini, maka pesan bahkan tidak diterima oleh server ini.
Tanpa penyeimbang beban, semuanya berfungsi normal, yaitu, pesan digema kembali dengan benar ke klien.
Pertanyaan: Apa yang harus saya lakukan agar server UDP saya membalas pesan?
EDIT: diskusi ini mungkin relevan.
sumber