Таблица ip-маршрутизации

Дополнительные возможности маршрутизации

Я уже упоминал команду Route Print, но существует множество вариантов использования команды ROUTE. Ее синтаксис следующий:

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

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

Командная часть в синтаксисе ROUTE проста. Она может состоять из 4 вариантов: PRINT, ADD, DELETE, и CHANGE. Я уже говорил о команде ROUTE PRINT, но и у нее могут быть варианты. Например можно использовать специальные символы в команде. Если нужно напечатать маршруты для подсети 192.x.x.x, можно воспользоваться командой ROUTE PRINT 192*.

Команда ROUTE DELETE работает также как и ROUTE Print. Просто введите ROUTE DELETE, а следом место назначения или шлюз, который необходимо удалить из таблицы маршрутизации. Например, при желании удалить шлюз 192.0.0.0 введите ROUTE DELETE 192.0.0.0.

Все выше сказанное касается и команд ROUTE CHANGE и ROUTE ADD. При введении данной команды следует определить место назначения, маску подсети и шлюз. Также можно указать метрики и интерфейс. Например, добавить место назначения с простым синтаксисом можно следующим образом:

В данной команде 147.0.0.0 является местом назначения, 255.0.0.0 – маской подсети для места назначения, а 148.100.100.100 – адресом шлюза. Можно расширить команду с помощью параметров METRIC и IF:

Параметр metric необязателен, но он определяет метрику и количество отрезков для маршрута. Параметр IF указывает Windows, какой адаптер использовать. В нашем случае Windows использует сетевой адаптер, который связан с ним в качестве интерфейса 1. При отсутствии данного параметра используется лучший интерфейс.

Добавление альтернативного маршрута для «избранных» хостов

Рассмотрим классический пример, когда в локальной сети необходимо направить избранные хосты по альтернативному маршруту. Предположим, что в локальной сети 10.0.0.0/24 имеется некоторый шлюз с двумя интерфейсами, имеющими IP-адреса 10.0.0.1/24 — смотрит в локальную сеть, 12.13.14.15/24 — смотрит в глобальную сеть. Маршрут по умолчанию проходит через IP 12.13.14.1. При этом необходимо, чтобы хост 10.0.0.100 был направлен по маршруту 12.13.14.100. Для решения этой задачи, необходимо:

Добавить описание  дополнительной  в файл /etc/iproute2/rt_tables (это действие необязательно, можно использовать просто номер таблицы)

# echo 100 newtable >> /etc/iproute2/rt_tables

Добавить , которое будет направлять пакеты с адресом отправителя 10.0.0.100 в описанную на прошлом шаге

# ip rule add from 10.0.0.100 lookup newtable
# # или
# ip rule add from 10.0.0.100 lookup 100
# # после выполнения данной команды список правил примет следующий вид
# ip rule show
0: from all lookup local
32765: from 10.0.0.100 lookup newtable
32766: from all lookup main
32767: from all lookup default

Добавить по умолчанию, отправляющий пакеты на хост 12.13.14.100 в новую

# ip route add default via 12.13.14.100 dev eth1 table newtable
# # после внесенных изменений необходимо очистить кэш маршрутов, чтобы ядро обновило информацию о новых маршрутах
# ip route flush cache
# # после данных изменений таблица newtable (id 100) будет иметь следующий вид
# ip route show table 100
default via 12.13.14.100 dev eth1

Давайте рассмотрим путь пакета, согласно наших правил. Хост 10.0.0.100 отправляет пакет некоторому узлу 7.8.9.10, соответственно, в заголовках пакета источник — 10.0.0.100, назначение — 7.8.9.10. На хосте 10.0.0.100 шлюз по умолчанию — 10.0.0.1, согласно данного правила пакет попадает на шлюз 10.0.0.1. Ядро, получив пакет последовательно с нулевого правила просматривает соответствие пакета заданным в правилах фильтрам/критериям. Пакет подходит под действие правила 0 (0: from all lookup local) и направляется в таблицу маршрутизации local. Но т.к. пакет не принадлежит локальной системе и он не широковещательный, то маршрут в данной таблице не найден и пакет возвращается в RPDB для просмотра следующего правила. Следующее правило на пути пакета —  32765: from 10.0.0.100 lookup newtable. Пакет под критерии данного правила подходит, поэтому направляется в таблицу newtable (id 100). Согласно данной таблицы все пакеты направляются на единственный маршрут по умолчанию — 12.13.14.100. Пакет уходит согласно этого правила на указанный хост. Следующие правила не обрабатываются

