Опубликован: 26.07.2011 | Уровень: для всех | Доступ: платный
Лекция 10:

Маршрутизация в Linux

< Лекция 9 || Лекция 10: 123 || Лекция 11 >

Выбор IP-адреса для исходящих соединений

Выбор локального адреса для исходящих соединений в большинстве случаев системой осуществляется автоматически, исходя из имеющихся IP-адресов и таблицы маршрутизации (пример 10.3).

Примечание: Во многих случаях сетевое программное обеспечение позволяет указывать исходный адрес с помощью параметров.

Пример 10.3.Выбор исходящего IP-адреса

Пусть система имеет два интерфейса eth0(192.168.1.1/24) и eth1(192.168.56.102/24):

# ip addr show
...
2: eth0:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast 
    state UP qlen 1000 link/ether 08:00:27:23:22:97 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.1.255 scope global eth0
    inet6 fe80::a00:27ff:fe23:2297/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast
    state UP qlen 1000 link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.102/24 brd 192.168.56.255 scope global eth1
    inet6 fe80::a00:27ff:fefd:e5aa/64 scope link 
       valid_lft forever preferred_lft forever

Маршрут по умолчанию у данной системы - 192.168.56.1:

# ip route show
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1 
192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.102 
default via 192.168.56.1 dev eth1

При такой конфигурации для исходящих соединений будет использоваться интерфейс eth1 и IP-адрес 192.168.56.102 (кроме соединений с узлами сети 192.168.1.0/24 — eth0 и IP-адрес 192.168.1.1). Ниже показан дамп сетевого пакета, отправленного командой ping -c 1 192.168.3.4:

# tcpdump -ne -i eth1 host 192.168.3.4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
10:18:18.924084 08:00:27:fd:e5:aa > 0a:00:27:00:00:00, ethertype IPv4 (0x0800),
   length 98: 192.168.56.102 > 192.168.3.4: ICMP echo request, id 960, seq 1, length 64

Однако, если добавить альтернативный маршрут для сети 192.168.3.0/24 через некоторый шлюз 192.168.1.254:

# ip route add 192.168.3.0/24 via 192.168.1.254

то, для пакетов, предназначенных узлу 192.168.3.4, будет использоваться интерфейс eth0 и исходящий адрес 192.168.1.1 (показан дамп сетевого пакета):

# tcpdump -ne -i eth0 host 192.168.3.4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:23:33.393706 08:00:27:23:22:97 > 00:00:00:00:00:aa, ethertype IPv4 (0x0800),
   length 98: 192.168.1.1 > 192.168.3.4: ICMP echo request, id 968, seq 1, length 64

Пример 10.4.Задание исходящего IP-адреса

Синтаксис команды ip route позволяет повлиять на выбор локального IP-адреса при соединении с удаленными системами. Для этого служит параметр src с указанием предпочитаемого IP-адреса (должен быть установлен на сетевом интерфейсе компьютера) для отправки пакетов на направление, определяемое в команде префиксом маршрутизации.

Так, для указанной ниже конфигурации будет использоваться исходящий адрес 192.168.56.102 (кроме взаимодействия с узлами сети 192.168.1.0/24):

# ip addr show eth1
2: eth1:  <BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:fd:e5:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.102/24 brd 192.168.56.255 scope global eth1
    inet 192.168.1.10/24 brd 192.168.1.255 scope global eth1:1
    inet6 fe80::a00:27ff:fefd:e5aa/64 scope link 
       valid_lft forever preferred_lft forever

# ip route show 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10 
192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.102 
default via 192.168.56.1 dev eth1

Для того, чтобы использовать исходный адрес 192.168.1.10 для соединения с узлами сети 192.168.3.0/24 следует использовать команду:

# ip route add 192.168.3.0/24 via 192.168.56.1 src 192.168.1.10 dev eth1:1

Таблица маршрутизации при этом будет иметь вид:

# ip route show
192.168.3.0/24 via 192.168.56.1 dev eth1  src 192.168.1.10 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10 
192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.102 
default via 192.168.56.1 dev eth1

Маршрутизация на основе правил и таблиц

Классические алгоритмы маршрутизации используют только адрес получателя в качестве аргумента при принятии решения какому шлюзу передавать пакет ( маршрутизация по назначению, destination-routing ). Однако в некоторых случаях необходимо использовать другие параметры сетевого пакета: адрес источника, вид и порт транспортного протокола и т. д. ( маршрутизация на основе политик, policy-routing ) [ 45 ] . Маршрутизация на основе политик может использоваться при необходимости отправлять пакеты с разных IP-адресов, для отправки пакетов через разные интерфейсы для различных TCP-портов, балансировки нагрузки между различными Интернет-каналами и т. д. Маршрутизация по источнику (source-based routing)вариант маршрутизации на основе политик, использующий адрес отправителя для принятия решения о маршрутизации.

Управление расширенными функциями маршрутизации в Linux осуществляется путем манипуляции множеством таблиц маршрутизации (ранее в изложении материала предполагалось, что таблица маршрутизации одна) и правилами использования этого множества (rules) [ 27 ] . Правила определяют порядок прохождения пакетов через таблицы. Если в данной таблице пакет соответствует направлению, указанному в какой-либо записи таблицы, то последующие возможные записи и таблицы игнорируются. Поэтому приоритет (номер) правила имеет важное значение.

Для управления списком правил используется команда ip rule. Принцип работы ip rule схож с другими командами ip. Применимы операции просмотра существующих правил ( list ), добавления нового правила ( add ), удаления правила ( del ). Далее в команде необходимо указать селектор выбора пакетов (на основе адреса\сети отправителя\получателя, TOS — типа обслуживания, внутренней маркировки пакетов и т. д.), а затем — действие, которое необходимо выполнить в случае, если пакет соответствует селектору, в частности, перенаправление в указанную таблицу маршрутизации (см. страницу руководства по команде ip ).

По умолчанию в системе Linux присутствуют следующие таблицы маршрутизации:

# ip rule show
0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default

В данном случае любой пакет ( from all ) последовательно будет проходить все таблицы ( local, main, default ) до первого совпадения какой-либо записи.

Таблица local содержит записи локального характера (маршрутизация "внутри" компьютера, широковещательные IP-адреса сегментов, в состав которых входит компьютер и т. д.). Данная таблица формируется автоматически и обычно не требует "ручного" редактирования. Пример таблицы local:

# ip route show table local

broadcast 192.168.1.0 dev eth1  proto kernel  scope link  src 192.168.1.10 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
local 192.168.56.102 dev eth1  proto kernel  scope host  src 192.168.56.102 
broadcast 192.168.56.0 dev eth1  proto kernel  scope link  src 192.168.56.102 
broadcast 192.168.1.255 dev eth1  proto kernel  scope link  src 192.168.1.10 
local 192.168.1.10 dev eth1  proto kernel  scope host  src 192.168.1.10 
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.56.255 dev eth1  proto kernel  scope link  src 192.168.56.102 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1

Таблица main включает основные записи о маршрутизации, с нею работают утилита route и команда ip route без указания таблицы ( ip route show выводит содержимое таблицы main ). Пример таблицы main:

# ip route show table main
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.10 
192.168.56.0/24 dev eth1  proto kernel  scope link  src 192.168.56.102 
default via 192.168.56.1 dev eth1

Таблица default обычно пустая.

Описание существующих в системе таблиц маршрутизации содержится в файле /etc/iproute2/rt_tables:

# cat /etc/iproute2/rt_tables
255  local
254  main
253  default
0  unspec

Для переопределения политики маршрутизации можно создавать дополнительные таблицы маршрутизации и правила отправки пакетов в данные таблицы (пример 10.5).

< Лекция 9 || Лекция 10: 123 || Лекция 11 >
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Сергей Тристан
Сергей Тристан
Россия, Москва
Андрей Фомушкин
Андрей Фомушкин
Россия, Орехово-Зуево