在绑定辅助弹性网卡后,部分镜像无法自动识别辅助弹性网卡的IP地址并添加路由,导致无法正常使用辅助弹性网卡。本文介绍如何在ECS实例内部配置辅助弹性网卡,以识别辅助弹性网卡的IP地址并添加路由。

前提条件

  • 已将辅助弹性网卡绑定至ECS实例。
  • 已远程登录ECS实例。具体操作,请参见 连接方式概述

背景信息

预装了自动配置工具的镜像可以自动配置绑定的辅助弹性网卡,在使用这类镜像时您无需再自行配置辅助弹性网卡,可以跳过本文操作。支持自动配置的镜像如下:
  • Alibaba Cloud Linux 3.2104 64位
  • CentOS 8.0/8.1/8.2 64位
  • CentOS 7.3/7.4/7.5 64位
  • CentOS 6.8/6.9 64位
  • Debian 10.5/10.6 64位
  • Window Server 2008 R2及更高版本

操作流程

  1. 查看辅助弹性网卡IP地址的识别状态。

    具体操作,请参见查看弹性网卡IP地址的识别状态。如果已识别IP地址,您无需再执行后续步骤。如果尚未识别IP地址,则需要执行后续步骤配置辅助弹性网卡。

  2. 获取辅助弹性网卡的信息。

    在配置辅助弹性网卡时,您可能需要填写主私网IP地址、MAC地址等信息,请提前获取信息方便后续填写。具体操作,请参见获取弹性网卡的信息

    本文以下表中的示例信息为例演示步骤,请您在配置时根据实际信息修改。
    信息类型示例信息
    网卡名称eth1
    MAC地址00:16:3e:0f:**:**
    主私网IP地址192.168.**.*2
    子网掩码255.255.255.0
    网关地址192.168.**.253
  3. 配置识别辅助弹性网卡的IP地址。
    不同的操作系统中适用的操作存在差异,如下表所示。
    操作系统相关章节
    • Alibaba Cloud Linux 2(网络服务类型为network-scripts)
    • CentOS
    • RedHat
    为Alibaba Cloud Linux 2、CentOS 6/7、或RedHat系统配置辅助弹性网卡(network-scripts)
    Alibaba Cloud Linux 2(网络服务类型为systemd-networkd)为Alibaba Cloud Linux 2系统配置辅助弹性网卡(systemd-networkd)
    • Ubuntu
    • Debian
    为Ubuntu或Debian系统配置辅助弹性网卡
    • SUSE
    • OpenSUSE
    为SUSE或OpenSUSE系统配置辅助弹性网卡
  4. 检查是否已为辅助弹性网卡配置路由。
    您可以运行命令route -n检查路由信息。如果辅助弹性网卡没有路由,或者已有路由不符合实际需要,请自行配置路由。部分系统中的配置路由操作示例,请参见:

查看弹性网卡IP地址的识别状态

运行以下命令查看弹性网卡IP地址的识别状态。
ip address show
查询结果示例如下:
  • 下图示例为主网卡(eth0)的IP地址已识别,辅助弹性网卡(eth1)的IP地址未识别,您需要按本文操作配置辅助弹性网卡。ip-detected
  • 下图示例为主网卡(eth0)和辅助弹性网卡(eth1)的IP地址都已识别,您无需再配置辅助弹性网卡。eth1-detected
说明 其中00:16:3e:16:**:**为主网卡的MAC地址,00:16:3e:0f:**:**为辅助弹性网卡的MAC地址。

获取弹性网卡的信息

阿里云支持通过实例元数据、ECS控制台、调用API获取弹性网卡的信息。具体操作如下:
  • 在ECS实例内部通过实例元数据获取
    • 获取实例所有网卡的MAC地址。
      curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/
      说明 在获取指定弹性网卡的主私网IP地址、子网掩码、网关地址时,需要使用MAC地址。
    • 获取指定弹性网卡的主私网IP地址。
      curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/00:16:3e:19:**:**/primary-ip-address
    • 获取指定弹性网卡的子网掩码。
      curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/00:16:3e:19:**:**/netmask
    • 获取指定弹性网卡的网关地址。
      curl http://100.100.100.200/latest/meta-data/network/interfaces/macs/00:16:3e:19:**:**/gateway
    示例结果如下图所示。其中00:16:3e:16:**:**为主网卡的MAC地址,00:16:3e:0f:**:**为辅助弹性网卡的MAC地址。
    说明 您可以结合ip address show的结果,确定主网卡和辅助弹性网卡MAC地址的显示顺序。
    eni-status
  • 通过ECS控制台获取
    1. 登录ECS管理控制台
    2. 在左侧导航栏,选择网络与安全 > 弹性网卡
    3. 弹性网卡页面,查看弹性网卡的主私网IP地址和MAC地址。
    示例结果如下图所示。console-eni
  • 通过阿里云CLI等工具调用API DescribeNetworkInterfaces获取
    aliyun ecs DescribeNetworkInterfaces \
    --output cols=MacAddress,PrivateIpAddress rows=NetworkInterfaceSets.NetworkInterfaceSet[] \
    --RegionId 'cn-hangzhou' \
    --InstanceId 'i-bp1a5gj0bzhwz7q****'
    示例结果如下图所示。其中00:16:3e:16:**:**为主网卡的MAC地址,00:16:3e:0f:**:**为辅助弹性网卡的MAC地址。
    说明 您可以结合ip address show的结果,确定主网卡和辅助弹性网卡MAC地址的显示顺序。
    cloudshell-view

为Alibaba Cloud Linux 2、CentOS 6/7、或RedHat系统配置辅助弹性网卡(network-scripts)

对网络服务类型为network-scripts的Alibaba Cloud Linux 2、CentOS 6/7和RedHat系统,您可以通过multi-nic-util工具自动配置或者修改网卡配置文件手动配置。
  • 通过multi-nic-util工具自动配置辅助弹性网卡的步骤如下:
    说明 如果您通过multi-nic-util工具为CentOS系统自动配置弹性网卡,请注意仅部分镜像版本支持使用multi-nic-util工具。如果使用CentOS 6镜像,请确保镜像版本为CentOS 6.8及以上;如果使用CentOS 7镜像,请确保镜像版本为CentOS 7.3及以上。如果镜像版本不支持使用multi-nic-util工具,请通过修改网卡配置文件手动配置辅助弹性网卡。
    1. 下载并安装multi-nic-util工具。
      wget https://image-offline.oss-cn-hangzhou.aliyuncs.com/multi-nic-util/multi-nic-util-0.6.tgz && \
      tar -zxvf multi-nic-util-0.6.tgz && \
      cd multi-nic-util-0.6 && \
      bash install.sh
    2. 重启弹性网卡服务。
      systemctl restart eni.service
  • 通过修改网卡配置文件手动配置辅助弹性网卡的步骤如下:
    1. 打开辅助弹性网卡的配置文件。
      vi /etc/sysconfig/network-scripts/ifcfg-eth1
    2. 在网卡配置文件中添加辅助弹性网卡的信息,然后保存并关闭配置文件。
      添加网卡信息的示例如下:
      DEVICE=eth1  # 表示新配置的网卡接口。
      BOOTPROTO=dhcp
      ONBOOT=yes
      TYPE=Ethernet
      USERCTL=yes
      PEERDNS=no
      IPV6INIT=no
      PERSISTENT_DHCLIENT=yes
      HWADDR=00:16:3e:0f:**:**  # 必须使用您查到的网卡对应的MAC地址。
      DEFROUTE=no  # 表示网卡接口不是默认路由。为避免在启动(ifup)辅助弹性网卡时改变ECS实例活动的默认路由,不要将eth1设置为默认路由。
    3. 重启网络服务。
      • CentOS 7以前版本(例如CentOS 6):
        service network restart
      • CentOS 7及以上版本、Alibaba Cloud Linux 2:
        systemctl restart network
说明
  • 当您完成配置后,可以根据需要为辅助弹性网卡配置路由。具体操作,请参见在Alibaba Cloud Linux 2、CentOS 7系统中配置路由
  • 当您完成配置后,如果需要创建自定义镜像,请先执行命令/etc/eni_utils/eni-cleanup清理/etc/udev/rules.d/70-persistent-net.rules/etc/sysconfig/network-scripts/下的网络配置。