Обращаю внимание, что в данном разборе я не учитывал прохождение пакета через

Краткие итоги

В статье я рассмотрел работу механизма Routing Policy DataBase (RPDB) — маршрутизации на основе политик. Я долго вникал в работу этого механизма и постарался изложить свое понимание всего происходящего в ядре. Доходчивой документации на русском языке по данному вопросу в сети я не нашел. Даже всеми хваленый LARTC не дает прозрачного понимания RPDB. Надеюсь, что мои мысли помогут вам понять основные принципы. Подводя итог всему вышесказанному можно свести основной смысл к тому, что пакет в порядке приоритета правил (от 0 до 32767) сверяется с каждым правилом и в случае, если подходит под заданные условия, над пакетом совершается какое-либо действие (обычно отправляется в указанную таблицу). Если пакет в заданной таблице находит свой маршрут, то он отправляется по заданному маршруту. Если не находит — возвращается к списку правил для обработки в следующем правиле. Управление всем этим делом осуществляется командой ip с различными параметрами. В дальнейших статьях я постараюсь рассмотреть более интересные примеры реализации маршрутизации на основе политик. Кроме того, я бы обязательно посоветовал вам почитать приведенные ниже ссылки для более глубокого ознакомления.

Что еще почитать

Хорошая статья о том,ч то такое маршрут по умолчанию — http://xgu.ru/wiki/Маршрут_по_умолчанию
RFC 1394 (что такое TOS и с чем его едят) — http://www.ietf.org/rfc/rfc1349.txt
Обязательно к прочтению (Policy Routing With Linux) — http://www.policyrouting.org/PolicyRoutingBook/ONLINE/TOC.html
Guide to IP Layer Network Administration with Linux — http://www.linux-ip.net/html/
Команда ip на буржуйском от русского автора — http://www.linux-ip.net/gl/ip-cref/
Linux Advanced Routing & Traffic Control HOWTO — http://www.opennet.ru/docs/RUS/LARTC/index.html

How to view or display Linux routing table

Type the following command: OR Sample Outputs:

10.0.31.18 dev ppp0  proto kernel  scope link  src 10.1.3.103 
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.1 
192.168.1.0/24 dev ra0  proto kernel  scope link  src 192.168.1.106 
169.254.0.0/16 dev eth0  scope link  metric 1000 
10.0.0.0/8 dev ppp0  scope link 
default via 192.168.1.1 dev ra0  metric 100

Each entry is nothing but an entry in the routing table (Linux kernel routing table). For example, the following line represents the route for the local network. All network packets to a system in the same network are sent directly through the device ra0:

192.168.1.0/24 dev ra0  proto kernel  scope link  src 192.168.1.106

Our default route is set via ra0 interface i.e. all network packets that cannot be sent according to the previous entries of the routing table are sent through the gateway defined in this entry i.e 192.168.1.1 is our default gateway.

Linux Set Up Routing with ip command and save it to a configuration file

All routing settings made with the ip tool (or route command) are lost when you reboot Linux server. See our previous article about configuring static routes in a Debian/Ubuntu or CentOS/Red Hat Enteprise Linux systems.

How to add a static route on Ubuntu or Debian

Here is a sample for eth0 displayed using the cat command

# The loopback network interface
auto lo
iface lo inet loopback
 
# The primary network interface
auto eth0
iface eth0 inet static
    address 192.168.2.24
    gateway 192.168.2.254

Add a static route on CentOS / RHEL

Create a file named /etc/sysconfig/network-scripts/route-eth0 for interface eth0 and add static route entry: Save and close the file. Restart the networking service: OR

Recommended readings:
  • Debian Linux Configure Network Interface Cards – IP address and Netmasks
  • CentOS / Redhat Enterprise Linux 5 configure network interface card
  • How to setup Linux as a router (iptables configuration)
  • Man pages: route(8)

