Поделиться через


Настройка нескольких сетевых интерфейсов на виртуальных машинах Linux Azure

Область применения: ✔️ виртуальные машины Linux

Примечание.

CentOS, на который ссылается в этой статье, является дистрибутивом Linux и достигнет конца жизни (EOL). Думайте об использовании и планировании соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

В этой статье описывается настройка нескольких виртуальных сетевых интерфейсов в виртуальных машинах Azure Linux, которые выполняют наиболее распространенные дистрибутивы Linux.

Итоги

Вы можете создать виртуальную машину Azure с несколькими сетевыми интерфейсами, подключенными к ней. Распространенный сценарий заключается в наличии разных подсетей для подключения внешнего интерфейса и серверной части или сети, выделенной для решения мониторинга или резервного копирования.

В этой статье приведена необходимая конфигурация для работы нескольких сетевых интерфейсов на виртуальной машине Linux Azure, основанной на следующем примере сценария:

  • Виртуальная машина имеет два или более сетевых интерфейсов в одной подсети.
  • Виртуальная машина имеет два или более сетевых интерфейсов в разных подсетях, но в одной и той же виртуальная сеть (виртуальной сети).

Дополнительные сведения см. на следующих снимках экрана:

В каждом сценарии подключение можно проверить с любой виртуальной машины в одной виртуальной сети.

Внимание

Этот же процесс также можно выполнить на виртуальных машинах с более чем двумя сетевыми адаптерами.

Настройка гостевой ОС для нескольких сетевых интерфейсов

При добавлении нескольких сетевых интерфейсов на виртуальную машину Linux необходимо создать правила маршрутизации. Эти правила позволяют виртуальной машине отправлять и получать трафик, принадлежащий определенному сетевому интерфейсу. В противном случае трафик не может быть обработан правильно. Например, трафик, принадлежащий eth1 , не может быть обработан правильно определенным маршрутом по умолчанию.

В следующих разделах приведена необходимая конфигурация для работы двух сетевых интерфейсов на виртуальных машинах Linux, которые выполняют наиболее распространенные дистрибутивы Linux.

Примечание.

Выполните все команды в следующих разделах с помощью привилегий root (переключившись на корень или с помощью служебной sudo программы команд).

