用虚拟机模拟远程服务器-固定 IP 地址

上一篇文章中我们通过 VMware Player 和 Ubuntu Server 完成了服务器的安装,但距离远程服务器搭建完成还有一段路程要走。在这篇文章中我们将开始进行服务器的网络配置,为服务器通过网络给用户提供服务打下基础!

网络结构

在开始配置网络前,我们先分析一下 VMware Player 提供的默认 NAT 网络的结构

NAT.png

  • 虚拟机:我们创建的服务器
  • DHCP 服务器:为虚拟网络内的计算机动态提供 IP 地址等连接网络所需信息
  • NAT 设备:当位于虚拟网络内部的虚拟机需要访问外部网络时,会将请求发送给 NAT 设备;NAT 设备收到请求后,会将请求中虚拟机的 IP 地址转换为宿主机的 IP 地址;由于宿主机的 IP 地址于外部网络可见,从而实现虚拟网络内部虚拟机对外部网络的访问

从默认 NAT 网络的结构可以知道,我们的服务器在虚拟网络中的通信是基于 DHCP 服务器分配的动态 IP,访问外部网络则是将请求发送给 NAT 设备。

但服务器提供服务的前提是用户能在一个固定的地方找到服务器,显然动态变化的 IP 地址是不能满足要求的。所以我们需要将服务器在虚拟网络中的 IP 地址固定,实现客户对服务器的稳定访问。

固定 IP 地址

Ubuntu Server 的网络配置文件位于 /etc/netplan 下,以 .yaml 为后缀,常用网络配置模板可以在 netplan 找到

network:
  version: 2
  renderer: networkd
  ethernets:
    <网卡名称>:
      addresses:
        - <静态 IP>
      nameservers:
        addresses: [<DNS 服务器 IP>]
      routes:
        - to: 0.0.0.0/0
          via: <路由器 IP>
复制代码

但有些麻烦的是,VMware Player 没有开放对虚拟网络进行自定义的功能(该功能在付费的 VMware Workstation Pro 上开放),所以我们需要查询默认 NAT 虚拟网络中使用的相关网络信息,并依据这些信息填充配置文件。

  1. 查询服务器网卡名称和当前 IP 地址:ip address

    IP.png

    • 网卡名称:ens32
    • 服务器 IP 地址:192.168.70.128/24(因为虚拟网络的规模很小,我们只配置 IPv4)
  2. 查询 NAT 设备信息:ip router

    route.png

    • NAT 设备 IP 地址:192.168.70.2
  3. 填写网卡配置文件:sudo vim /etc/netplan/*.yaml(这里我使用的是 vim,大家也可以使用 nano 等其它编辑器)

    network:
      version: 2
      renderer: networkd
      ethernets:
        ens32:
          addresses:
            - 192.168.70.128/24
          nameservers:
            # 阿里公共 DNS
            addresses: [223.5.5.5, 223.6.6.6]
          routes:
            - to: 0.0.0.0/0
              via: 192.168.70.2
    复制代码

    修改配置.png 注意该配置文件对缩进的要求非常高,大家在填写的时候一定要仔细

  4. 测试网络配置文件中是否存在错误: sudo netplan try(若不存在错误则会提示是否应用配置文件)

    尝试配置.png

  5. 查看配置是否生效(因为大部分网络信息都是保持原状,我们通过查看 DNS 信息来判断):systemd-resolve --status

    DNS.png

  6. 为了保险起见,我将服务器重启后再测试网络情况

    • IP 地址:

      重启IP.png

    • DNS 服务器:

      重启DNS.png

    • 访问外部网络:

      外部网络.png

    • 主机访问:

      宿主机访问.png

总结

在本篇文章中,我们从分析网络结构开始,一步步地成功将服务器在虚拟网络中的 IP 地址固定!现在位于虚拟网络中的任何用户都可以通过 192.168.70.128 这个 IP 地址对我们的服务器进行访问。但在服务器为用户提供服务之前,我们先得配置好我们开发者需要的服务。

在下一篇文章中,我们将通过 SSH 实现本地机器对服务器的远程登录访问,就像实际开发中访问服务器一样!

猜你喜欢

转载自juejin.im/post/7034440871646855204