Получение информации о построенном маршруте

Информация о построенных маршрутах хранится в мультимаршруте. Получить ссылку на этот объект можно с помощью метода :


Скопировано

Метод возвращает , который будет разрешен объектом multiRouter.MultiRoute или отклонен сообщением об ошибке. Мультимаршрут будет содержать ссылки на построенные маршруты.

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


Скопировано

Через объект multiRouter.MultiRoute также можно изменить внешний вид маршрута (например, изменить цвет или толщину линий):


Скопировано

Посмотреть полный код примера


Скопировано

How to Modify a Static Route Entry on Windows 10

Let’s say that after the recent network change, now the network 10.10.10.0 should be routed through 10.10.29.200 gateway. Obviously you have to modify the existing route for this network and change the gateway to 10.10.29.200, how to modify it?

You can’t modify an existing route entry. The simple method is to delete it and add the new route entry. So, in this case, you would perform below commands.

Route delete 10.10.10.0

Route add –p 10.10.10.0 mask 255.255.255.0 10.10.29.200

We hope this simple guide will be helpful in understanding the route add, delete and print commands in Windows 10 client PC and other server Operating Systems. Make sure you open the command prompt or PowerShell as Administrator to perform these commands. If you want to use cosmetic variables to identify the fast hops to reach a network, you can use the metric key as described at Microsoft site here.

View the Windows Routing Table

Before you get started adding routes, it may be helpful to view the routing table first. Fire up Command Prompt by hitting Windows+X and then selecting “Command Prompt (Admin)” on the Power Users menu.

Note: If you see PowerShell instead of Command Prompt on the Power Users menu, that’s a switch that came about with the Creators Update for Windows 10. It’s very easy to switch back to showing the Command Prompt on the Power Users menu if you want, or you can give PowerShell a try. You can do pretty much everything in PowerShell that you can do in Command Prompt, plus a lot of other useful things.

RELATED: How to Put the Command Prompt Back on the Windows+X Power Users Menu

At the Command Prompt, type the following command and hit Enter:

route print

You’ll see a long list of network destinations and the gateways to which packets are forwarded when they are headed to that destination. Unless you’ve already added static routes to the table, everything you see here will be dynamically generated.

Forwarding Information Base

FIB (Forwarding Information Base) contains copy of information that is necessary for packet forwarding:

  • all active routes
  • policy routing rules

By default (when no routing-mark values are used) all active routes are in the main table, and there is only one hidden implicit rule («catch all» rule) that uses the main table for all destination lookups.

Routing table lookup

FIB uses following information from packet to determine it’s destination:

  • source address
  • destination address
  • source interface
  • routing mark
  • ToS (not used by RouterOS in policy routing rules, but it is a part of routing cache lookup key)

Possible routing decisions are:

  • receive packet locally
  • discard packet (either silently or by sending ICMP message to the sender of the packet)
  • send packet to specific IP address on specific interface

Results of routing decision are remembered in the routing cache. This is done to improve forwarding performance. When another packet with the same source address, destination address, source interface, routing mark and ToS is routed, cached results are used. This also allows to implement per-connection load balancing using ECMP routes, because values used to lookup entry in the routing cache are the same for all packets that belong to the same connection and go in the same direction.

If there is no routing cache entry for this packet, it is created by running routing decision:

  • check that packet has to be locally delivered (destination address is address of the router)
  • process implicit policy routing rules
  • process policy routing rules added by user
  • process implicit catch-all rule that looks up destination in the main routing table
  • return result is «network unreachable»

Result of routing decision can be:

  • IP address of nexthop + interface
  • point-to-point interface
  • local delivery
  • discard
  • ICMP prohibited
  • ICMP host unreachable
  • ICMP network unreachable

Rules that do not match current packet are ignored. If rule has action drop or unreachable, then it is returned as a result of the routing decision process. If action is lookup then destination address of the packet is looked up in routing table that is specified in the rule. If lookup fails (there is no route that matches destination address of packet), then FIB proceeds to the next rule. Otherwise:

  • if type of the route is blackhole, prohibit or unreachable, then return this action as the routing decision result;
  • if this is a connected route, or route with an interface as the gateway value, then return this interface and the destination address of the packet as the routing decision result;
  • if this route has IP address as the value of gateway, then return this address and associated interface as the routing decision result;
  • if this route has multiple values of nexthop, then pick one of them in round robin fashion.

