ubuntu22.04静态ip设置(桥接模式、only-host+NAT模式)

在创建一台虚拟机后,默认的方式往往是通过DHCP动态的进行分配,DHCP服务器会告知创建的虚拟机分配到的ip地址,网关地址等信息。所以在创建好虚拟机之后,这些信息都不需要我们来配置,我们直接用就好了。

但是,每当虚拟机重启时,它都会向DHCP服务器发送DHCP请求,请求分配一个IP地址。DHCP服务器会检查IP地址池中是否有可用的IP地址,并为虚拟机分配一个新的IP地址,而这个地址是随机的,这在有些情况下会造成不便。比如我想通过ssh来连接一台虚拟机,如果地址变动的话,那我每次连接虚拟机的时候,还得先去看一下虚拟机的新ip地址,然后再进行连接。这是很麻烦的。

这时我们可以为虚拟机设置静态的ip地址,把DHCP关掉,关掉DHCP之后要怎么做呢?

让我们回顾一下DHCP的作用,它可以设置三项网络信息①分配DNS服务器地址;②分配ip地址;③告知网关地址。这三项信息我们可以手动设置,这并不是一件难事。

对于DNS服务器地址: 这个我们可以直接设置为8.8.8.8(当然,这不一定是最佳选项,你可以通过其他方式获取当前机器的最佳dns服务)。

对于ip地址和网关地址: 由于我们关闭了DHCP服务,所以机器的地址需要手动分配,这个地址需要和网关处于同一个网络中。通过ip route show可以查看当前机器的网关地址,输出信息如下:

$ ip route show
default via 192.168.1.1 dev enp0s3 proto dhcp metric 100
169.254.0.1/16 dev enp0s3 scope link metric 1000
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.111 metric 100

第一行信息表示默认网关为192.168.1.1;第三行信息中,192.168.1.0/24表示当前所在的子网,192.168.1.111则是当前机器的ip地址。那么根据子网为192.168.1.0/24,可以得出子网的掩码为255.255.255.0

ip地址则可以分配为除网关外,192.168.1.2~192.168.1.255的任意地址。当我们关闭DHCP后,ip地址池是由我们自己管理的,所以在分配地址时,注意子网中的ip地址不能重复。在我的机器中,可以选择192.168.1.2。

至此三项重要信息就都确定了:①DNS为8.8.8.8;②ip地址为192.168.1.2/24;③网关为192.168.1.1。随后我们开始手动设置。

从Ubuntu 17.10版本开始,Ubuntu使用了Netplan作为网络配置工具,我们可以通过编辑/etc/netplan/下的配置文件来设置网络:sudo nano /etc/netplan/01-netcfg.yaml(也可能不叫01-netcfg.yaml文件,不同机器中名字可能有差异,但都在/etc/netplan/目录下),向文件中添加如下配置信息:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses: [192.168.1.2/24]
      routes:
        - to: 0.0.0.0/0
          via: 192.168.1.1
          metric: 100
      nameservers:
        addresses: [8.8.8.8]

其中"to: 0.0.0.0/0"是一个路由规则,它表示将所有目的地IP地址都路由到指定的网关。这个路由规则通常被称为默认路由或默认网关。

随后,我们通过sudo netplan try来检验当前的Netplan配置,该命令会显示配置的错误或警告信息。如果没有警告或错误,我们可以通过sudo netplan apply来应用新的配置。(如果配置后网络不能正常联网了,那把ethernets:下面的内容全部删掉,执行sudo netplan apply恢复成默认的就好了。)

如果你是通过ssh来设置静态ip的,那当你更改ip地址后ssh连接会断掉,用新地址重连就好了。

扩展内容

在配置k8s集群时,很多教程并不采用桥接网络,而是采用nat网络+only-host网络的模式,我的理解是这nat和only-host模式的网络能隐藏虚拟机的网络,避免了外部网络的访问,可能这样更加安全吧。

在nat网络+only-host网络模式中,配置静态ip和上面的过程相同,需要注意的是不要搞混了网络接口,比如在这种模式下通过ip route show的输出如下:

default via 10.0.2.2 dev enp0s3 proto static metric 100 
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.101 
192.168.56.0/24 dev enp0s8 proto kernel scope link src 192.168.56.101

这里有两个不同的网络接口,enp0s3和enp0s8,其中网关是enp0s3网络接口,那enp0s3对应nat网络,而enp0s8对应only-host网络。

这是因为only-host将主机作为了网关,而nat网络中会单独虚拟出一个网关,在这里即为10.0.2.2。

对应的配置文件如下:

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    # nat network
    enp0s3:
      dhcp4: no
      addresses: [10.0.2.101/24]
      routes:
        - to: 0.0.0.0/0
          via: 10.0.2.2
          metric: 100
      nameservers:
        addresses: [8.8.8.8]
    # only-host static network
    enp0s8:
      dhcp4: no
      addresses: [192.168.56.101/24]

其中only-host是不指定网关的。

另外,nat网络内的机器是被隐藏的,也就是说这些机器可以主动向外发送信息,因为外部机器的端口对这些机器来说是可见的,但内部机器的端口却被NAT主机隐藏了,所以外部机器不能随意和这些机器通信。可以通过设置NAT的端口转发规则来暴露内部机器的部分端口。比如通过设置转发规则暴露机器的22号端口以便进行ssh连接。更便捷的方式是通过only-host网络,在上面的配置文件中对应enp0s8网络接口,ip地址为192.168.56.101。

virtualbox最多支持4个网络接口,读者也可以尝试把这些接口全部开启尝试实验。
在这里插入图片描述

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值