Как узнать default gateway linux

Как узнать шлюз интерфейса? BASH

Подскажите люди добрые, каким кодом можно вывести на табло в терминале эту чудную информацию? )))

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

с ип адресом задача решена таким образом:

теперь надо определить шлюз, и нетмаск в виде 192.168.0.0/24 Но вот познаний в Линукс терминале мало ( Выручайте.

но дефолтных маршрутов может быть несколько

Вопрос к знатокам — а в /proc нигде нет файлов с ip и прочей инфой?

с ип адресом задача решена таким образом: (someshit)

На интерфейсе может быть (и часто бывает) более одного ip-адреса.

Что такое «шлюз интерфейса»? Тебя интересует default gateway? Если да — то их тоже может быть больше одного (с разной метрикой).

Спасибо, помог. Слепил вроде ) Топорно, но под мои нужды сойдёт!

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

ip -o -4 a l eth0 | cut -d » » -f 7 | cut -d / -f 1

А вообще смысл трэда непонятен. Таких тем в сети уже тысячи

Ребят, сам наткнулся на эту тему, решая аналогичную задачу. Рабочего решения для случаев, когда шлюз показывает ни одна из команд ip route, route -n и ifconfig, здесь так и не предложили, к сожалению. Попробую это исправить.

Объясню человекопонятным языком.

Для одних интерфейсов, ifconfig покажет destionation. Для других интерфейсов, ifconfig покажет broadcast, а вот текущий адрес шлюза — фиг. Подозреваю, что вопрос касался именно таких интерфейсов.

В ситуации, когда к компу подключены 10 usb-модемов (да, блин, 2g-gsm/edge местами рулит 🙁 ) с разными интерфейсами, где для одних есть destination, для других broadcast и необходимо агрегировать все соединения, надо обязательно узнать текущие адреса шлюзов всех интерфейсов, чтобы правильно прописать маршруты.Причем, сделать это нужно динамически, скриптом, чтобы не прописывать и не добавлять кучу маршрутов вручную каждый раз.

Собственно, сразу к результатам углубленного ковыряния данного вопроса, без скучного описания самого процессса.

Адреса сохраняются в кеше ARP, получить их можно так: И/или:

Ну и получение непосредственно адреса шлюза:

Методы получения адресов шлюза для других типов интерфейсов приводились выше — обычно, их можно молучить командами типа ifconfig, ip route и route -n. Меня же, интересовал вопрос о том, как получить адрес шлюза интерфейса, который не отображается командами ifconfig, ip route и route -n и надеюсь, что помог(у) этим сообщением хотябы одному человеку на земле 🙂

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

Сразу скажу не Debian, но вроде на него можно накатить dhcpcd, который выдаст например по dhcpcd -T eth0 полную инфу

Источник

Как найти IP-адрес шлюза в Linux

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

Мне нужно получить IP-адрес из приложения командной строки для использования в сценарии оболочки.

Читайте также:  The windows firewall with advanced security

11 ответов

Чтобы распечатать только IP-адрес gw по умолчанию:

Чтобы распечатать информацию о маршруте на всех интерфейсах:

Вы можете получить системный шлюз по умолчанию из вывода netstat -r или route

0.0.0.0 — это ваш шлюз по умолчанию, указывающий на 192.168.1.254 у меня.

Вывод маршрута -n или netstat -rn и поиск пункта назначения 0.0.0.0.

Кто-нибудь ниже этого? =)

это приведет к чистой печати IP-адреса шлюза. (что было бы в сценариях Linux без awk ?)

Если вы хотите получить шлюз из файла интерфейсов:

Моя однострочная команда для получения IP-адреса шлюза по умолчанию:

Откройте терминал в вашей ОС Linux Обычно он находится в верхней или нижней панели, в зависимости от используемого дистрибутива Linux. После того, как вы открыли окно терминала, введите следующие команды «Ip route | grep default » Теперь подождите секунду для вывода и запишите ваш адрес шлюза по умолчанию на экране Адрес вашего шлюза должен выглядеть примерно так: 192.168.1.1. Как только вы это узнаете, вы можете приступить к настройке маршрутизатора через его панель администратора.

Если это не помогло исправить вашу сеть, вам может потребоваться новый маршрутизатор.

Источник

Как определить шлюз по умолчанию

Имеется куча разных интерфейсов с разными видами подключений. Где-то РРРОЕ, где-то обычный Ethernet где-то ВПН, где-то еще какая-то требуха. В общем имеется eth0, eth1:0, eth1:1, br0, ppp0, tun0

Пишу скрипт для манипуляций с траффиком.

