ไม่สามารถเข้าถึงเซิร์ฟเวอร์รางบน VM จากโฮสต์


12

ฉันมีเซิร์ฟเวอร์รางบนเครื่องเสมือนและฉันจำเป็นต้องเข้าถึง localhost จากโฮสต์ ฉันได้ลองทั้ง NAT (โดยการส่งต่อพอร์ต - พอร์ต 80 และ 3000 บนฝั่งแขก) และอะแดปเตอร์บริดจ์ แต่ดูเหมือนว่าจะไม่มีอะไรทำงาน

ในทั้งสองกรณีฉันสามารถเข้าถึงพอร์ต 80 ได้ แต่ฉันล้มเหลวในการพยายามเชื่อมต่อ localhost บนพอร์ต 3000 (ดังนั้นจึงไม่มีปัญหาในการเข้าถึงเซิร์ฟเวอร์ xampp)

โปรดแจ้งให้เราทราบหากคุณมีความคิดว่าจะสามารถเข้าถึง localhost จากโฮสต์ในขณะที่เซิร์ฟเวอร์อยู่ข้างแขก

ฉันมี linux (debian) สำหรับแขกและ Windows 7 ทางฝั่งโฮสต์ - ฉันใช้ VirtualBox

คำตอบ:


10

ที่นี่มีส่วนประกอบแยกต่างหากอย่างน้อยสามชิ้นซึ่งแต่ละองค์ประกอบจำเป็นต้องกำหนดค่าอย่างถูกต้อง

ที่อยู่ผูกพันทางรถไฟ

เมื่อ Rails (หรือแอปพลิเคชันเซิร์ฟเวอร์อื่น) เปิดขึ้นเพื่อรับการเชื่อมต่อเครือข่ายมันจะผูกกับทั้ง IP และพอร์ต หากคำขอขาเข้าไม่ตรงกับทั้งสองข้อคำขอนั้นจะไม่ยอมรับการเชื่อมต่อ จากrails server --help:

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

ดังนั้นโดยค่าเริ่มต้น Rails จะยอมรับเฉพาะคำขอที่ส่งไปยังlocalhostอะแดปเตอร์เครือข่าย (loopback) (เรียกว่าlo) เนื่องจากอแด็ปเตอร์นี้สามารถเข้าถึงได้จากภายในคอมพิวเตอร์เครื่องเดียวกันเท่านั้นคำขอที่จะยอมรับจะมาจากภายใน Debian VM เอง: ดีและปลอดภัยสำหรับการทดสอบ แต่ไม่มีประโยชน์สำหรับการผลิตหรือแม้แต่การทดสอบจากคอมพิวเตอร์เครื่องอื่น

หากคุณต้องการให้ Rails ของคุณสามารถเข้าถึงได้จากคอมพิวเตอร์เครื่องอื่น (รวมถึงโฮสต์ Windows 7 ของคุณ) คุณจะต้องบอก Rails ให้ผูกกับที่อยู่ IP ใดก็ตาม Debian นั้นสามารถเข้าถึงได้จากภายนอก (ดูด้านล่าง)

แต่เป็นวิธีที่ง่ายคือการบอกทางรถไฟเชื่อมโยงกับที่อยู่ IP พิเศษ0.0.0.0ซึ่งหมายความว่าอะแดปเตอร์เครือข่ายใดดังนั้นการเริ่มต้นเซิร์ฟเวอร์ Rails ของคุณเช่น:

rails server -p 80 -b 0.0.0.0

จะทำให้ทุกคนในเว็บไซต์ของคุณสามารถเข้าถึง VM ของคุณบนเครือข่ายได้

นี่เป็นสิ่งที่ทำให้คุณสับสนแม้ว่าคุณจะมีอีกสององค์ประกอบที่ทำงานอยู่

ที่อยู่ IP ของ VM

คุณต้องชี้เบราว์เซอร์ของคุณไปที่เครื่องเสมือน Debian ซึ่งเป็นคอมพิวเตอร์แยกต่างหาก

กฎง่ายๆlocalhostก็คือมันมักจะอ้างถึงคอมพิวเตอร์เครื่องเดียวกัน อย่างไรก็ตามสำหรับจุดประสงค์ด้านเครือข่าย Debian VM ของคุณเป็นคอมพิวเตอร์แยกต่างหาก หากคุณใช้เว็บเบราว์เซอร์ในโฮสต์ Windows 7 ของคุณlocalhostจะอ้างถึง Windows 7 ของคุณเสมอและไม่มีอะไรอื่น

คุณมีสองตัวเลือกที่นี่:

  • ตั้งค่าอะแดปเตอร์ VirtualBox VM เป็นโหมด Bridge (ตามที่คุณกล่าวถึงในคำถามของคุณ) สิ่งนี้จะทำให้ Debian ของคุณโดยตรงบนเครือข่ายภายนอก / home / work เดียวกันกับโฮสต์ Windows 7 ของคุณ จากนั้นคุณสามารถตรวจสอบ IP Debian VM ifconfigของคุณโดยการทำงาน มองหา IP ของคุณeth0หรือeth<something>อะแดปเตอร์ เสียบสิ่งนี้ลงในแถบที่อยู่ของเบราว์เซอร์ของคุณ

  • ใช้อะแดปเตอร์ NAT และการส่งต่อพอร์ต VirtualBox IMO นี้มีความซับซ้อนมากขึ้น

ไฟร์วอลล์ Debian

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

หวังว่าจะช่วย :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.