Добавить маршрут умолчанию linux

Linux два маршрута по умолчанию

Эта статья одна из статей про работу сетей в Linux. Вы уже знаете, что все данные в сети передаются в виде пакетов, а чтобы компьютер знал куда нужно отправить тот или иной пакет используются IP адреса. Но пакету, перед тем, как он достигнет точки назначения нужно пройти множество компьютеров и маршрутизаторов.

Каждому из маршрутизаторов нужно знать на какой компьютер передавать пакет дальше. Именно это мы и обсудим в этой статье. Сегодня нас будет интересовать маршрутизация в Linux, как это работает, как настроить правила и заставить все работать как нужно.

Сетевые маршруты в Linux

Как я уже сказал, сетевые маршруты необходимы чтобы компьютеры могли определить по какой цепочке должен пойти пакет, чтобы достигнуть цели. Маршруты можно настроить на уровне интерфейса или маршрутизатора. Когда компьютеру нужно отправить пакет в сеть он смотрит таблицу маршрутизации, в ней указанны ip адреса пунктов назначения и адреса интерфейсов и роутеров в домашней сети, которые могут отправить пакет по нужному адресу. Если для цели маршрут не указан то используется так называемый шлюз по умолчанию или маршрут по умолчанию. Точно такая же картина наблюдается на роутере. Устройство смотрит на IP адрес назначения и сверяет его со своей таблицей маршрутизации, а потом отправляет дальше. Ниже мы рассмотрим как проверить текущие маршруты в системе, а также как настроить новые.

Как посмотреть таблицу маршрутизации

Перед тем как что-либо менять, нужно понять какие правила уже используются. В Linux для этого существует несколько команд. Чтобы посмотреть таблицу маршрутизации можно использовать команду route: Вот так выглядит таблица маршрутизации linux. Тут выводится достаточно простая информация, которой не всегда достаточно чтобы понять суть дела. Более подробно можно посмотреть с помощью команды routel: Тут вы уже можете видеть IP адрес цели (target), IP адрес шлюза (gateway), IP отправителя (source), протокол, и даже сетевой интерфейс. Но самый удобный способ посмотреть таблицу маршрутизации linux — это команда ip: Вывод похож на результат предыдущей команды, но выглядит не совсем привычно, это потому, что вывод команды можно использовать в качестве аргумента для ip route add или ip route del. Это очень удобно. Как вы видите, в качестве шлюза по умолчанию везде используется 192.168.1.1. Рассмотрим подробнее что означает вывод этой команды:

  • default — в данной строке означает вариант по умолчанию. Здесь должен быть ip адрес цели или маска подсети;
  • via 192.168.1.1 — указывает через какой шлюз мы можем добраться до этой цели, у нас это 192.168.1.1;
  • dev enp2s0 — сетевой интерфейс, с помощью которого будет доступен этот шлюз;
  • proto static — означает, что маршрут был установлен администратором, значение kernel значит что он был установлен ядром;
  • metric — это приоритет маршрута, чем меньше значение — тем выше приоритет.
Читайте также:  Обновление кали линукс через терминал до последней версии

А теперь рассмотрим выполняется настройка маршрутов Linux.

Настройка маршрутов в Linux

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

ip route add default via 192.168.1.1

Так вы можете добавить маршрут для любого IP адреса, например, для 243.143.5.25:

sudo ip route add 243.143.5.25 via 192.168.1.1

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

В операционных системах семейства Red Hat используются конфигурационные файлы /etc/sysconfig/network-scripts/route-ethX. Каждый файл может описывать несколько маршрутов, например:

GATEWAY=10.10.0.1
NETMASK=255.0.0.0
IPADDR=10.10.0.22

Здесь gateway — шлюз по умолчанию для этого интерфейса, netmask — маска сети, а ipaddr — ip адрес интерфейса. В Debian и основанных на нем дистрибутивах можно настроить маршруты в файле /etc/network/interfaces. Здесь команда route добавляется в секцию iface. Например:

up route add -net 10.10.0.0 netmask 255.0.0.0 gw 10.10.0.1

С помощью опции -net мы указываем целевую сеть, netmask — это маска сети, а gw — шлюз. Все очень просто. Теперь добавленные маршруты останутся даже после перезагрузки.

Выводы

В этой небольшой статье мы кратко рассмотрели как работает маршрутизация в Linux, как выполняется настройка маршрутизации в linux, а также зачем это нужно. Надеюсь, эта информация была полезной для вас.

Linux два маршрута по умолчанию

Linux. Несколько сетевых маршрутов по умолчанию

Наличие нескольких сетевых интерфейсов (больше, чем одна сетевая карта) на ПК под Linux — само по себе не проблема. Но если несколько из них смотрят в Интернет, то маршрутизация по умолчанию заворачивает весь внешний трафик через тот интерфейс, который имеет более высокий приоритет. Если приоритет не указан, то при старте система выберет сетевой интерфейс по умолчанию и будет блокировать весь внешний трафик на всех остальных интерфейсах. Например, в Debian Stretch (Gnome, KDE) Network Manager вообще не даёт поднять более чем один интерфейс. Их можно переключать в один клик, но одновременно они работать не будут.

Читайте также:  Ошибка отключения файловой системы linux

К счастью во всех современных дистрибутивах есть программа «iproute2». И скорее всего она уже установлена по умолчанию в вашем дистрибутиве.

Пример: В системе две сетевые карты и обе смотрят в Интернет, но подключены к разным провайдерам (роутерам, модемам, или что-то подобное). Нужно удалить Network Manager, отредактировать файл /etc/network/interfaces. В примере у нас два внешних интерфейса eth0 и eth1. Следует уточнить идентификаторы интерфейсов с помощью команды «ifconfig» (или в случае с Debian Stretch «ip a»). В выдаче видим что-то подобное:

Исходя их этого приводим /etc/network/interfaces к следующему виду:

Где «metric» указывает на приоритет интерфейсов. В моём примере eth1 имеет более высоки приоритет. Так что по умолчанию весь внешний трафик идёт через этот интерфейс.

В файле /etc/resolv.conf укажите адрес DNS-сервера. Пример:

Стоит обратить внимание на то, что Network Manager заполняет и переписывает этот файл на своё усмотрение. Так что перед правкой /etc/resolv.conf убедитесь, что Network Manager удалён и система была загружена без его участия. А так же в том ,что больше никакая программа не изменяет этот файл. Иначе изменения не сохранятся.

В моём примере мне нужно чтоб BitTorrent клиент соединятся с пирами через интерфейс eth0, который в моей конфигурации имеет более низкий приоритет. BitTorrent — всего лишь пример. Это может быть IPTV плеер или нечто подобное, где в настройках можно указать сетевой интерфейс принудительно. Но из-за маршрутизации по умолчанию трафик будет блокироваться на интерфейсе с более низким приоритетом.

Добавляем несколько строк в конфигурацию интерфейсов.

Строки «post-up ip» — настройка маршрутизации. «rt2» — дополнительная таблица маршрутов. На неё указывает файл /etc/iproute2/rt_tables. Его следует отредактировать и в самый низ добавить строку «1 rt2». Должно получиться что-то подобное:

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

Если по каким-то причинам вам не нужно чтоб подобная маршрутизация была постоянной, не добавляйте строки «post-up ip» в /etc/network/interfaces и используйте команду «ip route add» для того, чтоб установить эту маршрутизацию вручную. Пример:

Проверить конфигурацию можно следующими командами:

Если видите что-то похожее, то всё работает. Команда «ip route» покажет все актвны маршруты.

Несколько маршрутов по умолчанию

Добрый день. Тут производственная задача — проверять время от времени, живой ли у нас резервный канал, пытаюсь вот сделать, и что-то не получается — подскажите, пожалуйста, в чём тут проблема.

2 openvpn-сети: 10.17.17.0/24 и 10.17.30.0/24, по умолчанию траффик идёт через 10.17.30.1, резервный шлюз, соответственно — 10.17.17.20.

Как я собираюсь решить задачу:iptables транслирует, например, 888-й порт в 80-й и ставить метку, а с помощью iproute2 по этой метке юзать отдельную таблицу с дефолтным маршрутом через 10.17.17.20. Конфигурация:

Читайте также:  Как сменить ip на сервере linux

Коннект проверяется с помощью «nc -z 93.158.134.11 888 ». Глухо. tcpdump на 10.17.17.20 почему-то показывает, что пакеты идут с адреса 10.17.30.3 — мистика!

Очевидно, что проблема в src IP исходящих пакетов. Из-за него трафик не идёт т.к. 10.17.17.20:

  1. скорее всего не имеет [обратного] маршрута до сети 10.17.30.0/24
  2. не делает SNAT для пакетов от 10.17.30.3 (адрес не подпадает под 10.17.16.0/22)

Вопрос в том как повлиять на выбор src IP. Наверняка я не знаю, но моя теория такова: исходя из правил по адресу http://linux-ip.net/html/routing-saddr-selection.html ядро выбирает src IP согласно таблицам маршрутизации, но на этот момент netfilter ещё не участвует в процессе и поэтому правило с fwmark не срабатывает и выбирается адрес 10.17.30.3. Потом пакет проходит через netfilter, ему делается DNAT и навешивается mark. Далее опять происходит роутинг (согласно https://www.frozentux.net/iptables-tutorial/chunkyhtml/c962.html#TABLE.SOURCE. ) и на этом шаге выбирается уже правильный маршрут, но src IP уже не меняется.

Отсюда напрашивается вывод, что использование fwmark для локального трафика не очень-то удобно.

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

Источник

Настройка маршрута по умолчанию в Linux

img

В статье мы покажем, как использовать команды маршрутизации в Linux (в UNIX подобных системах) чтобы отображать или конфигурить информацию о дефолтных маршрутах. Погнали разбираться!

Настройка маршрута по умолчанию в Linux

Показать маршруты по умолчанию

Ловите 2 команды, которые помогут отобразить текущую таблицу маршрутизации в Linux:

Вывод такой команды будет примерно следующим:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 * 255.255.255.0 U 0 0 0 ra0 default dsl-router 0.0.0.0 UG 0 0 0 ra0

Или можно использовать второй вариант:

”Выхлоп” такой команды в той же самой таблице маршрутизации:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 191.255.255.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U 0 0 0 eth0 default 191.255.255.1 0.0.0.0 UG 0 0 0 eth0

Настройка дефолтного маршрута

Синтаксис настройки категорически прост. Смотрите:

  • IP-АДРЕС — IP — адрес шлюза;
  • ИНТЕРФЕЙС — имя интерфейса, за которым сидит указанный выше шлюз;

Например, если IP — адрес вашего роутера 192.168.1.254 и он сидит на интерфейсом eth0, то из под root выполните команду:

# route add default gw 192.168.1.254 eth0

Или можно использовать хостнейм (только проверьте, чтобы он резолвился на уровне DNS):

# route add default gw dsl-router eth0

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

# ip route add 192.168.1.0/24 dev eth0

Либо вместо eth0 интерфейса можно прописать в явном виде адрес шлюза. Тут ап ту ю, как говорится 🙂

# ip route add 192.168.1.0/24 via 192.168.1.254

Источник

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