Как узнать шлюз интерфейса? BASH
Задача на деле такая, нужно в переменные загнать значения шлюза, нетмаск и ип адрес.
с ип адресом задача решена таким образом:
IP="`ip addr list eth0 | grep " inet " | head -n 1 | cut -d " " -f 6 | cut -d / -f 1`"
теперь надо определить шлюз, и нетмаск в виде 192.168.0.0/24 Но вот познаний в Линукс терминале мало ( Выручайте.
Ph3nix
12.12.14 10:57:26 MSK
leave ★★★★★
( 12.12.14 11:14:26 MSK )

ip r | awk '/default/'
uspen ★★★★★
( 12.12.14 11:14:30 MSK )
Последнее исправление: uspen 12.12.14 11:15:17 MSK (всего исправлений: 1)
# ip r list match 0.0.0.0/0 | awk ''
но дефолтных маршрутов может быть несколько
anonymous
( 12.12.14 11:17:31 MSK )

ip -o -4 a l eth0 | cut -d " " -f 7 | cut -d / -f 1 ip -o -4 a l eth0 | awk '' | cut -d / -f 1
sin_a ★★★★★
( 12.12.14 11:30:17 MSK )

Вопрос к знатокам — а в /proc нигде нет файлов с ip и прочей инфой?
alozovskoy ★★★★★
( 12.12.14 14:43:48 MSK )

с ип адресом задача решена таким образом: (someshit)
На интерфейсе может быть (и часто бывает) более одного ip-адреса.
Что такое «шлюз интерфейса»? Тебя интересует default gateway? Если да — то их тоже может быть больше одного (с разной метрикой).
nbw ★★★
( 12.12.14 14:59:22 MSK )
Ответ на: комментарий от sin_a 12.12.14 11:30:17 MSK
Спасибо, помог. Слепил вроде ) Топорно, но под мои нужды сойдёт!
Ph3nix
( 12.12.14 15:10:39 MSK ) автор топика
Ответ на: комментарий от nbw 12.12.14 14:59:22 MSK
Да, нужен дефолтный, понятно что может быть несколько, я спрашивал по поводу как узнать его на определённом интерфейсе с условием что он там один, мне скрипт для своих нужд нужен! ) В общем слепил я динозавра, работает вроде, но если есть какие варианты ещё, я не откажусь )
Ph3nix
( 12.12.14 15:15:21 MSK ) автор топика
Ответ на: комментарий от sin_a 12.12.14 11:30:17 MSK

ip -o -4 a l eth0 | cut -d » » -f 7 | cut -d / -f 1
Device «eth0» does not exist.
/sbin/route -n | awk '$1=="0.0.0.0" '
А вообще смысл трэда непонятен. Таких тем в сети уже тысячи
snaf ★★★★★
( 13.12.14 18:50:17 MSK )
30 марта 2015 г.
Ребят, сам наткнулся на эту тему, решая аналогичную задачу. Рабочего решения для случаев, когда шлюз показывает ни одна из команд ip route, route -n и ifconfig, здесь так и не предложили, к сожалению. Попробую это исправить.
Объясню человекопонятным языком.
Для одних интерфейсов, ifconfig покажет destionation. Для других интерфейсов, ifconfig покажет broadcast, а вот текущий адрес шлюза — фиг. Подозреваю, что вопрос касался именно таких интерфейсов.
В ситуации, когда к компу подключены 10 usb-модемов (да, блин, 2g-gsm/edge местами рулит 🙁 ) с разными интерфейсами, где для одних есть destination, для других broadcast и необходимо агрегировать все соединения, надо обязательно узнать текущие адреса шлюзов всех интерфейсов, чтобы правильно прописать маршруты.Причем, сделать это нужно динамически, скриптом, чтобы не прописывать и не добавлять кучу маршрутов вручную каждый раз.
Собственно, сразу к результатам углубленного ковыряния данного вопроса, без скучного описания самого процессса.
Адреса сохраняются в кеше ARP, получить их можно так:
arp -i интерфейс
ip neigh show dev интерфейс
Ну и получение непосредственно адреса шлюза:
P2=`ip neigh show dev интерфейс | grep -E “REACHABLE|STALE” | awk ` #теперь $P2 присовено значение в виде IP шлюза интерфейса echo $P2
Методы получения адресов шлюза для других типов интерфейсов приводились выше — обычно, их можно молучить командами типа ifconfig, ip route и route -n. Меня же, интересовал вопрос о том, как получить адрес шлюза интерфейса, который не отображается командами ifconfig, ip route и route -n и надеюсь, что помог(у) этим сообщением хотябы одному человеку на земле 🙂
VictorAS
( 30.03.15 00:37:52 MSK )
28 сентября 2016 г.
Ответ на: комментарий от VictorAS 30.03.15 00:37:52 MSK
Подниму тему. И все-таки как вытащить адреса шлюзов, которые выдаются по DHCP на интерфейс. Пример такой. Имеем линукс машину в которую от двух провайдеров воткнуто по аплинку. Оба провайдера выдают адреса по DHCP. Нужно на сервере настроить балансировку трафика в оба канала. Делается это довольно изящно.
route del default ip ro flush cache ip ro add default scope global nexthop via ip_gateway_1 dev eth0 weight 50 nexthop via ip_gateway_2 dev eth1 weight 50
Но для этого нужно знать, что выдается по DHCP. Из этого вопрос где, в том же Debian, хранится эта информация? Нужно это для скрипта.
bredis
( 28.09.16 21:06:00 MSK )
Ответ на: комментарий от bredis 28.09.16 21:06:00 MSK
Сразу скажу не Debian, но вроде на него можно накатить dhcpcd, который выдаст например по dhcpcd -T eth0 полную инфу
Форум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.048 секунд. Запросов: 25.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Просмотр и построение таблиц маршрутизации в Linux

