Linux шлюз по умолчанию

Для определения и задания маршрутов в сетях существуют динамическая и статическая маршрутизации. В первом случае маршруты задаются специальным демоном маршрутизации, который модифицирует соответствующим образом таблицу маршрутизации ядра. Во втором случае маршруты задаются администратором/пользователем при помощи команды route. Маршруты, заданные командой route не изменяются, даже если включена динамическая маршрутизация.

Как работает маршрутизация?

Прежде всего нужно понимать, что процессы маршрутизации осуществляются на сетевом уровне. Для каждого пакета проводится сравнение его целевого IP-адреса с записями в таблице маршрутизации. Когда обнаруживается хотя бы частичное соответствие с одним из шлюзов в таблице, пакет направляется к следующему узлу (шлюзу), соответствующему найденному маршруту. И здесь может возникать несколько ситуаций:

Первая — когда, например, пакет адресуется компьютеру, находящемуся в той же сети, что и источник пакета, а точнее сказать — его отправитель. В данной ситуации для такого пакета следующим шлюзом является один из локальных интерфейсов и он (пакет) отправляется сразу к адресату. Такие «явные» и «короткие» шлюзы обычно задаются во время конфигурирования сетевых интерфейсов — командой ifconfig.

Вторая — когда адрес назначения пакта не соответствует ни одному шлюзу в таблице маршрутизации. В таком случае, во избежание коллизий в сети и её чрезмерной нагрузки должен быть задействован шлюз по-умолчанию. Другими словами, это такой маршрут, который указывает системному ядру: все остальные пакеты (без соответствий в таблице маршрутов) направляй сюда. Если шлюз по-умолчанию не будет предусмотрен, то отправляющей стороне посылается сообщение о недостижимости сети или узла.

Как правило, локальные сети имеют единственный шлюз во внешнюю среду, например в Интернет. В свою очередь, в сети Интернет таких «стандартных маршрутов» не существует.

Синтаксис и основные опции

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

В общем случае прототипом команды route является следующая запись:

Эта команда добавит шлюз с обратной связью через виртуальное устройство lo, которое используется для этой цели в Linux-системах. Опции -net и -host используются для указания адреса, характеризующего либо сеть, либо узел соответственно как пункты назначения. Для определения подсети служит опция netmask, для задания приоритета шлюза — опция metric. Сетевой интерфейс обозначается опцией dev. Кроме описанных выше для команды route также существуют и другие используемые ей опции, которые приведены в следующей таблице:

Опция

Назначение

Шлюз, через который должны достигаться сеть или узел. Задаётся в виде имени узла или точечной записи адреса.

Устанавливает значение MTU (максимальную величину пакета) в байтах.

Устанавливает размер TCP-окна для задаваемого шлюза в байтах. Обычно используется в сетях AX.25.

Устанавливает начальное время отклика для TCP-соединений по данному маршруту в миллисекундах.

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

Заставляет работать с таблицей маршрутизации ядра. Эта опция в большинстве систем используется по-умолчанию, поэтому часто опускается.

Заставляет работать с кэшем маршрутизации ядра.

Включает подробный режим работы команды route.

Использование числового формата адресов вместо попыток определения символьных наименований узлов. Можно использовать в случае определения проблем с соединениями к DNS.

Использовать формат вывода команды netstat для отображения содержимого таблицы маршрутов. Опция -ee сгенерирует самый подробный отчёт с полными наименованиями параметров таблицы маршрутов.

Примеры использования

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

Здесь для команды route не указывается сам интерфейс, поскольку предполагается, что узлу nodeone соответствует адрес 192.168.1.2. Далее, route «узнаёт», что маршрут нужно проложить именно через eth0 благодаря тому, что системное ядро анализирует все доступные интерфейсы на предмет их конфигурации и сравнивает адрес пункта назначения с сетевой частью сетевых (сконфигурированных) интерфейсов. В данном случае ядро обнаруживает, что eth0 – тот интерфейс (с адресом 192.168.1.2), которому соответствует конечный адрес, т. е. 192.168.1.0.

Задание шлюза по-умолчанию:

Доступ в локальную сеть Ethernet через сетевой интерфейс eth0:

Здесь 192.168.10.0 – сеть, к которой нужно установить доступ (маршрут).

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

Также можно использовать сокращённую запись для задания маски подсети:

Следует отметить, что шлюзы, установленные командой route будут существовать до перезагрузки системы. Для их использования на постоянной основе необходимо нужные команды прописать в файле. В Ubuntu это /etc/network/interfaces.

Например для настройки маршрутизации сети 192.168.10.0/24 через шлюз 192.168.10.1 интерфейс eth0, это команда

$ route add -net 192.168.10.0/24 gw 192.168.10.1 eth0

файл /etc/network/interfaces будет выглядеть следующим образом

В Centos/Redhat это файл /etc/sysconfig/network-scripts/route-eth0 для интерфейса eth0 если же название интерфейса другое, то название файла будет route- . Если этого файла нет, то его нужно создать. Для настройки выше указанного примера, добавьте в файл следующие строки

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Я использую 3 интерфейса Ethernet в Ubuntu, но при перезапуске шлюз по умолчанию меняется на другой интерфейс. Каждый раз, когда я загружаюсь, мне приходится менять шлюз по умолчанию обратно на eth1, удаляя шлюз по умолчанию и добавляя его обратно с помощью eth1. Как я могу решить эту проблему?

3 ответа

Чтобы временно изменить маршрут по умолчанию, вы можете использовать команду ip, например:

Если у вас есть статическая конфигурация IP в /etc/network/interfaces Вы можете добавить оператор шлюза, чтобы сделать его постоянным.

Используя DHCP для настройки сети, вы должны настроить другой файл. Добавьте заменяющее заявление в /etc/dhcp/dhclient.conf ,

Открыть файл /etc/network/interfaces

найдите нужный интерфейс и добавьте следующее:

У меня была та же проблема для моего интерфейса Wi-Fi wlp3s0 на Ubuntu 18.04. Это влияло на мою способность подключаться к Android-модему и роутеру за пределами дома. Чтобы решить эту проблему, я должен был оставить комментарий в файле. /etc/dhcpcd.conf следующие:

чтобы получить следующее

Затем я отключился от текущей сети и снова подключил route -n или же nmcli чтобы увидеть изменения

Вы также можете удалить те же строки, если вы уверены, что это работает для вас.

Из-за этих строк NetworkManager всегда добавлял маршрут по умолчанию с неправильным шлюзом, особенно когда меня не было в моей домашней сети. Я получал "Хост назначения недоступен", когда я делал ping 8.8.8.8 , Жесткое кодирование шлюза в /etc/network/interfaces не было жизнеспособным решением, так как я много подключаюсь к общедоступному Wi-Fi (так что никогда не использую тот же маршрутизатор Wi-Fi или шлюз), и обычно DHCP должен работать "из коробки" ИМХО.

Часто возникает ситуация, когда интернеты на ноуте работают по wi-fi, но возникает необходимость зайти в локальную сеть по lan и качнуть пару файлов. И в момент подключения шланга lan ОС меняет вай-файный шлюз на лановский. Типа lan круче и главнее. Интернеты, соответственно, отваливаются, так как в локалке шлюз не имеет выхода в глобал и наступает ахтунг. Чтобы продолжать сидеть в интернетах через wi-fi с подключенным lan шлангом, нужно сменить шлюз lan на шлюз wi-fi

Для начала посмотрим на сетевые интерфейсы, для примера, в моем случае.

Нас интересуют интерфейсы eth0 и wlan0. Соответственно — lan порт и wi-fi. Видно что у wlan0 ip адрес 192.168.0.134 (широковещательный адрес и маска подсети нам тут особо не важны). Так же, зная с какого роутера ноут черпает интернеты по wi-fi, я знаю что ip адрес у него 192.168.0.1 — этот шлюз нам и нужен. Кроме того видно что у eth0 ip адрес 192.168.22.147

Видно что шлюз по умолчанию используется 192.168.22.251 — как раз от локалки, у которого нет выхода в глобал. Соответственно, интернетов у нас нет.

А для того чтобы появились интернеты нам нужно сменить вместо шлюза 192.168.22.251 дать системе шлюз 192.168.0.1

Удаляем текущий шлюз

И добавляем новый

Готово, теперь появились интернеты Правда, оно так работать будет только до перезагрузки, после перезагрузки шлюз по умолчанию снова будет от lan-а


[an error occurred while processing the directive]
Карта сайта