Result of this routing decision is stored in new routing cache entry.

Встроенные средства создания и настройки маршрутных таблиц в Linux

Для просмотра текущей таблицы маршрутизации на узле с установленной ОС Linux1 используется команда netstat -r или route:

$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.10.0 * 255.255.255.0 U eth0
default 192.168.10.254 0.0.0.0 UG eth0

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

Все настройки сетевого интерфейса eth0 (в данном случае единственного) хранятся в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-eth0:

DEVICE=eth0
HWADDR=00:1D:60:07:92:28
IPADDR=192.168.10.14
NETMASK=255.255.255.0
BROADCAST=192.168.10.255
ONBOOT=yes

При добавлении второго сетевого интерфейса eth1 с IP-адресом 192.168.11.4 потребуется изменение конфигурации таблицы маршрутизации при помощи утилиты route2:

# route add -net 192.168.11.0 netmask 255.255.255.0 dev eth1

# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.10.0 * 255.255.255.0 U eth0
192.168.11.0 * 255.255.255.0 U eth1
default 192.168.10.254 0.0.0.0 UG eth0

Настройки сетевого интерфейса eth1 заносятся в конфигурационный файл /etc/sysconfig/network-scripts/ifcfg-eth1:

DEVICE=eth1
HWADDR=00:0A:48:05:7B:DB
IPADDR=192.168.11.4
NETMASK=255.255.255.0
BROADCAST=192.168.11.255
ONBOOT=yes

Маршрутизатор сети 192.168.11.0 может быть связан с другой подсетью 192.168.12.0. В этом случае при необходимости настраивается так называемый транзитный маршрут, по которому пакеты, приходящие на eth1 с назначением в подсеть 192.168.12.0, будут перенаправлены на шлюз 192.168.11.1:

# route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.11.1  

# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.10.0 * 255.255.255.0 U eth0
192.168.11.0 * 255.255.255.0 U eth1
192.168.12.0 192.168.11.1 255.255.255.0 UG eth1
default 192.168.10.254 0.0.0.0 UG eth0

Для того чтобы внесенные изменения сохранились после перезагрузки узла, необходимо создать конфигурационный файл /etc/sysconfig/network-scripts/route-eth1, содержащий запись о транзитном маршруте:

192.168.12.0/24 via 192.168.11.1

Для корректной работы двух и более сетевых интерфейсов на одном узле также необходимо в файле /etc/sysctl.conf установить значение параметра net.ipv4.ip_forward равным 1. Последним шагом будет перезагрузка сервиса network:

# /etc/init.d/network restart

1 Здесь и далее под ОС Linux подразумевается дистрибутив CentOS 5.2.

2 Здесь описаны только некоторые команды. Для более подробного изучения см. man route(8).

Построение маршрута с возможностью вызвать такси

Панель маршрутизации позволяет строить маршруты с возможностью вызова такси. На карте показывается схема проезда, а также информация о поездке по данным «Яндекс.Такси» (продолжительность, примерная стоимость). При нажатии на кнопку Заказать такси откроется страница с заданным маршрутом.

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

Чтобы построить маршрут с возможностью вызова такси, в типе маршрутизации нужно указать «taxi»:


Скопировано

Посмотреть полный код примера


Скопировано

Wildcard Routes

Wildcard routes allow a route to respond to dynamic segments of a URI. If a route has dynamic URI segments, they will be passed in to the controller as an associative array of arguments.

Dynamic URI segments can also be limited to match certain requirements.

There are several built in conditions for dynamic segments of a URI.

  • number
  • word
  • alphanum_dash
  • slug
  • uuid

Dynamic segments can also be set as any regular expression such as {id:+}.

For convenience, you can also register your own aliases for a particular regular expression using the method on .

For example:

The above pattern matcher will create an internal regular expression string: , where will interpret to , the variable listed before the colon.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector