Назад | Перейти на главную страницу

Выберите сетевой интерфейс по умолчанию

У меня есть сервер с 2-мя интерфейсами. eth0 в 100 раз быстрее, чем eth1. Хотя по какой-то причине при каждой перезагрузке интерфейс по умолчанию выбирается случайным образом. Что еще больше раздражает, они оба используют один и тот же шлюз, поэтому выбрать шлюз по умолчанию не получится. Как Linux выбирает интерфейс по умолчанию и как выбрать интерфейс по умолчанию?

Вот мой route -n чтобы немного помочь объяснить ситуацию.

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
173.246.100.0   0.0.0.0         255.255.252.0   U     0      0        0 eth1
173.246.100.0   0.0.0.0         255.255.252.0   U     0      0        0 eth0
0.0.0.0         173.246.103.254 0.0.0.0         UG    0      0        0 eth1
0.0.0.0         173.246.103.254 0.0.0.0         UG    100    0        0 eth0

PS. Это VPS, так что где-то виноват и мой провайдер. Причина для второго интерфейса - иметь другой IP-адрес для DNS, потому что он выполняет только DNS, а это очень медленно.

РЕДАКТИРОВАТЬ: это сервер Ubuntu 10.04

Использовать ifmetric чтобы изменить значение метрики обоих интерфейсов. Увеличение eth1 выше eth0 приведет к тому, что eth0 будет использоваться для всех соединений. Решает проблему полностью.

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

sudo vi /etc/network/interfaces

Как только вы получите доступ к сетевому файлу, вы, вероятно, увидите что-то вроде следующего:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 173.246.100.1
    network 173.246.100.0
    netmask 255.255.252.0
    broadcast 173.246.100.255
    gateway 173.246.103.254

auto eth1
iface eth0 inet static
    address 173.246.100.2
    network 173.246.100.0
    netmask 255.255.252.0
    broadcast 173.246.100.255
    gateway 173.246.103.254

Измените конфигурацию так, чтобы он выглядел так:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 173.246.100.1
    network 173.246.100.0
    netmask 255.255.252.0
    broadcast 173.246.100.255
    gateway 173.246.103.254

iface eth0:1 inet static
    address 173.246.100.2
    network 173.246.100.0
    netmask 255.255.252.0

Это назначит оба IP-адреса первой сетевой карте. Как только вы это сделаете, сохраните файл и запустите:

/etc/init.d/networking restart

И изменения будут зафиксированы.

<- РЕДАКТИРОВАТЬ ->

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

<- РЕДАКТИРОВАТЬ ->

Кроме того, если ваш основной IP-адрес в настоящее время не обслуживает DNS, почему бы не использовать его и для DNS? Вы можете разместить несколько разных сервисов на одном IP-адресе, поскольку они используют разные порты.

Кажется, у вас есть два интерфейса в одной подсети, что немного странно. Linux (при условии, что вы используете производную от Red Hat) выбирает шлюз по умолчанию, считывая значение GATEWAY из /etc/sysconfig/network. Эта переменная, однако, содержит IP-адрес в качестве идентификатора шлюза, а не имя интерфейса. Итак, в вашем случае один IP-адрес может быть шлюзом для обоих интерфейсов, что приводит (я думаю) к некоторому состоянию гонки.

Я до сих пор не понимаю, зачем вам второй интерфейс. Что будет, если полностью вырубить медленный интерфейс?