在 Ubuntu 22.04 中配置静态 IP 的步骤如下:

  1. 打开终端,并以管理员身份运行。

  2. 编辑网络配置文件。输入以下命令并按 Enter 键:

    sudo nano /etc/netplan/00-installer-config.yaml
    
  3. 在打开的文件中,找到与你要设置静态 IP 的网络接口相关的部分。默认情况下,接口名称为 eth0

  4. 在该接口部分添加以下内容来配置静态 IP 地址、子网掩码和网关:

    addresses: [192.168.1.100/24]
    gateway4: 192.168.1.1
    nameservers:
      addresses: [8.8.8.8, 8.8.4.4]
    

    注意:请根据你的网络设置,将上述 IP 地址、网关和 DNS 服务器地址替换为你需要的值。

  5. 按 Ctrl + O 键保存文件,然后按 Ctrl + X 键关闭编辑器。

  6. 应用配置更改。运行以下命令:

    sudo netplan apply
    

几点问题的说明

1. dhcp4: false

每张网卡都要加上这个,在 Netplan 中,如果你没有明确设置 dhcp4: false,那么系统可能会默认尝试通过 DHCP 获取 IP 地址。如果 DHCP 服务器不存在,或无法分配 IP,相关网卡可能会处于未配置状态(即没有获得 IP 地址)

2. Netplan 配置文件在重启后恢复默认的问题

这个问题通常是由于系统配置管理工具(如 cloud-init 或其他自动化配置工具)在启动过程中覆盖了你手动编辑的 Netplan 文件。以下是几种可能的原因和解决方法:

原因 1:cloud-init 覆盖 Netplan 配置

Ubuntu 服务器版本通常预装了 cloud-init,它在启动时自动从外部源(如云服务提供商的元数据)获取网络配置,并生成 Netplan 配置文件。如果 cloud-init 被启用,它可能会在系统重启时覆盖你手动编辑的 Netplan 文件。

解决方法:
  • 禁用 cloud-init 的网络管理功能:

    1. 编辑 /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg 文件(如果该文件不存在,创建它):

      sudo nano /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
      
    2. 在文件中加入以下内容:

      network: {config: disabled}
      
    3. 保存并退出文件,禁用 cloud-init 对网络的控制。然后重新应用 Netplan 配置:

      sudo netplan apply
      
    4. 重启系统以确保 cloud-init 不再影响网络配置:

      sudo reboot
      

3.

renderer: networkd:指定使用 systemd-networkd 作为网络后台服务。你也可以使用 NetworkManager,特别是如果系统运行桌面版的话。

4.

在复杂的网络场景下,使用 routes: 配置静态路由比使用 gateway4 更加灵活,特别是当你有多个网卡需要连接到不同的网段或网络时。通过 routes: 你可以为每个网络接口设置特定的路由规则,从而避免 gateway4 的局限性(只能设置一个默认网关)。下面是如何用 routes: 代替 gateway4 的具体说明和示例。

routes: 的基本语法

在 Netplan 中,routes: 的语法格式如下:

routes:
  - to: <目标网络>
    via: <下一跳网关>
    metric: <优先级>
    on-link: <是否直接连接>
参数说明:
  • to: 指定目标网络,通常是一个网段(如 192.168.1.0/24)或单个 IP 地址。
  • via: 指定流量通过的下一跳网关(gateway)。
  • metric: 用来设置路由优先级,数值越小优先级越高。
  • on-link: 表示目标网络是否在本地链路上,通常在某些复杂的路由场景下使用。

示例 1:使用 routes: 替代单个 gateway4

假设你有一个网卡 enp0s3,并且希望将其连接到网关 192.168.1.1,且该网卡的 IP 地址是 192.168.1.10/24。传统上,你可以通过 gateway4 进行配置:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.1.10/24
      gateway4: 192.168.1.1

现在,我们可以使用 routes: 来实现相同的功能,替代 gateway4

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.1.10/24
      routes:
        - to: 0.0.0.0/0
          via: 192.168.1.1
          metric: 100
解释:
  • to: 0.0.0.0/0 表示这是一个默认路由,指向所有网络流量(相当于 gateway4)。
  • via: 192.168.1.1 指定流量通过的下一跳网关。
  • metric: 100 是该路由的优先级,值越小优先级越高。

示例 2:多张网卡使用 routes 实现多个路由

假设你有两张网卡 enp0s3enp0s8,分别连接到不同的网段:

  • enp0s3 连接到网段 192.168.1.0/24,网关为 192.168.1.1
  • enp0s8 连接到网段 192.168.2.0/24,网关为 192.168.2.1

你希望将特定流量(例如访问 192.168.3.0/24 网段的流量)通过 enp0s8 发送,而其他流量默认走 enp0s3

通过 routes: 你可以定义特定的路由规则:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.1.10/24
      routes:
        - to: 0.0.0.0/0
          via: 192.168.1.1
          metric: 100

    enp0s8:
      dhcp4: no
      addresses:
        - 192.168.2.10/24
      routes:
        - to: 192.168.3.0/24
          via: 192.168.2.1
          metric: 100
解释:
  • enp0s3 配置了默认路由,所有未指定的流量会通过 192.168.1.1 这个网关出去。
  • enp0s8 配置了一个特定的路由规则,即访问 192.168.3.0/24 网段的流量通过网关 192.168.2.1 传输。

示例 3:多个网卡和多条默认路由

如果你有两张网卡都接入了不同的网络(如内外网),你可以通过 metric 设置路由优先级。通常情况下,只有一张网卡会配置默认路由,但你可以配置多条默认路由,并通过 metric 指定优先级。

例如:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 10.0.1.10/24
      routes:
        - to: 0.0.0.0/0
          via: 10.0.1.1
          metric: 100

    enp0s8:
      dhcp4: no
      addresses:
        - 10.0.2.10/24
      routes:
        - to: 0.0.0.0/0
          via: 10.0.2.1
          metric: 200
解释:
  • 两张网卡都配置了默认路由(to: 0.0.0.0/0),但 enp0s3 的路由 metric 值为 100,优先级更高,通常情况下流量会优先从 enp0s3 出口发送。
  • 如果 enp0s3 出现问题,系统会自动使用 enp0s8(因为 metric 值较大,优先级较低)。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