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

12

У меня есть сервер с 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

user163365
источник
Интересно, что, как говорится в справочной странице ifconfig об этом в разделе «Метрика»: этот параметр устанавливает метрику интерфейса. Он недоступен в GNU / Linux.
wzzrd
1
Рад, что вы поняли это. Если никто не ответил на это, и ваша правка представляет решение, вы должны добавить это ниже в отдельный раздел с ответами, а затем принять его как правильный ответ (после истечения времени ожидания). Пожалуйста, не помещайте ответы в раздел вопросов.
Калеб
@Caleb: я все еще был на тайм-ауте, я отправил свой ответ
user163365

Ответы:

15

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

user163365
источник
2
Меняет ли это шлюз по умолчанию сразу или после перезагрузки?
CMCDragonkai
2

Вы должны отключить второй, медленный интерфейс, а затем добавить дополнительный 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-адреса первому NIC. После этого сохраните файл и запустите:

/etc/init.d/networking restart

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

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

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

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

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

Алекс Берри
источник
0

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

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

wzzrd
источник
Во-первых, я использую Ubuntu, но, видя, что это не проблема шлюза, это не должно иметь значения. Во-вторых, если я отключаю второй интерфейс, трафик использует первый интерфейс, но я теряю второй IP, что является причиной того, почему у меня второй интерфейс во-первых.
user163365
1
Вы можете легко настроить два адреса на одном интерфейсе с псевдонимом. Весь трафик через быстрый интерфейс, два IP настроены, проблема решена, нет? И учитывая «Как Linux выбирает интерфейс по умолчанию и как выбрать интерфейс по умолчанию?», Как это не проблема шлюза?
wzzrd
1
Не будет работать, так как это виртуальные интерфейсы, вероятно настроенные для маршрутизации только тех данных, которые поступают на указанный ip. Кроме того, эта проблема касается интерфейса, а не шлюза, поскольку шлюз одинаков в обоих интерфейсах.
user163365 24.06.11
2
Входящие запросы могут поступать на один интерфейс, но исходящие данные все равно уже проходят через случайный интерфейс. Попробуйте совет, удалите один из интерфейсов, поместите другой IP с другим с псевдонимом и посмотрите, работает ли он. Если они, как вы говорите, виртуальные, то почему разница в скорости и почему попытка разделения? Что-то не гель.
EightBitTony