Score:0

จะเข้าถึง Jetty Server จากภายนอก LAN ได้อย่างไร

ธง es

เดิมทีฉันโพสต์คำถามนี้บน stackoveflow แต่ได้รับคำแนะนำว่าคำถามนี้จะเหมาะกับไซต์นี้มากกว่า

ฉันพยายามเข้าถึง Jetty Server ที่ปรับใช้บนเครื่องหนึ่งจากอีกเครื่องหนึ่งนอก LAN แต่ใช้งานไม่ได้ ฉันได้อ่าน หัวข้อนี้ และปฏิบัติตามคำแนะนำของ @โยอาคิม เอิร์ดเฟลต์ อย่างไรก็ตามมันไม่ได้ผล รหัสของฉันอยู่ด้านล่าง:

เซิร์ฟเวอร์ เซิร์ฟเวอร์ = เซิร์ฟเวอร์ใหม่ ();
    

    
// ตัวเชื่อมต่อ HTTP
ServerConnector serverConnector = ใหม่ ServerConnector (เซิร์ฟเวอร์ 1, 1);
serverConnector.setHost("0.0.0.0"); <-
serverConnector.setPort(8080);
serverConnector.setIdleTimeout(30000);
    
    
 
 // ตั้งค่าตัวเชื่อมต่อ
 server.addConnector(ตัวเชื่อมเซิร์ฟเวอร์);

ฉันพยายามเข้าถึงเซิร์ฟเวอร์จากเซิร์ฟเวอร์ระยะไกลอื่นด้วยรหัสต่อไปนี้:

สตริง postUrl = "http://" + myIP + ":8080"; // myIP ถูกตั้งค่าเป็นที่อยู่ IP สาธารณะของ Jetty Server

System.out.println("โพสต์ URL: " + postUrl);

RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(120 * 1000).build();



