Tidak dapat mengakses server rel pada VM dari host

12

Saya memiliki server rails pada mesin virtual dan saya perlu mengakses localhost dari host. Saya sudah mencoba keduanya NAT (dengan port forwarding - port 80 dan 3000 di sisi tamu) dan bridged adapter tetapi sepertinya tidak ada yang berhasil.

Dalam kedua kasus saya dapat mengakses port 80 tapi saya gagal mencoba terhubung ke localhost pada port 3000 (jadi tidak ada masalah dalam mengakses server xampp).

Tolong beritahu saya jika Anda tahu bagaimana seseorang dapat mengakses localhost dari host saat server ada di sisi tamu.

Saya memiliki linux (debian) di guest dan Windows 7 di sisi host - Saya menggunakan VirtualBox.

Hubert Siwkin
sumber

Jawaban:

10

Setidaknya ada tiga komponen terpisah yang dimainkan di sini, yang masing-masing perlu dikonfigurasikan dengan benar.

Alamat pengikat rel

Ketika Rails (atau aplikasi server lain) terbuka untuk menerima koneksi jaringan, itu akan mengikat IP dan port. Jika permintaan yang masuk tidak cocok dengan keduanya, itu tidak akan menerima koneksi. Dari 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
...

Jadi secara default, Rails hanya akan menerima permintaan yang dikirim ke localhostadapter jaringan (loopback) (disebut lo). Karena adaptor ini hanya dapat diakses dari dalam komputer yang sama, satu-satunya permintaan yang akan diterima akan berasal dari dalam Debian VM itu sendiri: baik dan aman untuk pengujian, tetapi tidak berguna untuk produksi, atau bahkan pengujian dari komputer yang berbeda.

Jika Anda ingin Rails Anda dapat diakses dari komputer lain (termasuk host Windows 7 Anda), Anda harus memberi tahu Rails untuk mengikat ke alamat IP mana pun yang dimiliki Debian yang dapat diakses dari luar (lihat di bawah).

Namun, cara yang lebih mudah adalah memberi tahu Rails untuk mengikat ke alamat IP khusus 0.0.0.0, yang berarti adaptor jaringan apa pun . Jadi, mulai server Rails Anda seperti ini:

rails server -p 80 -b 0.0.0.0

akan membuat situs web Anda dapat diakses oleh siapa saja yang dapat melihat VM Anda di jaringan.

Ini mungkin apa yang masih mengacaukan Anda bahkan jika Anda memiliki dua komponen lainnya yang berfungsi.

Alamat IP VM

Anda perlu mengarahkan browser Anda ke mesin virtual Debian, yang merupakan komputer tersendiri.

Aturan praktisnya localhostadalah selalu merujuk ke komputer yang sama. Namun, untuk keperluan jaringan, Debian VM Anda adalah komputer terpisah. Jika Anda menggunakan browser web di host Windows 7 Anda, localhostakan selalu merujuk ke Windows 7 Anda dan tidak ada yang lain.

Anda memiliki dua opsi di sini:

  • Atur adaptor VirtualBox VM ke mode Bridge (seperti yang Anda sebutkan dalam pertanyaan Anda). Ini akan menempatkan Debian Anda secara langsung di jaringan luar / rumah / kerja yang sama dengan host Windows 7 Anda. Anda kemudian dapat menentukan IP Debian VM Anda dengan menjalankan ifconfig. Cari IP eth0atau eth<something>adaptor Anda. Masukkan ini ke bilah alamat browser Anda.

  • Gunakan adaptor NAT dan penerusan port VirtualBox . IMO ini lebih rumit.

Firewall debian

Sudah lama sejak saya bekerja di Debian jadi saya tidak tahu apa default saat ini, tetapi jika dua hal di atas tidak bekerja maka ini mungkin layak untuk dilihat. Jika Debian menjalankan firewall, Anda harus membuka port yang ingin Anda akses dari komputer lain.

Semoga ini membantu :)

Samuel Jaeschke
sumber