Saya sedang mengerjakan arsitektur layanan web. Saya punya beberapa perangkat lunak yang saya butuhkan untuk dijalankan di mesin host asli, bukan di Vagrant. Tapi saya ingin menjalankan beberapa layanan klien pada tamu.
config.vm.forwarded_port
Parameter Vagrant akan membuka port pada host dan mengirim data ke tamu. Tapi bagaimana saya bisa membuka port pada tamu dan mengirim data ke host? (Ini masih port forwarding, tetapi dalam arah sebaliknya.)
vagrant
portforwarding
Dan Fabulich
sumber
sumber
Jawaban:
Saat Anda menjalankan
vagrant ssh
, itu sebenarnya menggunakan perintah yang mendasari ini:ssh -p 2222 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
SSH mendukung port penerusan ke arah yang Anda inginkan dengan
-R guestport:host:hostport
opsi. Jadi, jika Anda ingin terhubung ke port12345
pada tamu dan diteruskan kelocalhost:80
, Anda akan menggunakan perintah ini:ssh -p 2222 -R 12345:localhost:80 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR -o IdentitiesOnly=yes -i ~/.vagrant.d/insecure_private_key [email protected]
Saat Eero berkomentar dengan benar, Anda juga dapat menggunakan perintah tersebut
vagrant ssh -- -R 12345:localhost:80
, yang memiliki efek yang sama dalam perintah yang jauh lebih ringkas.sumber
vagrant ssh -- -R 12345:localhost:80
Ini mengikuti sintaks opsi ssh -R [bind_address:] port: host: hostport , di mana nomor pertama adalah nomor port untuk didengarkan di dalam mesin tamu, dan dua yang terakhir adalah alamat layanan seperti yang terlihat dari mesin host.vagrant ssh-config | ssh -F /dev/stdin $BOX -R $PORT_VM:localhost:$PORT -N
Di dalam buku
Vagrant: Up and Running
(Pub.Tanggal: 12 Juni 2013), yang ditulis oleh pencipta Vagrant, dia menyebutkan bahwa tidak mungkin mesin tamu mengakses layanan yang berjalan di mesin host.Alih-alih menggunakan
Forwarded Ports
, Anda dapat menyiapkan jaringan pribadi menggunakanHost-Only Networks
.Kelebihan menggunakan
Host-Only Networks
lebihForwarded Ports
Mesin tamu dapat mengakses layanan yang berjalan di mesin host
Fitur ini akan menyelesaikan masalah Anda.
Mesin tamu dapat mengakses layanan yang berjalan di mesin tamu lain
Fitur ini sangat berguna untuk memisahkan layanan ke beberapa mesin agar lebih akurat meniru lingkungan produksi.
Aman
Mesin luar tidak memiliki cara untuk mengakses layanan yang berjalan di mesin tamu
Lebih sedikit pekerjaan
Tidak perlu mengonfigurasi setiap
Forwarded Port
Cara mengonfigurasi
Host-Only Networks
config.vm.network :"hostonly", "192.168.0.0"
# Versi Gelandangan # 1config.vm.network :private_network, ip: "192.168.0.0"
# Versi Gelandangan # 2Memiliki baris ini di Anda
Vagrantfile
akan menginstruksikan gelandangan untuk membuat jaringan pribadi yang memiliki alamat IP statis:192.168.0.0
Alamat IP dari sebuah host selalu merupakan alamat IP yang sama tetapi dengan oktet terakhir sebagai 1. Dalam contoh sebelumnya, mesin host akan memiliki alamat IP
192.168.0.1
.sumber
Vagrant: Up and Running
), Anda dapat mengatur jaringan yang terhubung. Di jaringan yang terhubung, mesin lain di jaringan lokal Anda dapat mengakses mesin virtual Anda, dan sebaliknya. Tetapi karena alamat IP ditetapkan melalui DHCP, Anda harus beradaifconfig
di mesin virtual untuk menemukan alamat IP-nya.192.168.0.0
tidak berfungsi - menggulung / ping mesin host mengakibatkan koneksi t / o. Menggunakan alamat @ Nucleon (konsisten dengan dokumen Vagrant tentang topik) berfungsi seperti yang diiklankan.config.vm.network :private_network, ip: "192.168.0.0"
dan melakukan curling / ping ke host192.168.0.1
menyebabkan waktu koneksi habis. Konfigurasi jaringan untuk192.168.50.4
diselesaikan yaitu host yang tersedia di192.168.50.1
.Anda dapat mengakses port pada mesin host melalui gateway default di dalam OS tamu. (Yang biasanya memiliki IP
10.0.2.2
.)Misalnya, jika Anda memiliki server web yang berjalan pada port 8000 di mesin host Anda ...
Anda dapat mengaksesnya dari dalam VM Vagrant di
10.0.2.2:8000
(asalkan10.0.2.2
ip gateway default tamu):Untuk menemukan IP gateway default di dalam OS tamu, jalankan
netstat -rn
(atauipconfig
pada tamu Windows) dan cari baris dengan IP tujuan0.0.0.0
(atau bidang berlabel "Gateway Default" di Windows):Anda dapat mengekstrak IP ini secara terprogram dengan
netstat -rn | grep "^0.0.0.0 " | tr -s ' ' | cut -d " " -f2
.Sumber: Cara terhubung dengan host PostgreSQL dari mesin virtualbox gelandangan ; Terhubung ke mesin host dari OS guest VirtualBox?
sumber
ifconfig
danip address
tidak mendapatkan apa yang saya butuhkan, tetapinetstat -rn
melakukannya.Tambahkan yang berikut ke Anda
~/.ssh/config
di mesin host:Ini memungkinkan Anda mengakses layanan pada mesin host port 52698 dari Vagrant, selama Anda masuk melalui
vagrant ssh
.Anda dapat mengonfirmasi bahwa ini berfungsi dengan menjalankan
netstat -lt
vagrant VM dan mencatat di baris berikut:sumber
Saya dapat mengakses layanan yang berjalan di mesin host saya melalui alamat IP lokalnya (bukan alamat loopbacknya). Saya menguji dengan membuat server http pada port 80 (dan kemudian pada port 987) dan pada
curl
197.45.0.10:80 dan 197.45.0.10:987 (alamat ip sebenarnya diubah untuk melindungi yang tidak bersalah). Ini bekerja dua kali, dan saya tidak memiliki konfigurasi gelandangan khusus (tidak ada public_network, tidak ada forwarded_port) dan sementara saya memiliki beberapa port yang diteruskan melalui PuTTY, saya tidak memiliki port 80 dan 987 yang diteruskan. Jadi mungkin coba gunakan alamat IP lokal atau publik mesin host.Dan jika Anda ingin mengakses (ssh ke) satu instance gelandangan tamu dari yang lain, Anda dapat mengaktifkan
public_network
serta meneruskan dari port 22 dengan caraVagrantfile
seperti ini:Kemudian selama port tersebut terbuka (yaitu melakukan beberapa penerusan port di konfigurasi router Anda), Anda dapat mengakses mesin itu dari mana saja, bahkan dari dunia luar.
sumber