В каждом разделе предполагается, что виртуальная машина имеет два сетевых интерфейса с любым из следующих параметров:

  • Маршрутизация (выходные sudo ip route show данные команды):

    • Две сетевые карты в одной подсети:

      default via 10.0.1.1 dev eth0 proto static metric 100
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
      10.0.1.0/24 dev eth1 proto kernel scope link src 10.0.1.5 metric 101
      168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
      169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100
      
    • Две сетевые карты в разных подсетях, но в одной виртуальной сети:

      default via 10.0.1.1 dev eth0 proto static metric 100
      10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
      10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.5 metric 101
      168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
      169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100
      
  • Интерфейсы (выходные данные sudo ip address show команды):

    • Две сетевые карты в одной подсети:

      lo: inet 127.0.0.1/8 scope host lo
      eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
      eth1: inet 10.0.1.5/24 brd 10.0.1.255 scope global eth1
      
    • Две сетевые карты в разных подсетях, но в одной виртуальной сети:

      lo: inet 127.0.0.1/8 scope host lo
      eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0
      eth1: inet 10.0.2.5/24 brd 10.0.2.255 scope global eth1
      
  1. Добавьте две таблицы маршрутизации в файл /etc/iproute2/rt_tables , выполнив следующие команды (для каждой сетевой карты требуется одна запись):

    sudo echo "200 eth0-rt" >> /etc/iproute2/rt_tables
    sudo echo "201 eth1-rt" >> /etc/iproute2/rt_tables
    

    Если к виртуальной машине подключены дополнительные сетевые интерфейсы, добавьте дополнительные таблицы маршрутизации (например, 202 eth2-rt, 203 eth3-rt и т. д.).

  2. Убедитесь, что файл конфигурации существует для каждого сетевого интерфейса в каталоге /etc/sysconfig/network-scripts/ . Вы можете создать файлы конфигурации сетевого интерфейса на основе файла конфигурации ifcfg-eth0 (изменить DEVICE строку и удалить DHCP_HOSTNAME HWADDR строки из нового файла). Для этого введите указанные ниже команды:

    sudo cat /etc/sysconfig/network-scripts/ifcfg-eth0 > /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i 's/DEVICE=eth0/DEVICE=eth1/' /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i '/DHCP_HOSTNAME/d' /etc/sysconfig/network-scripts/ifcfg-eth1
    sudo sed -i '/HWADDR/d' /etc/sysconfig/network-scripts/ifcfg-eth1
    
  3. Чтобы сделать изменение постоянным и примененным во время активации сетевого стека, измените файлы /etc/sysconfig/network-scripts/ifcfg-eth0 и /etc/sysconfig/network-scripts/ifcfg-eth1 (ifcfg-eth2, ifcfg-eth3 и т. д., если виртуальная машина имеет более двух сетевых интерфейсов) и измените значение NM_CONTROLLED на yes no. Для этого введите указанные ниже команды:

    sudo cp -rp /etc/sysconfig/network-scripts/ifcfg-eth0 /tmp/ifcfg-eth0.bkp
    sudo cp -rp /etc/sysconfig/network-scripts/ifcfg-eth1 /tmp/ifcfg-eth1.bkp
    sudo sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth0
    sudo sed -i 's/NM_CONTROLLED=yes/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth1
    

    Примечание.

    Убедитесь, что NM_CONTROLLED=no строка добавляется в файлы /etc/sysconfig/network-scripts/ifcfg-eth0 и /etc/sysconfig/network-scripts/ifcfg-eth1 с помощью cat /etc/sysconfig/network-scripts/ifcfg-eth* команды. Если строка отсутствует в файлах, добавьте ее вручную с помощью sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0 команд и sudo echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth1 команд.

  4. После изменения этой конфигурации перезапустите сетевые службы, чтобы применить изменения, выполнив следующую команду:

    sudo systemctl restart network
    
  5. Создайте соответствующие файлы правил и маршрутов с помощью любого текстового редактора (в следующих примерах используется редактор vi), а также добавьте соответствующие правила и маршруты в каждый файл. Выполните следующие действия, чтобы создать один набор файлов rule-eth# и route-eth# для каждого сетевого интерфейса. Замените IP-адрес и сведения подсети соответствующим образом на каждом шаге. Если у вас есть больше сетевых интерфейсов, создайте один и тот же набор файлов rule-eth# и route-eth# для каждого интерфейса с помощью соответствующих IP-адресов, сети и шлюза.

    • Создайте правила и маршруты для eth0:

      1. Чтобы создать файл правила для eth0, откройте файл /etc/sysconfig/network-scripts/rule-eth0.

        sudo vi /etc/sysconfig/network-scripts/rule-eth0
        
      2. Добавьте следующее содержимое в файл правила. Замените IP-адрес соответствующим образом, убедитесь, что в конфигурации указан IPv4-адрес и сохраните 32-разрядное значение:

        from 10.0.1.4/32 table eth0-rt
        to 10.0.1.4/32 table eth0-rt
        
      3. Чтобы создать файл маршрута для eth0, откройте файл /etc/sysconfig/network-scripts/route-eth0.

        sudo vi /etc/sysconfig/network-scripts/route-eth0
        
      4. Добавьте следующее содержимое в файл маршрута. Замените значения сети и шлюза соответствующим образом.

        10.0.1.0/24 dev eth0 table eth0-rt
        default via 10.0.1.1 dev eth0 table eth0-rt
        
    • Создайте правила и маршруты для eth1:

      1. Чтобы создать файл правила для eth1, откройте файл /etc/sysconfig/network-scripts/rule-eth1.

        sudo vi /etc/sysconfig/network-scripts/rule-eth1
        
      2. Добавьте следующее содержимое в файл правила. Замените IP-адрес соответствующим образом, убедитесь, что в команде указан IPv4-адрес и сохраните 32-разрядное значение.

        • Две сетевые карты в одной подсети:

          from 10.0.1.5/32 table eth1-rt
          to 10.0.1.5/32 table eth1-rt
          
        • Две сетевые карты в разных подсетях, но в одной виртуальной сети:

          from 10.0.2.5/32 table eth1-rt
          to 10.0.2.5/32 table eth1-rt
          
      3. Чтобы создать файл маршрута для eth1, откройте файл /etc/sysconfig/network-scripts/route-eth1.

        sudo vi /etc/sysconfig/network-scripts/route-eth1
        
      4. Добавьте следующее содержимое в файл маршрута. Замените значения сети и шлюза соответствующим образом.

        • Две сетевые карты в одной подсети:

          10.0.1.0/24 dev eth1 table eth1-rt
          default via 10.0.1.1 dev eth1 table eth1-rt
          
        • Две сетевые карты в разных подсетях, но в одной виртуальной сети:

          10.0.2.0/24 dev eth1 table eth1-rt
          default via 10.0.2.1 dev eth1 table eth1-rt
          
  6. Чтобы применить изменения, выполните следующую команду, чтобы перезапустить сетевую службу:

    sudo systemctl restart network
    

    Теперь правила маршрутизации правильно заданы, а подключение должно работать из любого сетевого интерфейса. Вы можете проверить подключение с помощью Secure Shell (SSH) или проверки связи обоих IP-адресов из виртуальной машины в одной виртуальной сети.

  7. Убедитесь, что текущие маршруты и правила загружаются с помощью следующих команд:

    sudo ip route show
    sudo ip rule show
    

Внимание

Если у вас по-прежнему возникли проблемы, связанные со вторым сетевым адаптером, перезапустите виртуальную машину с помощью sudo reboot команды, повторите шаг 7 и снова проверьте подключение.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.