使用虚拟机时会遇到的问题
- 虚拟机与宿主机的相互访问
- 虚拟机访问外部网络与服务
- 外部网络环境访问虚拟机的服务
目的
使用不同的虚拟机网络模式来建立 ssh 连接,思考解决上面提到的问题。
环境介绍
系统 :macOS Sierra
虚拟机软件: virtualbox
虚拟机系统: Ubuntu Server 16.04 LTS
网络环境: 路由器拨号上网
Virtualbox 的网络模式
Virtualbox 和 VMware 的网络模式应该是一样的,大概分为 NAT、桥接、Host-Only 三大类。
- | NAT | 桥接 | Host-Only |
---|---|---|---|
虚拟机 -> 主机 | ✅ | ✅ | 默认不能设置 |
主机 -> 虚拟机 | ❌ | ✅ | 默认不能设置 |
虚拟机 -> 其他主机 | ✅ | ✅ | 默认不能设置 |
其他主机 -> 虚拟机 | ❌ | ✅ | 默认不能设置 |
虚拟机 -> 虚拟机 | ❌ | ✅ | ✅ |
桥接模式
它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。
所以使用桥接模式来使用虚拟机是最简单的。
之后在虚拟机中使用 ifconfig
命令查看本机的 IP 地址
需要注意的是该 IP 地址如果不是和路由器同段 IP 则需要手动设置虚拟机的 IP
# ifconfig
我们知道了虚拟机 IP 之后,我们就可以使用终端程序或 SFTP 类(Xshell、FileZilla 等)程序连接虚拟机了。我们这里是使用系统自带的终端程序来进行连接实验。
$ ssh -p 22 [email protected]
在输入正确的密码后,可成功登录虚拟机的 ssh 服务
NAT 模式
NAT:Network Address Translation,字面意思是网络地址转换
如果你不在局域网内,只有一个IP,那么NAT模式正适合你。当然如果你在局域网内,NAT模式也未尝不可,不过使用NAT模式后,主机就变成了双网卡:本身的网卡连接Internet或连接拨号的路由器,另一个虚拟网卡VMnet8连接由虚拟机组成的一个虚拟网络。从外部网络来看,无法直接访问这个虚拟网络。虚拟网络则通过本机上的NAT虚拟服务器进行转发访问Internet。
NAT 模式下连接虚拟机也非常简单,我所使用的虚拟机软件默认的网络模式也正是 NAT。对于 NAT 网络模式,我们需要做的是为虚拟机做端口转发(映射)。
然后通过访问宿主机的 IP 来访问虚拟机,方法和上面提到的一样。
$ ssh -p 8022 [email protected]
NAT 模式使用起来非常方便,但是如果该虚拟机需要想外部提供服务,则需要频繁的映射端口,所以在需要向外部提供服务的情况下还是建议桥接模式。
Host-only模式
Host-only模式和NAT一样,也相当于主机双网卡,网络拓扑和NAT也是一样,只是主机不提供NAT功能了,所以虚拟网络只能和主机访问,不能访问Internet。如果需要一个完全隔离的网络环境,则Host-only最合适不过。Host-only相当于使用双绞线直接连接虚拟机和主机,这是最原始的网络结构,当然也是最灵活的。这种情况下虚拟机就不能访问Internet了吗?局域网下的其他机器就不能访问虚拟机上的服务了吗?当然不是。如果我们自己在主机上搭建起我们自己的NAT服务和DHCP服务,那么Host-only其实和NAT是一样的。从下面的示意图也可以看出,Host-only和NAT的唯一区别就在于,主机上少了NAT这个部分。
补充
你也许也会遇到下面这些问题,这里列举一些希望可以帮助到你。
如何启用 root 账户
$ sudo passwd root
接着系统会让你建入登录账户的密码,然后设置 root 账户的密码
root 账户不被允许远程登录
# vi /etc/ssh/sshd_config
PermitRootLogin 配置项将原先的without-password修改为 yes
重启 ssh 服务
service ssh restart
ssh 无法连接
检查虚拟机上的 ssh服务
、OpenSSL
、防火墙设置