Вся цифровая информация передаётся по сети в виде пакетов данных. По пути от отправителя к адресату они проходят через цепочку промежуточных устройств – маршрутизаторов (роутеров) и/или соответственно настроенных компьютеров.
Маршрутизация – это процесс определения пути (сетевого маршрута) для установки соединения между хост-устройствами. Этот путь настраивается как внутри локального устройства, так и на маршрутизаторе.
Построение сетевого маршрута происходит на основе информации из таблиц маршрутизации. Для их формирования применяются протоколы маршрутизации или инструкции сетевого администратора.
Каждая таблица содержит ряд параметров, позволяющих правильно идентифицировать и читать сетевой маршрут. Таблица содержит минимум 5 разделов:
- Destination (Target). IP-адрес сети назначения – конечной цели для передаваемых данных.
- Netmask (Genmask). Маска сети.
- Gateway. IP-адрес шлюза, через который можно добраться до цели.
- Interface. Адрес сетевого интерфейса, по которому доступен шлюз.
- Metric. Числовой показатель, задающий предпочтительность маршрута.
Опционально в таблице также может содержаться следующая информация:
- адрес отправителя (source);
- размер TCP-окна (window);
- максимальная величина пакета (MSS) и типы записей.
Как посмотреть таблицу маршрутизации
Таблицу маршрутизации в Linux (например, в популярных серверных ОС типа Ubuntu или CentOS) можно посмотреть с помощью нескольких команд.
Команда route
Программа используется для настройки параметров статической маршрутизации. Просмотр таблицы можно осуществить с помощью команды:
route -n
Команда netstat
Утилита используется для сбора информации о состоянии сетевых соединений. Вывести таблицу можно с помощью команды:
netstat -r
Построение таблицы маршрутизации
Существует несколько основных утилит для настройки таблицы маршрутизации (добавления, обновления, удаления старых и новых маршрутов):
- Route. Устаревшая утилита, входящая в состав пакета net-tools. Служит для отображения таблицы маршрутизации и построения статических маршрутов.
- IP Route. Обновленный инструмент, призванный заменить Route. Имеет большую функциональность, по сравнению со своим предшественником.
Оба инструмента могут использоваться для выполнения аналогичных задач. Далее будет рассмотрен синтаксис каждого в пределе основных возможностей.
Route
Команда имеет следующий вид:
route [-f] [-p] command -net [destination] netmask [MASK netmask] gw [gateway] metric [METRIC metric] dev [IF interface]
Ключи
- -f – очистка таблиц от записей всех шлюзов.
- -p – сохранение маршрута в качестве постоянного при использовании ADD. По умолчанию все маршруты временные и после перезагрузки системы сбрасываются.
Основные опции (command)
- add – добавление маршрута.
- del – удаление маршрута.
- replace – замена маршрута.
- change – изменение или настройка параметров маршрута.
Обозначения
- [destination] – адрес сети назначения.
- [MASKnetmask] – маска подсети.
- [gateway] – адрес шлюза.
- [METRICmetric] – числовой показатель, задающий предпочтительность маршрута (используется в том случае, если устройство является маршрутизатором).
- [IFinterface] – сетевой интерфейс.
Опции для указания вводных данных
IP Route
Команда имеет следующий вид:
ip route command [destination] netmask [MASK netmask] via [gateway] metric [METRIC metric] dev [IF interface]
Основные опции (command)
- add – добавление маршрута.
- del – удаление маршрута.
- replace – замена маршрута.
- change – изменение или настройка параметров маршрута.
Обозначения
- [destination] – адрес сети назначения.
- [MASKnetmask] – маска подсети.
- [gateway] – адрес шлюза.
- [METRICmetric] – числовой показатель, задающий предпочтительность маршрута (используется в том случае, если устройство является маршрутизатором).
- [IFinterface] – сетевой интерфейс.
Опции для указания вводных данных
- via – используется в значении «через» для указания шлюза.
- dev – сетевой интерфейс.
- netmask – маска подсети.
- metric – метрика.
Примеры статической маршрутизации
Составление нового маршрута
Можно представить два офиса: A и B. В каждом стоят маршрутизаторы на Linux, которые соединены между собой IP-IP туннелем.
Маршрутизатор A имеет IP-адрес — 192.168.1.1, а маршрутизатор B — 192.168.1.2.