Собственно вопрос в следующем: как узнать шлюз по умолчанию на интерфейсах. Если еще с br0 и eth0 я могу чего-то выдрать, то виртуальные интерфейсы у меня не получается. ip route выдает 2 шлюза по умолчанию на eth1. Как, имея в переменной имя интерфейса узнать на нём шлюз по умолчанию

прим.: виндовая команда ipconfig выдает эту информацию для любого интерфейса, а тут какая-то прям беда, к слову:

а внимательно прочесть? я написал что 2 шлюза если интерфейсы виртуальные.

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

А в чём беда, если они будут с разными метриками?

Для начала стоило бы уточнить, какой у тебя дистрибутив.

В CentOS7, например, нет ifconfig вообще. 🙂

Далее, есть просто команда route (не ip route) — можно в неё смотреть, опять же, если у тебя не CentOS7 🙂

Ну и, наконец, шлюз «по умолчанию» — он один. То есть, совсем один.

Через ip route можно сделать несколько разных шлюзов «по умолчанию», но для разных сетей.

«Пишу скрипт для манипуляций с траффиком.»

Я обычно подхожу к вопросу с другого конца: попросту скриптом во временный файл пишу информацию, кто сейчас рутер. Что-нибудь типа:

route add default gw 192.168.219.254 eth0

echo «gw 192.168.219.254» > /tmp/router-ip

echo «eth0» > /tmp/router-iface

Для PPP соединений, рутер можно вообще не указывать, а только интерфейс. Соответственно, и пишем в файлы:

echo «ppp0» > /tmp/router-iface

Можно прям целиком выдергивать и подставлять в команду route, чего париться-то.

Ну и, наконец, шлюз «по умолчанию» — он один. То есть, совсем один.

Все сюда, у нас тут новичок

В том, что наличие второго пораждает нездоровые треды в толкс.

ip route show 0.0.0.0/0

«ip ro get XXXX from iif » дает ответ через какой шлюз будет выполнена передача данных.

Семейство убунты. Релиз, хотя это не существенно Ubuntu 14.04 — 15.04.

Уже ближе, но! опять-таки не работает с виртуальными интерфейсами.

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

Самое близкое что я нашел,

Читайте также:  Using at now linux

а XXXX это, пардон, что такое? кажется мне данная команда — ни что иное, как решение.

«ip route get 8.8.4.4 from 10.0.0.145» дает правильный ответ ?

Забыл, что если from локальный, то iif не требуется

В CentOS7, например, нет ifconfig вообще. 🙂

К сожалению нет..

Как видите, в обоих случаях eth1 вместо (eth1:0 и eth1:1), да и шлюз во втором случае не верный.

По-моему я как-то не так объясняю. Попробую иначе.
Есть ВИРТУАЛЬНЫЙ интерфейс настроенный по dhcp.
Как мне получить адрес, маску и шлюз на этом конкретном интерфейсе?

Я слишком много времени уже ковыряюсь. Пробовал через ip, netstat, ifconfig. бестолку. Чем дальше я лезу, тем сложнее разобраться в той каше информации которую я умудряюсь нагуглить. Уже складывается мнение что шлюз на интерфейсе прописывается не для интерфейса а скорее для таблиц маршрутизации. Но и там я не могу соотнести виртуальные интерфейсы с адресами. Я так понимаю это вообще невозможно без костылей.

У dhcp-клентов обычно дампится информация о полученных настройках. dhcpcd у меня например создаёт /var/run/dhcpcd-ethX.envs со всей информацией.

Как видите, в обоих случаях eth1 вместо (eth1:0 и eth1:1)

Потому что eth1:0 и eth1:1 — это один и тот же интерфейс. ifconfig — это устаревшая утилита, которая показывает далеко не всё и не совсем так, как оно есть на самом деле.

да и шлюз во втором случае не верный

Не верный с какой именно точки зрения?

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

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

«ip ro get» всегда права. Имя физического интерфейса она тебе сказала. алиас — это только дополнительный адрес, а не интерфейс. Как интерфейс его показывают по-старинке и для совместимости со старым софтом.

«ip a sh XXX» даст всю информацию по адресам интерфейса.

шлюз на интерфейсе прописывается не для интерфейса а скорее для таблиц маршрутизации

Шлюз по-умолчанию — это маршрут 0.0.0.0/0. Маршрут привязан к интерфейсу.

я не могу соотнести виртуальные интерфейсы с адресами

Есть физ. адатер (eth0), на нем поднят интерфейс vlan3 (eth0.3) и в этом vlan-е 2 подсети 10.0.0.0/24 и 10.30.0.0/24

В чем сложность ?

Потому что eth1:0 и eth1:1 — это один и тот же интерфейс.

