Vagrant用にポート転送を設定しています
Vagrant.configure("2") do |config|
config.vm.box = "centOS"
config.vm.network :forwarded_port, guest: 80, Host: 80
config.vm.network :forwarded_port, guest: 8443, Host: 8443
config.vm.network :forwarded_port, guest: 8443, Host: 9443
config.vm.network :forwarded_port, guest: 8445, Host: 8445
config.vm.network :forwarded_port, guest: 8000, Host: 8000
config.vm.hostname = "www.vagrant.com"
end
ポート80は私のvagrant virtual boxから開いています
[vagrant@www ~]$ nmap -sT 0.0.0.0 -p 80
Starting Nmap 5.51 ( http://nmap.org ) at 2013-07-02 22:25 UTC
Nmap scan report for 0.0.0.0
Host is up (0.000063s latency).
PORT STATE SERVICE
80/tcp open http
しかし、それは私のホストマシンから閉じられています
Ben-Fischer:~ bfischer$ nmap -sT 0.0.0.0 -p 80
Starting Nmap 6.25 ( http://nmap.org ) at 2013-07-02 17:38 CDT
Nmap scan report for 0.0.0.0
Host is up (0.000086s latency).
PORT STATE SERVICE
80/tcp closed http
ホストマシンのポート80で他の何もリッスンしていません
Ben-Fischer:~ bfischer$ Sudo lsof -n -i4TCP:80 | grep LISTEN
[no output]
Iptablesがオフになっていて、Macファイアウォールもオフになっている
[vagrant@www ~]$ Sudo service iptables stop
その他の転送ポートはすべて正常に機能します(8443,9443,8445,8000)
ボックスは、シェフと一緒に浮浪者、centOS 6.3からの画像です。
では、ローカルマシンからポート80に接続できないのはなぜですか。
VirtualBoxがホスト上でroot
として実行されていない限り、1024未満のホストポートに転送できないと思います。
VirtualBox Manual はこれについてNATモードの制限:
転送ホストポート<1024不可能:
Unixベースのホスト(Linux、Solaris、Mac OS Xなど)では、rootで実行されていないアプリケーションから1024未満のポートにバインドすることはできません。その結果、このようなポート転送を構成しようとすると、VMは起動を拒否します。
これらの制限は通常、標準的なネットワークの使用には影響しません。ただし、NAT=の存在は、通常は機能するプロトコルに干渉する可能性がある微妙な影響を及ぼします。1つの例はNFSで、サーバーは非特権ポート(つまり、1024未満のポート)からの接続を拒否するように設定されていることがよくあります。 )。
テリーの答えは問題を正しく診断しました。これが私の解決策です:
RootとしてVirtualBoxを実行する代わりに、ポート転送を2回行います。ホスト:8080をゲスト:80に転送するようにvagrantを設定します。80がホストマシン上の8080になるように、ホストマシン上のいくつかのポート転送ルール(ipfwユーティリティを使用)と組み合わせます。次に、8080がゲストマシンの80に返送されます。
入り組んでいるようですが、この記事では設定をより明確に説明しています http://www.dmuth.org/node/1404/web-development-port-80-and-443-vagrant
私のマシン(Arch Linux)にインストールしていないipfwを使用する代わりに、SSHを使用できます。
ゲストのポート80でWebサーバーを実行している場合は、SSHを使用してバックグラウンドでポート転送を実行できます。
Sudo ssh -p 2222 -gNfL 80:localhost:80 vagrant@localhost -i ~/.vagrant.d/insecure_private_key
UPDATE:
ipfw
はOS X Mavericksで非推奨になりました。代わりにpfctl
を使用する必要があります。これを達成する方法について詳しく説明した記事をここに書きました:
http://salvatore.garbesi.com/vagrant-port-forwarding-on-mac/
Mac OS Xのターミナル経由:
Sudo ipfw add any 100 fwd 127.0.0.1,8080 tcp from any to me 80 in
これにより、127.0.0.1:80上のすべての着信トラフィックが127.0.0.1:8080にリダイレクトされます
Localhostを使用する代わりに、ブリッジアダプタを使用して、ローカルIPアドレスをポイントすることができます。これはホスト(使用中のローカルIPアドレスなど)によって異なる可能性があるため、すべてを外部config.yml
ファイルに入れます。
# ...
require 'yaml'
current_dir = File.dirname(File.expand_path(__FILE__))
configs = YAML.load_file("#{current_dir}/config.yml")
vagrant_config = configs['config'][configs['config']['use']]
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# http://docs.vagrantup.com/v2/virtualbox/networking.html
config.vm.network vagrant_config['vm']['network_type'],
ip: vagrant_config['vm']['network_ip'],
bridge: vagrant_config['vm']['network_bridge'],
virtualbox__intnet: vagrant_config['vm']['network_intnet']
config.vm.network "forwarded_port",
guest: 80,
Host: vagrant_config['http_server']['Host_port']
# ...
Config.ymlファイルに従います:
config:
use: "public"
private: # this is the old configuration that doesn't let you forward on port 80
vb:
cpus: 2
memory: 4096
vm:
network_type: "private_network"
network_ip: "192.168.33.10"
network_intnet: true
network_bridge: ""
synced_folder: "/home/francesco/whatever/vagrant-synced-folder"
http_server:
Host_port: 8080
public: # here follows the new bridged configuration that let you use port 80!
vb:
cpus: 2
memory: 4096
vm:
network_type: "public_network"
network_ip: "192.168.1.123"
network_intnet: false
network_bridge: "eth0" # or whatever is your adapter name!
synced_folder: "/home/francesco/whatever/vagrant-synced-folder"
http_server:
Host_port: 80
次にhttp://192.168.1.123:80/
にアクセスします:-)
@sgarbesiの応答に加えて、OS X Mavericksの時点でipfwは実際に廃止されました。残念ながら、リンクが壊れているように見えたため、彼が投稿したソリューションにアクセスできませんでした。
彼はここで説明されているソリューションで信用されています: https://www.danpurdy.co.uk/web-development/osx-yosemite-port-forwarding-for-vagrant/
私は完全性のためにここにソリューションを貼り付けています、それが誰かを助けることを望んでいます:
Vagrantドキュメント に従って、次をVagrantfileに追加します。
config.vm.network "forwarded_port", guest: 80, Host: 8080 config.vm.network "forwarded_port", guest: 443, Host: 4443
Vagrant-triggersをインストールするには、ターミナルウィンドウでVagrantfileが保存されているフォルダーに移動し、次のコマンドを実行する必要があります。
vagrant plugin install vagrant-triggers
以下をVagrantfileに追加します。
config.trigger.after [:provision, :up, :reload] do
system('echo "
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 80 -> 127.0.0.1 port 8080
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port 443 -> 127.0.0.1 port 4443
" | Sudo pfctl -ef - > /dev/null 2>&1; echo "==> Fowarding Ports: 80 -> 8080, 443 -> 4443 & Enabling pf"')
end
config.trigger.after [:halt, :destroy] do
system("Sudo pfctl -df /etc/pf.conf > /dev/null 2>&1; echo '==> Removing Port Forwarding & Disabling pf'")
end
これにより、Vagrant Provisionでポート80と443がそれぞれポート8080と4443にバインドされ、アップとリロードが行われ、停止または破棄時にポートが削除されます。 OSXではデフォルトでpfが有効になっていないため、pfを有効にするルールを追加するときに-eフラグを渡し、ポート転送を削除するときに再び無効にする-dフラグを渡します。
VirtualBoxへのポート転送を構成できます。
あなたのVM->設定->ネットワーク->詳細->ポート転送
ここで、必要なポートを追加できます。