зачем нужна default route?
Смотрю netfilter packet flow : написано, что решение о роутинге принимается после mangle\OUTPUT, то есть после моей маркировки. И мой пакет должен пойти в таблицу 100, а там шлюз есть.
Вопрос – фейковый шлюз в таблице main нужен просто чтоб был?
Ниже тестовый скрипт для проверки в Virtualbox, с одним сетевым интерфейсом типа NAT:
ip ro del default ip ro del default ip ro del default ip ru add fwmark 1 tab 100 ip ro rep default via 10.0.2.2 tab 100 iptables -t mangle -I OUTPUT -j MARK --set-mark 1 ping 8.8.8.8 -c2 # fail! # add fake Gateway to the main Routing table ip ro rep default via 10.0.2.100 ping 8.8.8.8 -c2 # success!!
Bers666 ★★★★★
27.05.20 04:50:23 MSK
На уровне предположения, из-за того что не известно какой исходящий адрес забиндить. Насколько я помню на правила iptables при bind не смотрят. Посмотрите что говорит ip ro get 8.8.8.8. Если было бы правило ip ru add from $LOCALIP lookup 100 тогда бы заработало.
Кастану vel он точно правду расскажет.
anc ★★★★★
( 27.05.20 05:48:26 MSK )
imho, routing decision принимается ДО того, как промаркированный пакет матчится с кастомными правилами маршрутизации. Соответственно, без default route оно работать и не будет.
Anoxemian ★★★★★
( 27.05.20 07:39:26 MSK )
При отправке исходящего пакета, если явно не задан исходящий адрес, ядро пытается его определить исходя из маршрутизации.
Это делается ещё ДО прохождения firewall-а и маркировок, т.к. окончательно пакет у нас ещё не сформирован.
Следовательно маршрутизацию проходит недопакет, у которого есть конкретный адрес получателя, а в качестве исходящего адреса у него 0.0.0.0. Поэтому для него могут сработать только те ip rule, которые не содержат условий по fwmark и конкретному src.
А уже дальше сформированный пакет проходит firewall, может быть промаркирован и снова перемаршрутизирован. При чём при повторной маршрутизации исходящий адрес уже не меняется (даже если маршрут содержит src x.x.x.x), измениться может только исходящий интерфейс и маршрутизатор.
Поэтому у вас правило, отправляющее в таблицу 100, и не срабатывает. Пакет запрыгивает в main, а там нет правила для него — неизвестно куда и как его отправлять.
Шлюз по умолчанию
Шлюз по умолчанию (англ. Default gateway ), шлюз последней надежды (англ. Last hope gateway ) — в маршрутизируемых протоколах — адрес маршрутизатора, на который отправляется трафик, для которого невозможно определить маршрут исходя из таблиц маршрутизации. Применяется в сетях с хорошо выраженными центральными маршрутизаторами, в малых сетях, в клиентских сегментах сетей. Шлюз по умолчанию задаётся записью в таблице маршрутизации вида «сеть 0.0.0.0 с маской сети 0.0.0.0».
Использование
На компьютерах конечных пользователей. За маршрутизацию пакетов отвечают совсем другие машины. Поэтому таблица маршрутизации у них крайне проста и, как правило, состоит из 127.0.0.1(Обратная петля), локальной сети (или её сегмента, в котором рабочая станция находится) и шлюза по умолчанию, на который перенаправляется весь остальной трафик.
На маршрутизаторах. Шлюз по умолчанию позволяет упростить координацию трафика, направляя его на центральные маршрутизаторы. Если «центральных» маршрутизаторов несколько, шлюз по умолчанию может и не указываться (в этом случае при попытке отправить пакет в сеть, для которой нет маршрута, будет возвращаться сообщение no route to host).
Название
Термин «шлюз по умолчанию» применяется в основном в рабочих станциях, где его использование является штатным режимом рабочей станции. В операционных системах Windows также применяется термин «основной шлюз». Термин «шлюз последней надежды» используется в маршрутизаторах, для которых применение такого шлюза является ненормальной ситуацией (маршрутизатор должен знать маршруты для маршрутизируемых пакетов).
См. также
- Маршрутизация
Wikimedia Foundation . 2010 .
19.2 Сетевые шлюзы и маршруты Текст предоставил Coranth Gryphon.
Чтобы некоторая машина могла найти в сети другую, должен иметься механизм описания того, как добраться от одной машине к другой. Такой механизм называется маршрутизацией . «Маршрут» задаётся парой адресов: «адресом назначения» (destination) и «сетевым шлюзом» (gateway). Эта пара указывает на то, что если Вы пытаетесь соединиться с адресом назначения , то вам нужно устанавливать связь через «сетевой шлюз». Существует три типа адресов назначения: отдельные хосты, подсети и «маршрут по умолчанию» (default). «Маршрут по умолчанию» (default route) используется, если не подходит ни один из других маршрутов. Мы поговорим немного подробнее о маршрутах по умолчанию позже. Также имеется и три типа сетевых шлюзов: отдельные хосты, интерфейсы (также называемые «подключениями» (links)) и аппаратные адреса Ethernet (MAC-адреса).
19.2.1 Пример
Для иллюстрации различных аспектов маршрутизации мы будем использовать следующий пример использования команды netstat :
% netstat -r Routing tables Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0
В первых двух строках задаются маршрут по умолчанию (который будет описан в следующем разделе ) и маршрут на localhost .
Интерфейс (колонка Netif ), который указан в этой таблице маршрутов для использования с localhost и который назван lo0 , имеет также второе название, устройство loopback. Это значит сохранение всего трафика для указанного адреса назначения внутри, без посылки его по сети, так как он все равно будет направлен туда, где был создан.
Следующими выделяющимися адресами являются адреса, начинающиеся с 0:e0. . Это аппаратные адреса Ethernet, или MAC-адреса. FreeBSD будет автоматически распознавать любой хост (в нашем примере это test0 ) в локальной сети Ethernet и добавит маршрут для этого хоста, указывающий непосредственно на интерфейс Ethernet, ed0 . С этим типом маршрута также связан параметр таймаута (колонка Expire ), используемый в случае неудачной попытки услышать этот хост в течении некоторого периода времени. Если такое происходит, то маршрут до этого хоста будет автоматически удалён. Такие хосты поддерживаются при помощи механизма, известного как RIP (Routing Information Protocol), который вычисляет маршруты к хостам локальной сети при помощи определения кратчайшего расстояния.
FreeBSD добавит также все маршруты к подсетям для локальных подсетей ( 10.20.30.255 является широковещательным адресом для подсети 10.20.30 , а имя example.com является именем домена, связанным с этой подсетью). Назначение link#1 соответствует первому адаптеру Ethernet в машине. Отметьте отсутствие дополнительного интерфейса для этих строк.
В обеих этих группах (хосты и подсети локальной сети) маршруты конфигурируются автоматически даемоном, который называется routed . Если он не запущен, то будут существовать только статически заданные (то есть введенные явно) маршруты.
Строка host1 относится к нашему хосту, который известен по адресу Ethernet. Так как мы являемся посылающим хостом, FreeBSD знает, что нужно использовать loopback-интерфейс ( lo0 ) вместо того, чтобы осуществлять посылку в интерфейс Ethernet.
Две строки host2 являются примером того, что происходит при использовании алиасов в команде ifconfig (8) (обратитесь к разделу об Ethernet для объяснения того, почему мы это делаем). Символ => после интерфейса lo0 указывает на то, что мы используем не просто интерфейс loopback (так как это адрес, обозначающий локальный хост), но к тому же это алиас. Такие маршруты появляются только на хосте, поддерживающем алиасы; для всех остальных хостов в локальной сети для таких маршрутов будут показаны просто строчки link#1 .
Последняя строчка (подсеть назначения 224 ) имеет отношение к многоадресной посылке, которая будет рассмотрена в другом разделе.
И наконец, различные атрибуты каждого маршрута перечисляются в колонке Flags . Ниже приводится краткая таблица некоторых из этих флагов и их значений:
U | Up: Маршрут актуален. |
H | Host: Адресом назначения является отдельный хост. |
G | Gateway: Посылать все для этого адреса назначения на указанную удаленную систему, которая будет сама определять дальнейший путь прохождения информации. |
S | Static: Маршрут был настроен вручную, а не автоматически сгенерирован системой. |
C | Clone: Новый маршрут сгенерирован на основе указанного для машин, к которым мы подключены. Такой тип маршрута обычно используется для локальных сетей. |
W | WasCloned: Указывает на то, что маршрут был автоматически сконфигурирован на основе маршрута в локальной сети (Clone). |
L | Link: Маршрут включает ссылку на аппаратный адрес Ethernet. |
19.2.2 Маршруты по умолчанию
Когда локальной системе нужно установить соединение с удаленным хостом, она обращается к таблице маршрутов для того, чтобы определить, существует ли такой маршрут. Если удаленный хост попадает в подсеть, для которой известен способ ее достижения (маршруты типа Cloned), то система определяет возможность подключиться к ней по этому интерфейсу.
Если все известные маршруты не подходят, у системы имеется последняя возможность: маршрут «default». Это маршрут с особым типом сетевого шлюза (обычно единственным, присутствующим в системе), и в поле флагов он всегда помечен как c . Для хостов в локальной сети этот сетевой шлюз указывает на машину, имеющую прямое подключение к внешнему миру (неважно, используется ли связь по протоколу PPP, канал DSL, кабельный модем, T1 или какой-то другой сетевой интерфейс).
Если вы настраиваете маршрут по умолчанию на машине, которая сама является сетевым шлюзом во внешний мир, то маршрутом по умолчанию будет являться сетевой шлюз у Вашего провайдера Интернет (ISP).
Давайте взглянем на примеры маршрутов по умолчанию. Вот типичная конфигурация:
Хосты Local1 и Local2 находятся в нашей сети. Local1 подключён к ISP через коммутируемое соединение по протоколу PPP. Этот компьютер с сервером PPP подключён посредством локальной сети к другому шлюзовому компьютеру через внешний интерфейс самого ISP к Интернет.
Маршруты по умолчанию для каждой из ваших машин будут следующими:
Хост | Маршрут по умолчанию | Интерфейс |
---|---|---|
Local2 | Local1 | Ethernet |
Local1 | T1-GW | PPP |
Часто задаётся вопрос «Почему (или каким образом) в качестве шлюза по умолчанию для машины Local1 мы указываем T1-GW , а не сервер провайдера, к которому подключаемся?».
Запомните, что из-за использования PPP-интерфейсом адреса в сети провайдера Интернет с вашей стороны соединения, маршруты для всех других машин в локальной сети провайдера будут сгенерированы автоматически. Таким образом, вы уже будете знать, как достичь машины T1-GW , так что нет нужды в промежуточной точке при посылке трафика к серверу ISP.
В локальных сетях адрес X.X.X.1 часто используется в качестве адреса сетевого шлюза. Тогда (при использовании того же самого примера) если пространство адресов класса C вашей локальной сети было задано как 10.20.30 , а ваш провайдер использует 10.9.9 , то маршруты по умолчанию будут такие:
Хост | Маршрут по умолчанию |
---|---|
Local2 (10.20.30.2) | Local1 (10.20.30.1) |
Local1 (10.20.30.1, 10.9.9.30) | T1-GW (10.9.9.1) |
Вы можете легко задать используемый по умолчанию маршрутизатор посредством файла /etc/rc.conf . В нашем примере на машине Local2 мы добавили такую строку в файл /etc/rc.conf :
Это также возможно сделать и непосредственно из командной строки при помощи команды route (8) :
# route add default 10.20.30.1
Для получения дополнительной информации об управлении таблицами маршрутизации, обратитесь к справочной странице по команде route (8) .
19.2.3 Хосты с двойным подключением
Есть еще один тип подключения, который мы должны рассмотреть, и это случай, когда хост находится в двух различных сетях. Технически, любая машина, работающая как сетевой шлюз (в примере выше использовалось PPP-соединение), считается хостом с двойным подключением. Однако этот термин реально используется для описания машины, находящейся в двух локальных сетях.
В одном случае у машины имеется два адаптера Ethernet, каждый имеющий адрес в разделенных подсетях. Как альтернативу можно рассмотреть вариант с одним Ethernet-адаптером и использованием алиасов в команде ifconfig (8) . В первом случае используются два физически разделённые сети Ethernet, в последнем имеется один физический сегмент сети, но две логически разделённые подсети.
В любом случае таблицы маршрутизации настраиваются так, что для каждой подсети эта машина определена как шлюз (входной маршрут) в другую подсеть. Такая конфигурация, при которой машина выступает в роли маршрутизатора между двумя подсетями, часто используется, если нужно реализовать систему безопасности на основе фильтрации пакетов или функций межсетевого экрана в одном или обоих направлениях.
Если вы хотите, чтобы эта машина действительно перемещала пакеты между двумя интерфейсами, то вам нужно указать FreeBSD на включение этой функции. Обратитесь к следующей главе, чтобы узнать, как это сделать.
19.2.4 Построение маршрутизатора
Сетевой маршрутизатор является обычной системой, которая пересылает пакеты с одного интерфейса на другой. Стандарты Интернет и хорошая инженерная практика не позволяют Проекту FreeBSD включать эту функцию по умолчанию во FreeBSD. Вы можете включить эту возможность, изменив значение следующей переменной в YES в файле rc.conf (5) :
gateway_enable=YES # Set to YES if this host will be a gateway
Этот параметр изменит значение sysctl (8) -переменной net.inet.ip.forwarding в 1 . Если вам временно нужно выключить маршрутизацию, вы можете на время сбросить это значение в 0 .
Вашему новому маршрутизатору нужна информация о маршрутах для того, чтобы знать, куда пересылать трафик. Если ваша сеть достаточно проста, то вы можете использовать статические маршруты. С FreeBSD также поставляется стандартный даемон BSD для маршрутизации routed (8) , который умеет работать с RIP (как версии 1, так и версии 2) и IRDP. Поддержка BGP v4, OSPF v2 и других сложных протоколов маршрутизации имеется в пакете net/zebra . Также существуют и коммерческие продукты, применяемые как более комплексное решение проблемы маршрутизации в сети, такие как GateD ® .
Даже когда FreeBSD настроена таким образом, она не полностью соответствует стандартным требованиям Интернет для маршрутизаторов. Однако для обычного использования такое неполное соответствие достаточно.
19.2.5 Распространение маршрутов
Мы уже говорили о том, как мы задаем наши маршруты во внешний мир, но не упоминали о том, как внешний мир находит нас.
Мы уже знаем, что таблицы маршрутизации могут быть настроены так, что весь трафик для некоторого диапазона адресов (в нашем примере это подсеть класса C) может быть направлен заданному хосту в той сети, которая будет перенаправлять входящие пакеты дальше.
При получении адресного пространства, выделенного Вашей сети, Ваш провайдер настроит свои таблицы маршрутизации так, что весь трафик для Вашей подсети будет пересылаться по PPP-соединению к Вашей сети. Но как серверы по всей стране узнают, что Ваш трафик нужно посылать Вашему ISP?
Существует система (подобная распределению информации DNS), которая отслеживает все назначенные пространства адресов и определяет точку подключения к магистрали Интернет. «Магистралью» называют главные каналы, по которым идет трафик Интернет внутри страны и по всему миру. Каждая магистральная машина имеет копию основного набора таблиц, согласно которой трафик для конкретной сети направляется по конкретному магистральному каналу, и затем, передаваясь по цепочке провайдеров, он достигает вашей сети.
Задачей вашего провайдера является объявить на магистрали о том, что он отвечает за подключение (и поэтому на него указывает маршрут) вашей сети. Этот процесс называется распространением маршрута.
19.2.6 Устранение неполадок
Иногда с распространением маршрута возникают проблемы, и некоторые сайты не могут к вам подключиться. Наверное, самой полезной командой для определения точки неверной работы маршрутизации является traceroute (8) . Она также полезна и когда вы сами не можете подключиться к удаленной машине (то есть команда ping (8) не срабатывает).
Команда traceroute (8) запускается с именем удаленного хоста, с которым вы хотите установить соединение, в качестве параметра. Она показывает промежуточные сетевые шлюзы по пути следования, в конце концов достигая адрес назначения или прерывая свою работу из-за отсутствия соединения.
За дополнительной информацией обратитесь к странице Справочника по traceroute (8) .
19.2.7 Маршрутизация многоадресного трафика
FreeBSD изначально поддерживает как приложения, работающие с многоадресным трафиком, так и его маршрутизацию. Такие приложения не требуют особой настройки FreeBSD; обычно они работают сразу. Для маршрутизации многоадресного трафика требуется, чтобы поддержка этого была включена в ядро:
Кроме того, даемон многоадресной маршрутизации, mrouted (8) , должен быть настроен посредством файла /etc/mrouted.conf на использование туннелей и DVMRP. Дополнительную информацию о настройки многоадресного трафика можно найти на страницах справочной системы, посвящённых даемону mrouted (8) .
Prev | Home | Next |
Сложные вопросы работы в сети | Up | Беспроводные сети |
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ .
По вопросам связанными с FreeBSD, прочитайте документацию прежде чем писать в < questions@FreeBSD.org >.
По вопросам связанным с этой документацией, пишите < doc@FreeBSD.org >.
По вопросам связанным с русским переводом документации, пишите < frdp@FreeBSD.org.ua >.
Настройка оборудования
Блог о модемах, роутерах и GPON терминалах Ростелеком
Что такое шлюз по умолчанию и что он делает?!
Шлюз по умолчанию — «default gateway» — это адрес аппаратного или программного маршрутизатора, который позволяет устройствам в одном сегменте сети отправлять информацию устройствам в другие сети. Для понимания приведу простой пример: Вы открываете какой-то определенный сайт в Интернете, запрос сначала отправляется на ваш шлюз по умолчанию, после чего покидает локальную сеть, уходит в Интернет и достигает нужного узла глобальной сети.
Что значит шлюз установленный по умолчанию
Самым простым вариантом для неподготовленного пользователя будет рассматривать шлюз по умолчанию как посредника между его локальной сетью и глобальной сетью Интернет.
В обычной домашней или офисной сетей, состоящей обычно из одного Wi-Fi роутера и нескольких подключенных к нему устройств: компьютеров, телефонов, планшетов и т.п. Так вот частный «серый» IP-адрес, присвоенный этому маршрутизатору в локалке, является IP-адресом шлюза по умолчанию.
Этот числовой адрес (обычно IPv4 и реже IPv6) на устройствах под управлением ОС Windows и ОС Linux будет называется «шлюзом по умолчанию» или « основной шлюз». На гаджетах Apple под управлением iOS и MacOS, как правило, называется «маршрутизатор». Теперь давайте рассмотрим как определить этот адрес с подключенного устройства.
Как узнать IP-адрес шлюза по умолчанию в Windows 10/11
Начинаем с запуска командной строки. Для этого кликаем правой кнопкой мыши по кнопке «Пуск», чтобы открыть контекстное меню:
Выберите пункт «Терминал» или «Терминал (Администратор)». После этого откроется окно с командной строкой Windows 10 или Windows 11.
и нажмите клавишу «Enter». Вывод будет содержать основную информацию по всем сетевым подключениям операционной системы:
Находим то подключение, используемое для выхода в Интернет, которое смотрит в сторону роутера и смотрим строчку «Основной шлюз» — это и есть шлюз «по умолчанию».
Как определить шлюз по умолчанию в Linux (Ubuntu, RHEL, CentOS)
В операционных системах семейства Linux (Ubuntu, RHEL, CentOS) есть команда, очень похожая на «ipconfig» в ОС Windows даже написанием — «ifconfig». Она так же выводит информацию о сетевых соединениях, но вот шлюз там не отображается. А вот чтобы посмотреть шлюз по умолчанию в Линукс надо ввести другую команду:
Эта команда выведет таблицу маршрутизации.
В ней смотрим первый маршрут в сеть 0.0.0.0/0 . Это так называемый «default route» — маршрут по умолчанию. Так вот адрес в столбце Gateway для этого маршрута — это и будет маршрут по умолчанию.
Где найти шлюз по умолчанию в Android
На смартфонах и планшетах, работающих на ОС Android обычно все данные о сетевом подключении можно найти в свойствах сетевого соединения. Для этого открываем настройки устройства и заходим в подключения. Выбираем сетевое соединение, например Wi-Fi, и открываем его свойства:
Смотрим строку «Роутер» (либо «Маршрутизатор») и смотрим какой там указан IP-адрес. Это и есть шлюз по умолчанию.
Примечание: Не во всех оболочках для Android от разных производителей шлюз отображается в свойствах соединения. Например, скриншот выше — это MiUI от Xiaomi. А вот на One UI от Samsung уже не отображает эту информацию.
Шлюз маршрутизатор на iPhone и MacOS
На ПК и ноутбуках под управлением MacOS посмотреть настройки сети можно в Системных настройках, раздел «Сеть»:
В списке слева выбираем нужное сетевое подключение и смотрим что написано в правой части окна. Нас интересует строка «Маршрутизатор».
На смартфонах Apple iPhone всё примерно так же. Открываем настройки телефона, переходим в настройки Wi-Fi. Напротив названия подключенной сети будет значок информации «i» — нажимаем на него:
Далее откроются основные параметры подключенной беспроводной сети, в том числе информация о соединении — IP-адрес, Маска подсети и Шлюз по умолчанию, который в iOS отображается в строке «Маршрутизатор».