案例:
當我們在一臺Centos7.3的系統上安裝Vagrant+Virtualbox,我們通過Vagrant啟動了一個ubuntu的虛擬機,并且我想做如下事情
1)從局域網的任何一臺機器上都可以登陸ubuntu虛擬機
2)從局域網任何一臺機器上通過訪問ubuntu虛擬機上提供的web服務等
解決辦法:我們可以在Centos7.3服務器上配置Forwarded Ports轉發端口,意思就是把
Centos7.3 端口 ubuntu16.04 端口
10.2.11.203 2100 10.0.2.15 22
10.2.11.203 80 10.0.2.15 80
當局域網的電腦需要遠程登錄到ubuntu16.04(10.0.2.15)的22端口時,我們只需要遠程連接Centos7.3(10.2.11.203)的2100端口即可。(因為做了端口映射)
那么其他的服務也類似。
注意: 由于vagrant啟動的時候,默認只能通過Centos7.3本機通過vagrant ssh登錄到虛擬機ubuntu(由于默認把127.0.0.1:2222映射到ubuntu16.04虛擬機的22端口),如果我們想從局域網其他機器上ssh到ubuntu虛擬機,就必須重新做端口映射,而且這個端口不能為2222,否則會報錯
二)配置參數
1)選項
guest (int) 虛擬機上的端口---------------必須(例如guest: 22)
guest(string) 虛擬機上的IP地址---------------如果沒有設置,則監聽虛擬機上所有IP地址(可選)
host (int) 物理機上的端口------------------必須(例如:host: 2100)
host_ip(string)物理機上的IP地址------------如果物理機有多個IP地址,我們需要綁定到那個IP,在這里指定(可選)
protocol(string) 協議如tcp,upd---------可選
2)
auto_correct: true (意思:當一個物理機上運行多個虛擬機的時候,難免映射端口的時候,出現碰撞,導致虛擬機起不來。我們這種這個參數,如果發生碰撞,端口會隨機調整)
案例:
Vagrant.configure("2") do |config|
config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "tcp"
config.vm.network "forwarded_port", guest: 2003, host: 12003, protocol: "udp"
end
(把物理機上tcp 12003映射到虛擬機的tcp 2003端口,把物理機上的udp12003映射到虛擬機的udp2003端口)
三)實際操作
1) 配置Vagrantfile文件
[root@vagrant ubuntu]# vim Vagrantfile
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
config.vm.network :"forwarded_port", guest: 80, host: 8060,host_ip: "10.2.11.203"
config.vm.network :"forwarded_port", guest: 22, host: 2100, host_ip: "10.2.11.203"
(配置2個端口映射,把物理機的8080映射到虛擬機80,物理機的2100映射到虛擬機的22)
2)啟動虛擬機
~~~
[root@vagrant ubuntu]# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu16.04_louis'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: ubuntu_default_1517298331069_68029
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 80 (guest) => 8060 (host) (adapter 1)
default: 22 (guest) => 2100 (host) (adapter 1)
default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant ( 登錄vagrant虛擬機的用戶,這里不同的box用戶不一樣,我這里是vagrant)
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
default: The guest additions on this VM do not match the installed version of
default: VirtualBox! In most cases this is fine, but in rare cases it can
default: prevent things such as shared folders from working properly. If you see
default: shared folder errors, please make sure the guest additions within the
default: virtual machine match the version of VirtualBox you have installed on
default: your host and reload your VM.
default:
default: Guest Additions Version: 5.0.40
default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
default: /vagrant => /vagrant/ubuntu
~~~
虛擬機啟動后,我們查看,在/vagrant/ubuntu目錄下,會生成一個.vagrant的目錄,我們查看
[root@vagrant ubuntu]# tree -a
.
├── ubuntu-xenial-16.04-cloudimg-console.log
├── .vagrant
│?? └── machines
│?? └── default
│?? └── virtualbox
│?? ├── action_provision
│?? ├── action_set_name
│?? ├── creator_uid
│?? ├── id
│?? ├── index_uuid
│?? ├── private_key---------虛擬機的私鑰
│?? └── synced_folders
└── Vagrantfile
意思就是,如果我們想從其他電腦上登錄ubuntu虛擬機,就必須把這個私鑰拷貝過去哦,否則不能登錄
3)配置xshell遠程登錄到ubuntu16.04虛擬機



(表示我們可以從其他機器上,通過xshell連接到ubuntu16.04虛擬機)
4)如果在ubuntu16.04的虛擬機上安裝nginx,然后測試訪問
vagrant@ubuntu-xenial:~$ sudo apt-get -y install nginx
vagrant@ubuntu-xenial:~$ ss -tunlp|grep 80
tcp LISTEN 0 128 *:80 *:*
tcp LISTEN 0 128 :::80 :::*
然后測試訪問

- 第一章:Vagrant基礎介紹
- 第二章:Vagrant的安裝部署
- 第一節:在centos7.3的系統上安裝部署vagrant
- 第二節:在windows server 2008 R2的系統上安裝部署vagrant
- 第三章:vagrant常見命令
- 第一節:box
- 第二節:虛擬機相關的命令
- 第四章:vagrant管理虛擬機
- 第一節:初始化centos6的系統
- 第二節:初始化ubuntu16.04的系統
- 第三節:打包自己的box
- 第五章:Vagrant之網絡配置
- 第一節:通過Forwarded Ports(轉發端口)
- 第二節:Private Networks(私有網絡)
- 第三節:Public Networks(公有網絡)
- 第六章:常見錯誤
- 第七章:Vagrant之文件同步方式
- 第一節:synced_folder(把物理機的目錄同步到虛擬機里某個目錄)
- 第二節:通過NFS共享
- 第三節:通過rsync共享
- 第八章:Vagrantfile配置文件