vagrant折腾记,ssh无法登陆?虚拟机添加独立ip无法ping通?

2017-03-09 10:14:33   Linux

  vagrant   ip   网卡冲突  

vagrant折腾记,ssh无法登陆?虚拟机添加独立ip无法ping通?

1.安装 virtualBOX (最好选择默认路径 不然带中文名称的路径 回异常)

2.安装 vagrant (同上)

3.加包:vagrant box list//查看当前添加的vagrant镜像

4.如果没有的话, 添加vargrant 镜像
初始化

  1. vargrant box add 系统名称 box镜像
  2. mkdir box
  3. cd box
  4. //初始化
  5. vagrant init 系统名
  6. //启动
  7. vagrant up

如果碰到报错:”Warning: Authentication failure. Retrying… “

原因:ssh公钥密钥不匹配,修改 Vagrantfile ,添加

config.ssh.insert_key = false
然后浏览器打开 https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant 复制所有字符串到 $VAGRANT_HOME/insecure_private_key 里面原来的内容都删掉,其中 $VAGRANT_HOME 是环境变量,默认安装的话就改成 ~/.vagrant.d/insecure_private_key 。

这样以后再执行 vagrant reload 或者 vagrant ssh 应该就可以登陆进虚拟机了。

添加独立ip

首先,修改 Vagrantfile ,找到这行

  1. config.vm.network "public_network"

修改为

  1. config.vm.network "public_network", ip: "xxx.xxx.xxx.xxx", :bridge => "em1"

说明:xxx.xxx.xxx.xxx 是ip地址,根据自己情况替换, :bridge 是桥接网卡名称,你可以根据 ip addr 命令结果找到,一般就是宿主机ip对应的那个网卡。

保存Vagrantfile, 执行 vagrant reload ,进虚拟机可以通过 ip addr 查看ip是否已经绑定。

测试ip是否有效,先从 宿主机 ping xxx.xxx.xxx.xxx ,如果能ping通 说明有效。

再从 外部网络,比如我自己电脑,只要跟服务器不在一个局域网内,再ping 一下,发现ping不通,何解?

原因是 vagrant 会创建一个默认网卡 eth0 ,绑定的是内网地址 10.0.xx.xx ,默认网关也是通过 10.0.xx.xx 这种内网地址,导致外部请求无法进来。

解决办法: 首先,在宿主机上执行 ip route ,可以看到第一行有一个

  1. default via xxx.xxx.xxx.xxx dev em1

这个 xxx.xxx.xxx.xxx 就是公网网关地址,复制它。

修改 Vagrantfile , 添加一行:

  1. config.vm.provision "shell",inline: "ip route add default via xxx.xxx.xxx.xxx"

保存,执行命令 vagrant reload —provision(注意是- -) ,执行成功后,可以登陆虚拟机执行 ip route ,发现第一行多了 default via xxx.xxx.xxx.xxx ,再从外部网络 ping 虚拟机,也就可以了。

原文作者:https://my.oschina.net/cxz001/blog/733933

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

感谢你的支持,我会继续努力!
扫码打赏,建议金额1-10元