Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей. |
Маршрутизация в Linux
Выбор 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:
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).