Да причем тут ifconfig. Я знаю что это линки на один интерфейс. Но в роутах и iptables то я пишу именно виртуальные, и мне нужна информация по ним.

Не верный с какой именно точки зрения?

в контексте моего вопроса и текущего треда

Шлюз, как и интерфейс прописываются для маршрута.

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

Я прекрасно понимаю что и зачем нужно. Уже разобрался. Поясняю на пальцах свой же вопрос:

Нужно получить список

для br0 (шлюз для локалки) и для ppp0 (выход через PPPoE) я вообще не уверен, что именно я должен получить.

Как видите, в обоих случаях eth1 вместо (eth1:0 и eth1:1)

man какбэ намекает тебе

The address is a protocol (IP or IPv6) address attached to a network device. Each device must have at least one address to use the corresponding protocol. It is possible to have several different addresses attached to one device. These addresses are not discriminated, so that the term alias is not quite appropriate for them and we do not use it in this document

Читайте также:  City windows and glass

Интерестно, как такой ″/etc/network/interfaces″ приводит к ″nexthop″ в маршрутах.

Но в роутах и iptables то я пишу именно виртуальные,

В смысле? Вы пишите ″iptables -i eth0:1″ что-ли?

2 в данном случае не будет использоваться.

в (1) ядро с определенной вероятностью будет использовать разные шлюзы. вычислить какой будет использоваться для отправки следующего пакета нереально.

а вот 3 и 4 — это правда или ошибка копирования ? Если правда, то разбирайся со своими проблемами сам. src из левой сети для прямого маршрута — это источник странных граблей и проблем на пустом месте. Для косвенных маршрутов — да, пожалуйста, а для прямых — не надо.

Я бы в таком случае отказался от алиасов и использовал бы macvlan-интерфейсы на eth1

2 в данном случае не будет использоваться.

это да, при подъеме обоих виртуальных интерфейсов поднялось и 2 дефолтных, первый переписан, второй просто не удаляется в силу того что мне лень 🙂

Пардон, конечно ошибка. там эти правила при подъеме интерфейса прописались

в (1) ядро с определенной вероятностью.

Я уже понял свою ошибку и некорректность своего вопроса. Ошибка вопроса в том что шлюз это понятие маршрута, а следовательно в понятиях интерфейса, ip адреса, маски — условность. Но так случилось что мне нужно их знать.

Источник

Как найти IP шлюза по умолчанию в Linux

Главное меню » Операционная система Linux » Как найти IP шлюза по умолчанию в Linux

В предыдущей статье мы рассказывали вам о поиске IP-адреса в командной строке Linux. В этом кратком совете мы покажем вам, как найти IP-адрес шлюза по умолчанию в командной строке Linux.

Шлюз работает как вход или дверь между двумя сетями. Маршрутизатор является примером шлюза. Весь ваш трафик идет к маршрутизатору, а затем к остальной части Интернета.

Иногда вам нужно знать IP-адрес вашего маршрутизатора. IP-адрес шлюза – это IP-адрес вашего маршрутизатора при обычной настройке.

Мы собираемся использовать команду IP, чтобы показать IP шлюза в Linux.

Откройте терминал и используйте следующую команду:

Вы должны увидеть результат вроде этого:

Сосредоточьтесь на строке, которая начинается с default. Это даст IP-адрес шлюза по умолчанию.

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

Это просто даст IP-адрес шлюза по умолчанию в выходных данных:

И, как вы можете видеть, 192.168.0.1 является IP-адресом шлюза по умолчанию в нашем случае.

Другие способы найти IP-адрес шлюза в Linux

Команда IP в Linux обеспечивает большинство ваших основных сетевых потребностей. Но, как вы уже заметили, в Linux существует несколько способов сделать определенные вещи.

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

Найти шлюз в Linux с помощью команды route

Вы можете использовать опцию -n с командой route для отображения таблицы маршрутизации с IP-адресами.

Пример вывода должен быть таким:

Обратите внимание на флаги U и G? U означает, что маршрут «вверх», а G означает, что это шлюз.

Показать шлюз в Linux с помощью команды netstat

Чтобы отобразить информацию о шлюзе, вы можете использовать команду netstat и отобразить таблицу маршрутизации, которая также составляет шлюз.

Вывод должен быть идентичен тому, что вы видели с командой route:

Вы можете идентифицировать шлюз с флагом G.

Заключение

Мы надеемся, что этот быстрый совет по Linux помог вам найти IP-адрес шлюза по умолчанию в командной строке Linux. Добавьте этот веб-сайт в ваш ридер для таких регулярных советов и руководств по Linux.

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

Источник

Оцените статью