ลอง (CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();) {

HttpPost httpPostRequest = HttpPost ใหม่ (postUrl);

...

อย่างไรก็ตาม สิ่งนี้ทำให้เกิดข้อยกเว้นต่อไปนี้:

HttpPostConnectException: เชื่อมต่อกับ 123.4.56.78:8080.. ล้มเหลว: การเชื่อมต่อถูกปฏิเสธ: เชื่อมต่อ

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

ขอบคุณ

Martin avatar
kz flag
โปรดบอกเราเกี่ยวกับโครงสร้างพื้นฐานเครือข่ายเซิร์ฟเวอร์ของคุณเซิร์ฟเวอร์ท่าเทียบเรือของคุณอยู่ในความครอบครองของ IP สาธารณะที่คุณใช้โดยตรง หรือมีเราเตอร์อยู่ระหว่างกลางหรือไม่ ข้อผิดพลาด "การเชื่อมต่อถูกปฏิเสธ" หมายความว่าในกรณีส่วนใหญ่ ไม่มีบริการที่รับฟังพอร์ตเฉพาะที่คุณกำลังระบุ (8080 ในกรณีนี้)
Bradford Griggs avatar
es flag
@Martin "เซิร์ฟเวอร์" เป็นเพียงเครื่อง Windows สองเครื่องที่ทำงานบนเครือข่ายในบ้านของฉัน ตอนนี้ทั้งคู่กำลังใช้การเชื่อมต่ออินเทอร์เน็ตเดียวกัน (เชื่อมต่อกับเราเตอร์เดียวกัน) แต่เมื่อฉันสามารถเชื่อมต่อภายในเครื่องได้ ฉันวางแผนที่จะเชื่อมต่อกับเครื่องภายในจากเซิร์ฟเวอร์ระยะไกล อย่างไรก็ตาม ฉันไม่สามารถเชื่อมต่อได้เมื่อทั้งสองเครื่องอยู่หลังที่อยู่ IP เดียวกัน (โดยใช้การเชื่อมต่ออินเทอร์เน็ต/เราเตอร์เดียวกัน) ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณหมายถึงโดย 'เซิร์ฟเวอร์ท่าเทียบเรือของคุณอยู่ในความครอบครองของ IP สาธารณะที่คุณใช้โดยตรงหรือไม่' ฉันเชื่อว่าเป็นเพราะฉันเพียงแค่เชื่อมต่ออินเทอร์เน็ตโดยใช้ WiFi ที่บ้านของฉัน..
Martin avatar
kz flag
สิ่งที่ฉันหมายถึง "ครอบครอง": ถ้าฉันจะลองเปิดการเชื่อมต่อกับ IP สาธารณะของคุณ ฉันจะสิ้นสุดที่เราเตอร์ที่บ้านของคุณ หากคุณต้องการให้การเชื่อมต่อนั้นสิ้นสุดที่เซิร์ฟเวอร์ jetty คุณจะต้องติดตั้งพอร์ตที่ส่งต่อจากเราเตอร์ที่บ้านไปยังเครื่อง windows ในเครือข่ายส่วนตัวของคุณ แต่ฉันขอแนะนำให้คุณลองเชื่อมต่อภายในเครื่องก่อน - คุณใช้ IP ที่ถูกต้องหรือไม่ ค้นหา IP ของเครื่อง windows ของคุณที่ใช้งานเซิร์ฟเวอร์ (เช่น ```ipconfig /all```) และตรวจสอบว่าคุณกำลังเชื่อมต่อโดยใช้ ip ที่ถูกต้อง
Bradford Griggs avatar
es flag
@มาร์ติน ว้าว! คุณเก่งมาก! ฉัน `ipconfig /all` และคว้าที่อยู่ IP จาก: `ที่อยู่ IPv4 . . . . . . . . . . : 188.XXX.XX.XXX(ที่ต้องการ)` และใช้งานได้! จนถึงตอนนี้ ฉันกำลังเชื่อมต่อโดยใช้ **IP สาธารณะ** ซึ่งฉันได้รับจาก Google หลังจาก Google _ที่อยู่ IP ของฉันคืออะไร_ ฉันเดาว่านี่เป็น IP ผิดที่จะใช้? ตอนนี้ฉันต้องการเชื่อมต่อจากเซิร์ฟเวอร์ระยะไกลไปยังเครื่องภายในของฉัน (แทนที่จะเชื่อมต่อจากสองเครื่องที่ทำงานบนเครือข่ายเดียวกัน) ฉันควรใช้ IP ที่แสดงใน Power Shell หรือที่แสดงบน Google โดยทั่วไป เหตุใดจึงมีการแสดง IP ที่แตกต่างกันสองรายการ ขอบคุณมาก!
Score:0
ธง kz

ฉันจะย้ายคำแนะนำของฉันไปเป็นคำตอบ คุณไม่มีความรู้พื้นฐานด้านเครือข่าย โปรดลองอ่านเพิ่มเติมเล็กน้อย (ที่นี่ ตัวอย่างเช่น). พื้นฐานบางอย่าง:

  • IP ภายในเครื่อง (เครือข่าย 192.168.x.x, 10.x.x.x ฯลฯ) ไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต เฉพาะอุปกรณ์ที่เชื่อมต่อโดยตรงกับผู้ให้บริการอินเทอร์เน็ตของคุณ (เราเตอร์ที่บ้านของคุณ) เท่านั้นที่สามารถเข้าถึงได้โดยตรงจากอินเทอร์เน็ต
  • เมื่อคุณเชื่อมต่อกับเราเตอร์ที่บ้านและท่องอินเทอร์เน็ต มีหลายสิ่งเกิดขึ้น: เนื่องจาก IP ในเครื่องของคุณไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต เราเตอร์ที่บ้านของคุณจะซ่อน IP ในเครื่องของคุณและแทนที่ด้วย IP สาธารณะของคุณ หลังจากทำเช่นนี้ เราเตอร์จะบันทึกการเชื่อมต่อเพื่อให้สามารถจัดการการตอบกลับได้ เมื่อได้รับการตอบกลับ กระบวนการเดียวกันจะถูกย้อนกลับ: หากเราเตอร์พบการเชื่อมต่อที่ตรงกันภายในตารางสำหรับแพ็คเก็ตขาเข้า IP สาธารณะจะถูกแทนที่ด้วย IP ส่วนตัวของคุณ และการตอบกลับจะถูกส่งต่อไปยังอุปกรณ์ที่ถูกต้องภายในเครือข่ายของคุณ กระบวนการนี้เรียกว่า แนท (การแปลที่อยู่เครือข่าย)
  • NAT คือการป้องกันอุปกรณ์ของคุณภายในเครือข่ายในบ้านของคุณ (อุปกรณ์ของคุณสามารถเข้าถึงอินเทอร์เน็ตได้ แต่อินเทอร์เน็ตไม่สามารถเข้าถึงอุปกรณ์ของคุณได้!) - แต่ก็ทำให้เป็นเรื่องยากเช่นกันหากคุณต้องการให้อุปกรณ์จากเครือข่ายในบ้านของคุณสามารถเข้าถึงได้ จากอินเทอร์เน็ต นี่เป็นเพราะเราเตอร์ของคุณต้องรู้ทุกแพ็กเก็ตข้อมูลที่เข้ามาว่าจะทำอย่างไรกับมัน และค่าเริ่มต้นคือ: หากไม่มีอุปกรณ์ใดในเครือข่ายในบ้านของคุณเปิดการเชื่อมต่อนั้น แพ็กเก็ตข้อมูลขาเข้าจะถูกทิ้ง!

ตอนนี้น่าจะชัดเจนแล้วว่าทำไมคุณถึงมีหลาย IP: Google สามารถดูได้เฉพาะ IP สาธารณะของคุณเท่านั้น เพื่อให้เซิร์ฟเวอร์ท่าเทียบเรือของคุณสามารถเข้าถึงได้จากอินเทอร์เน็ต คุณต้องมี การส่งต่อพอร์ต. โดยพื้นฐานแล้ว คุณจะสร้างกฎภายในเราเตอร์ที่บ้านของคุณ "ส่งต่อทุกแพ็กเก็ต TCP ที่คุณได้รับบนพอร์ต 8080 ไปยังอุปกรณ์ภายใน XY" คุณจะต้องตรวจสอบคู่มือเราเตอร์ของคุณเกี่ยวกับวิธีการทำเช่นนี้ เราเตอร์ส่วนใหญ่มีส่วนต่อประสานทางเว็บสำหรับการกำหนดค่า ฉันหวังว่านี่จะช่วยขจัดความสับสนของคุณ...

Bradford Griggs avatar
es flag
ขอบคุณสำหรับการตอบกลับของคุณ. ฉันจะลองส่งต่อพอร์ตและยอมรับคำตอบในภายหลัง แค่สงสัย การเปิดพอร์ตสำหรับ Jetty Server ทำให้ฉันมีความเสี่ยงด้านความปลอดภัยหรือไม่? หมายความว่า เป็นไปได้ไหมที่ผู้โจมตีจะบุกรุกเครือข่ายของฉันด้วยพอร์ตเปิด หรือเนื่องจากส่วนใหญ่เปิดเฉพาะกับ Jetty Server เขาจึงจะสามารถเข้าถึงฟังก์ชันการทำงานของเซิร์ฟเวอร์ได้ แต่ไม่มีอะไรเพิ่มเติม ขอบคุณ.
Martin avatar
kz flag
การเปิดพอร์ตเครือข่ายไปยังอินเทอร์เน็ตนั้นมีความเสี่ยงด้านความปลอดภัย *เสมอ* ซอฟต์แวร์ทุกตัวมีบั๊ก และถ้าเซิร์ฟเวอร์ท่าเทียบเรือของคุณมีบ้าง ผู้โจมตีอาจแยกออกจากซอฟต์แวร์และเข้ายึดครองเครื่อง windows ของคุณ คุณอาจพิจารณาเปิดพอร์ตไปยังอินเทอร์เน็ตเมื่อจำเป็นเท่านั้น และใช้พอร์ตที่ไม่ได้มาตรฐานเพื่อจุดประสงค์นั้น... สิ่งนี้ไม่ได้ทำให้เซิร์ฟเวอร์ของคุณปลอดภัยมากขึ้น แต่มีโอกาสน้อยที่จะถูกค้นพบ

โพสต์คำตอบ

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