为Alibaba Cloud Linux 2系统配置辅助弹性网卡(systemd-networkd)

对网络服务类型为systemd-networkd的Alibaba Cloud Linux 2系统,您需要通过修改网卡配置文件手动配置。

  1. 打开辅助弹性网卡的配置文件。
    vi /etc/systemd/network/60-eth1.network
  2. 在网卡配置文件中添加辅助弹性网卡的信息,然后保存并关闭配置文件。
    您可以为辅助弹性网卡分配动态IP或指定静态IP,请根据需要选择一种方式。添加网卡信息的示例如下:
    • 通过DHCP分配动态IP
      [Match]
      Name=eth1 # 表示新配置的网卡接口。
      
      [Network]
      DHCP=yes
      
      [DHCP]
      UseDNS=yes
    • 指定静态IP
      [Match]
      Name=eth1 # 表示新配置的网卡接口。
      
      [Network]
      Address=192.168.**.*2/24 # 表示分配的静态IP和子网掩码。
      说明 示例中192.168.**.*2为主私网IP地址,掩码位/24对应子网掩码255.255.255.0
  3. 重启网络服务。
    systemctl restart systemd-networkd

为Ubuntu或Debian系统配置辅助弹性网卡

对Ubuntu和Debian系统,您需要根据镜像版本修改对应的配置文件。
  • 对Ubuntu 14.04、Ubuntu 16.04及Debian,操作步骤如下:
    1. 打开网卡配置文件。
      vi /etc/network/interfaces
    2. 在网卡配置文件中添加辅助弹性网卡的信息,然后保存并关闭配置文件。
      添加网卡信息的示例如下:
      auto eth0
      iface eth0 inet dhcp
      
      auto eth1  # 表示新配置的网卡接口。
      iface eth1 inet dhcp
      说明 主网卡(eth0)和辅助弹性网卡(eth1)的配置在同一个配置文件中维护,请注意不要遗漏主网卡的信息。
    3. 重启网络服务。
      • Ubuntu 16.04以前版本(例如Ubuntu 14.04):
        service networking restart
      • Ubuntu 16.04、Debian:
        systemctl restart networking
      如果出现以下警告,不影响配置辅助弹性网卡生效。您可以运行ip address show查看辅助弹性网卡IP地址的识别状态。warning
  • 对Ubuntu 18.04,操作步骤如下:
    1. 打开辅助弹性网卡的配置文件。
      vi /etc/netplan/eth1-netcfg.yaml
    2. 在网卡配置文件中添加辅助弹性网卡的信息,然后保存并关闭配置文件。
      说明 编辑配置文件时请注意以下事项:
      • 配置文件为YAML文件格式,您在配置时需要遵循YAML语法规则。
      • YAML不支持制表符(Tab)缩进,请使用空格缩进。
      • 建议您直接复制默认配置文件/etc/netplan/99-netcfg.yaml中的内容进行修改,避免产生格式问题。
      添加网卡信息的示例如下:
      network:
        version: 2
        renderer: networkd
        ethernets:
          eth1:
            dhcp4: yes
            dhcp6: no
    3. 应用添加的配置。
      netplan apply

为SUSE或OpenSUSE系统配置辅助弹性网卡

对SUSE和OpenSUSE系统,您需要通过修改网卡配置文件手动配置。

  1. 打开网卡配置文件。
    vi /etc/sysconfig/network/ifcfg-eth1
  2. 在网卡配置文件中添加辅助弹性网卡的信息,然后保存并关闭配置文件。
    通过DHCP分配动态IP的示例如下:
    BOOTPROTO='dhcp4'
    STARTMODE='auto'
    USERCONTROL='no'
  3. 重启网络服务。
    • SUSE Linux Enterprise Server 12以前版本:
      service network restart
    • SUSE Linux Enterprise Server 12及以上版本:
      systemctl restart network

在Alibaba Cloud Linux 2、CentOS 7系统中配置路由

如果您手动配置了辅助弹性网卡但还未配置路由,或者通过multi-nic-util工具自动配置了路由但不符合您的实际需要,您可以参考本章节自行配置路由。

  1. 查看路由信息。
    route -n
    查询结果示例如下:
    • 下图示例为仅查询到了主网卡(eth0)的路由信息,辅助弹性网卡(eth1)还未配置路由。main-eni-route
    • 下图示例为查询到了主网卡(eth0)和辅助弹性网卡(eth1)的路由信息。如果不符合您的实际需要,也可以自行修改。both-eni-route
  2. 根据您的实际需要规划默认路由。
    本文以下表中的示例信息为例演示步骤。
    信息示例取值
    网卡名称eth1
    主私网IP地址192.168.**.*2
    网关地址192.168.**.253
    metric1001
  3. 配置默认路由。
    下方命令为eth1添加默认路由,并创建了一张路由表和一条关联至该路由表的路由策略。其中,table 1001为路由表(和默认路由metric取值保持一致),192.168.**.253为网关地址,192.168.*.*2为eth1的主私网IP地址。
    ip -4 route add default via 192.168.**.253 dev eth1 metric 1001 && \
    ip -4 route add default via 192.168.**.253 dev eth1 table 1001 && \
    ip -4 rule add from 192.168.**.*2 lookup 1001
  4. 查看创建的路由表和策略路由。
    ip route list table 1001 && \
    ip rule list
    创建成功的示例结果如下图所示。view-route-policy
  5. 配置开机时自动更新路由。
    按上文为eth1配置路由后,请按以下步骤配置开机时自动更新路由,否则重启实例后该路由配置会失效。
    1. 打开/etc/rc.local文件。
      vim /etc/rc.local
    2. /etc/rc.local文件中添加配置路由的信息,然后保存并关闭文件。
      ip -4 route add default via 192.168.**.253 dev eth1 metric 1001
      ip -4 route add default via 192.168.**.253 dev eth1 table 1001
      ip -4 rule add from 192.168.**.*2 lookup 1001
    3. /etc/rc.local文件添加执行权限。
      chmod +x /etc/rc.local

在CentOS 8系统中配置路由

如果系统自动配置了路由但不符合您的实际需要,您可以参考本章节自行配置路由。

  1. 查看路由信息。
    route -n
    下图示例为查询到了主网卡(eth0)和辅助弹性网卡(eth1)的路由信息。如果不符合您的实际需要,也可以自行修改。centos8-route
  2. 根据您的实际需要规划默认路由。
    本文以下表中的示例信息为例演示步骤。
    信息示例取值
    网卡名称eth1
    主私网IP地址192.168.**.*2
    网关地址192.168.**.253
    table1001
  3. 创建配置路由用的脚本。
    1. 创建并打开/home/route.sh
    2. 添加配置路由的信息,然后保存并关闭/home/route.sh文件。
      下方脚本内容为eth1创建了一张路由表和一条关联至该路由表的路由策略。其中,table 1001为路由表,192.168.**.253为网关地址,192.168.*.*2为eth1的主私网IP地址。
      #!/bin/bash
      
      i=0
      while true; do
              /usr/sbin/ip -4 route add default via 192.168.**.253 dev eth1 table 1001
              if [ $? -eq 0 ]; then
                      break
          fi
              sleep 3
              let i++
              if [ $i -gt 10 ]; then
                      exit -1
              fi
      done
      
      i=0
      while true; do
              /usr/sbin/ip -4 rule add from 192.168.**.*2 lookup 1001
              if [ $? -eq 0 ]; then
                      break
          fi
              sleep 3
              let i++
              if [ $i -gt 10 ]; then
                      exit -1
              fi
      done
  4. 配置默认路由。
    sh /home/route.sh
  5. 查看创建的路由表和策略路由。
    ip route list table 1001 && \
    ip rule list
    示例结果如下图所示。view-route-policy
  6. 配置开机时自动更新路由。
    按上文为eth1配置路由后,请按以下步骤配置开机时自动更新路由,否则重启实例后该路由配置会失效。
    1. 打开/etc/rc.local文件。
      vim /etc/rc.local
    2. 添加配置路由的信息,然后保存并关闭/etc/rc.local文件。
      sh /home/route.sh
    3. /etc/rc.local文件添加执行权限。
      chmod +x /etc/rc.local