首页 > 技术文章 > 虚拟机中ubuntu20配置NAT静态IP踩坑记

yhcasey 2021-04-19 17:48 原文

背景

在使用ubuntu嵌入式开发过程中,不管是使用ssh登录虚拟机还是需要使用FTP,NFS等都需要开发虚拟机的IP一直不变,一般我们有两种方案,其一是使用一个路由器,虚拟机使用桥接的方式,直接接入路由器,然后设置使用静态IP的方式,另外一种就是是用NAT的方式,同时设置NAT方式为静态IP。这里只说明在设置NAT方式,及这过程中遇到的问题及解决方式

1、vmware的配置

Vmware客户端的配置,编辑->虚拟网络编辑器,点击更改设置,然后安装下图

1、取消DHCP的勾选,2、NAT设置,记住其中的网关配置信息,如下图中的192.168.128.2,后面配置静态IP时需要用到

2、VMNet8配置

配置主机vmnet8的静态IP信息,如下图步骤所示,IP地址及其掩码参考vmware的NAT配置信息,DNS可以自己指定,下面使用的是阿里云的DNS

3、ubuntu虚拟机配置

从Ubuntu 17.10开始,已放弃在 /etc/network/interfaces 里固定 IP 的配置,即使配置也不会生效。Ubuntu引入了一个名为Netplan的新工具,用于网络设置管理,Netplan将根据YAML描述文件,来配置网关参数信息。我们使用的是20.04的版本,我们需要修改/etc/netplay/目录下的.yaml文件,没有的话就新建一个,根据需要,配置如下:

network:
    ethernets:
    ens33:     #配置的网卡的名称
      addresses: [192.168.128.158/24]    #配置的静态ip地址和掩码
      dhcp4: no    #关闭DHCP,如果需要打开DHCP则写yes
      optional: true
      gateway4: 192.168.128.2    #网关地址
      nameservers:
         addresses: [192.168.31.2]    #DNS服务器地址,多个DNS服务器地址需要用英文逗号分隔开
  version: 2
  renderer: networkd    #指定后端采用systemd-networkd或者Network Manager,可不填写则默认使用systemd-workd

执行 sudo netplan apply
另外,有的说需要修改/etc/NetworkManager/NetworkManager.conf文件,将managed=false 改为managed=true,但是我不修改也可以,供参考吧
在设置这个文件时,一定要注意:

1、ip地址和DNS服务器地址需要用[]括起来,但是网关地址不需要
2、注意每个冒号后边都要先加一个空格
3、注意每一层前边的缩进,至少比上一层多两个空格,推荐直接用4个空格,2个空格有时也会报错

4、其中遇到的巨坑,就是在填写DNS服务器时,也就是nameservers的addresses信息,我开始填写的是223.5.5.5,也就是一个公网阿里的DNS信息,导致在shell中ping百度时,怎么都是显示域名解析失败,但是ping百度的IP时,又是可以的,想了各种办法,发现是需要设置成网关的地址就行了。

推荐阅读