Чтобы подключение к локальной сеть маршрутизатора A стало возможным из локальной сети маршрутизатора B и наоборот, нужно прописать на маршрутизаторе B:
route add -net 172.16.10.0/24 gw 192.168.1.1
Будет произведена установка шлюза «192.168.1.1» для сети «172.16.10.0/24».
Также необходимо прописать на маршрутизаторе A обратный маршрут в локальную сеть маршрутизатора B:
route add -net 172.20.0.0/24 gw 192.168.1.2
Изменение локальной сети
В случае изменения локальной сети маршрутизатора B, необходимо удалить старую запись:
route del -net 172.20.0.0/24 gw 192.168.1.2
А после добавить новый маршрут на маршрутизаторе А:
route add -net 172.20.0.0/24 gw 192.168.1.2
Изменение адреса тоннеля
Если на маршрутизаторе B изменится IP-адрес туннеля, то следует также актуализировать адрес шлюза на маршрутизаторе А:
ip route replace 172.16.10.0/24 via 192.168.1.3
После выполнения команды адрес шлюза для подсети «172.16.10.0/24» будет изменён.

Изменение провайдера
Чтобы перенаправить трафик через другого провайдера («ISP2»), следует изменить маршрут «по умолчанию» («default»):
ip route replace default via 5.215.98.7

Надежный хостинг для сайта. 14 дней — бесплатно!
Мы всегда на связи в соцсетях
Поддержка в привычной среде
Мы в Яндекс Кью
- Хостинг для сайта
- CMS хостинг
- VPS сервер
- Удалённый рабочий стол
- Домены
- Стресс-тест на DDoS
Как добавить или сменить шлюз по умолчанию в Linux
wikiHow работает по принципу вики, а это значит, что многие наши статьи написаны несколькими авторами. При создании этой статьи над ее редактированием и улучшением работали, в том числе анонимно, 10 человек(а).
Количество просмотров этой статьи: 72 004.
В этой статье:
Основной шлюз (шлюз по умолчанию) — это IP-адрес вашего маршрутизатора. Обычно он автоматически определяется операционной системой во время установки, но, возможно, вам нужно изменить его. Это особенно актуально, если в сети есть несколько сетевых адаптеров или маршрутизаторов.
Часть 1 из 2:
С помощью терминала
![]()
Запустите терминал. Щелкните по нему на боковой панели или нажмите Ctrl + Alt + T .
![]()
Найдите адрес активного основного шлюза. Для этого введите route и нажмите ↵ Enter . В строке «default» (по умолчанию) отобразится адрес основного шлюза, а назначенный ему интерфейс можно найти в правой части таблицы.
![]()
- Введите sudo route delete default gw IP-адрес Адаптер . Например, чтобы удалить основной шлюз 10.0.2.2 адаптера eth0 , введите sudo route delete default gw 10.0.2.2 eth0 .
![]()
Введите sudo route add default gw IP-адрес Адаптер . Например, чтобы изменить основной шлюз адаптера eth0 на 192.168.1.254, введите sudo route add default gw 192.168.1.254 eth0 . Вам будет предложено ввести пароль пользователя, чтобы выполнить команду.


