Linux что такое ip forward

Linux что такое ip forward

Маршрутизация транзитных IP-пакетов (не предназначенных для этого компьютера), или IP-форвардинг, является опциональной возможностью IP-стека Linux. По умолчанию функция форвардинга не активируется, и система не пересылает транзитные пакеты через свои интерфейсы, а только обрабатывает адресованные ей пакеты. Включение форвардинга IP-пакетов производится через параметр net.ipv4.ip_forward интерфейса sysctl . Если значение этого параметра равно 0, то форвардинг отключен, если же значение параметра не равно 0, форвардинг включен:

Кроме того, возможно разрешать или запрещать участие в форвардинге для каждого интерфейса индивидуально:

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

В процессе маршрутизации для выбора интерфейса и следующего узла для доставки пакета (next hop) ядро использует таблицу маршрутизации. Эта таблица представляет список критериев, в соответствии с которыми выбирается следующий узел. В частности, в таблице маршрутизации фигурируют следующие условия: адрес сети получателя пакета, маска подсети получателя пакета, IP-адрес следующего узла, метрика маршрута и служебные поля (например, тип и возраст записи). Таблица маршрутизации используется не только в IP-форвардинге, но и даже при простой отсылке IP-пакета для выбора интерфейса, через который будет производиться отсылка пакета.

Запись о сети с адресом 0.0.0.0 и маской подсети 0.0.0.0 называют маршрутом по умолчанию, или default route. Узел, чей адрес указан в поле gateway для маршрута по умолчанию, называют маршрутизатором по умолчанию, или default gateway или default router. В системе может быть произвольное количество маршрутов по умолчанию, но они должны быть как минимум с разными метриками. Для просмотра таблицы маршрутизации можно воспользоваться командой route. Эта команда позволяет оперировать с таблицей маршрутов, добавляя и удаляя из нее записи.

В данном выводе таблица упорядочена по маске подсети, что соответствует порядку ее просмотра ядром. Столбцы Destination и Genmask содержат адрес и маску сети получателя пакета, столбец Metric фактически указывает приоритет маршрута (маршрут с меньшей метрикой более приоритетен), поле Gateway указывает IP-адрес следующего узла для передачи пакета. Некоторые типы интерфейсов (в частности, интерфейсы типа точка-точка, или point-to-point) подразумевают, что на принимающем конце линии связи всегда находится не более одного узла, и поэтому в этой ситуации IP-адрес следующего узла можно не указывать. В данном случае мы видим, что в приведенном примере некоторые узлы доступны через интерфейс ppp0 типа точка-точка. В частности, именно из-за этого свойства приведенная выше таблица оказывается эквивалентна следующей ниже. Жирным шрифтом помечена измененная строка, демонстрирующая “точечную” природу PPP-соединения:

Специфика использования протокола PPP (обычно используемого при модемых соединениях) такова, что любой PPP-интерфейс является интерфейсом типа точка-точка, более того – PPP и расшифровывается как Point-to-Point Protocol. Также интерфейсами точка-точка являются интерфейсы SLIP (Serial Line IP) и практически все разновидности туннельных интерфейсов.

Читайте также:  Windows блокирует скачанные файлы

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

В большинстве случаев таблица маршрутизации имеет не слишком большой размер, но в некоторых ситуациях (в частности, на шлюзовых машинах в больших сетях) таблица может иметь весьма значительный размер и изменяется не “вручную” с помощью команды route, а специальными программами – демонами поддержки протоколов динамической маршрутизации. С некоторыми упрощениями алгоритм работы этих демонов можно описать следующим образом: демон “слушает” приходящие пакеты для обслуживаемых протоколов динамической маршрутизации, и по получении (или неполучении) такого пакета отдает ядру команду на изменение таблицы маршрутизации.

Следует также заметить, что команда route в режиме вывода таблицы маршрутизации фактически просто фильтрует и форматирует данные, содержащиеся в специальном файле, называемом /proc/net/route, используемом для доступа к таблице маршрутизации, ведущейся ядром.

Источник

Linux что такое ip forward

Многие организации получают у своих провайдеров лишь несколько маршрутизируемых в Интернете IP-адресов. Из-за этого ограничения администраторы вынуждены придумывать способы доступа к Интернет-службам, не требующие назначения реальных IP-адресов каждому узлу локальной сети. Использование частных IP-адресов — это распространенный способ обеспечить доступ к внешним и внутренним сетевым службам для всех узлов локальной сети. Пограничные маршрутизаторы (например, брандмауэры) могут получать данные, передаваемые из Интернета, и маршрутизировать пакеты к целевому узлу в локальной сети. В то же время, маршрутизаторы/брандмауэры также могут маршрутизировать исходящие запросы от локального узла к удалённой Интернет-службе. Такое перенаправление сетевого трафика иногда может быть опасным, особенно, учитывая возможности современных средств взлома, способных подменять внутренние IP-адреса и представлять компьютер злоумышленника узлом вашей сети. Чтобы предотвратить незаконное использование сетевых ресурсов таким образом, iptables предоставляет политики маршрутизации и пересылки пакетов.

Политика FORWARD позволяет администратору управлять тем, как пакеты маршрутизируются в локальной сети. Например, чтобы разрешить маршрутизацию для всей локальной сети (предположим, что брандмауэру/шлюзу назначен внутренний IP-адрес на интерфейсе eth1), можно задать такие правила:

iptables -A FORWARD -i eth1 -j ACCEPT iptables -A FORWARD -o eth1 -j ACCEPT

Это правило даёт компьютерам за брандмауэром/шлюзом доступ к внутренней сети. Шлюз маршрутизирует пакеты от одного узла в локальной сети к целевому узлу назначения, передавая все пакеты через устройство eth1 .

По умолчанию, политика IPv4 в ядре Red Hat Enterprise Linux отключает пересылку IP, что не даёт компьютерам с Red Hat Enterprise Linux выполнять функции маршрутизаторов. Чтобы включить пересылку IP, выполните следующую команду:

sysctl -w net.ipv4.ip_forward=1

Если эта команда исполняется в командной строке, она не будет действовать после перезагрузки. Чтобы пересылка работала постоянно, отредактируйте файл /etc/sysctl.conf . Найдите и отредактируйте следующую строку, заменив 0 на 1 :

Чтобы изменения в файле sysctl.conf вступили в силу, выполните следующую команду:

sysctl -p /etc/sysctl.conf

Разрешение принимать перенаправляемые пакеты через защищенный брандмауэром внутренний интерфейс позволяет узлам локальной сети взаимодействовать друг с другом, при этом обращаться к внешним узлам в Интернете они всё равно не смогут. Чтобы узлы локальной сети с частными IP-адресами могли связываться с внешними сетями, настройте на брандмауэре подмену IP , которая замаскирует узлы локальной сети под IP-адресом внешнего интерфейса брандмауэра (в данном случае, eth0):

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Это правило использует таблицу сопоставления пакетов NAT ( -t nat ) и выбирает встроенную цепочку POSTROUTING для NAT ( -A POSTROUTING ) на внешнем сетевом интерфейсе брандмауэра ( -o eth0 ). Цепочка POSTROUTING позволяет изменить пакеты на выходе из внешнего устройства брандмауэра. Назначение -j MASQUERADE указывается, чтобы замаскировать частный IP-адрес узла за внешним IP-адресом брандмауэра/шлюза.

Если в вашей внутренней есть сервер, который вы хотите сделать доступным снаружи, вы можете, используя назначение -j DNAT цепочки PREROUTING в NAT, указать целевой IP-адрес и порт, входящие пакеты для которого будут перенаправляться внутренней службе. Например, если вы хотите перенаправить входящие HTTP-запросы выделенному HTTP-серверу Apache, работающему на компьютере 172.31.0.23, выполните следующую команду:

iptables -t nat -A PREROUTING -i eth0 -p tcp —dport 80 -j DNAT \ —to 172.31.0.23:80

Это правило определяет, что NAT-таблица использует встроенную цепочку PREROUTING для перенаправления входящих HTTP-запросов исключительно по указанному IP-адресу 172.31.0.23.

Замечание

Если в вашей цепочке FORWARD политика по умолчанию DROP, вы должны добавить правило, перенаправляющее входящие HTTP-запросы с тем, чтобы была возможна NAT-маршрутизация к целевому узлу. Для этого выполните следующую команду:

iptables -A FORWARD -i eth0 -p tcp —dport 80 -d 172.31.0.23 -j ACCEPT

Это правило позволяет перенаправлять входящие HTTP-запросы от брандмауэра к целевому HTTP-серверу Apache, расположенному за брандмауэром.

iptables -t nat -A PREROUTING -i eth0 -p tcp —dport 80 -j DNAT \ —to-destination 10.0.4.2:80

Эта команда маршрутизирует все HTTP-соединения из внешней сети к HTTP-серверу, отделённому от остальной внутренней сети. Такое разделение сети может оказаться безопаснее, чем разрешение HTTP-соединений с компьютерами в локальной сети. Если HTTP-сервер настроен на защищённые соединения, также необходимо перенаправлять порт 443.

Источник

что именно делает? net.ipv4.ip_forward =

net.ipv4.ip_forward = 1 ( echo 1 > /proc/sys/net/ipv4/ip_forward )

если у меня eth1 (192.168.1.1) и eth0 (192.168.2.1), то она разрешит пересылку пакетов из одной сети в другую? если нет, то зачем оно надо? можно по подробнее, зачем оно надо и почему iptables недостаточно?

Что бы вы ни написали в iptables, пока у вас 0 в /proc/sys/net/ipv4/ip_forward, пакеты между сетями пересылаться не будут.

Ключ, разрешающий обмен между сетевыми интерфейсами, так?

>почему iptables недостаточно

по причине безопасности, т.к. во многих дистрибутивах изначально iptables не настроен, что равносильно действию ACCEPT во всех цепочках, включая FORWARD

т.е. у меня пересылка пойдёт в моём примере, если iptables не настроен?

Не пойдет — подсети разные.

Почему нет? Если гейтвей стоит у обеих сетей этот сервак то пойдёт вполне себе.

Ваш Гетвей его и дропнит .. Если конечно у вас обе подсети не весят на одном интерфейсе

Здесь подробнее, пожалуйста. Т.е. гейтвей на 1.1 дропнет перенаправленый пакет из 2.1?

Да. Блокируются все пакеты которые хотят влететь в одну сетевуху а вылетит с другой. всё просто как трусы .. блакировка меж интерфейсами на уровне ядра..

А как тогда работают роутеры, которые два сегмента сети соединяют? По идее они тоже все пакеты должны дропать?

Мы обсуждаем параметр net.ipv4.ip_forward и случай если он отключён Будьте внимательней, если его активировать то пакеты меж сетями станут бегать.

> Да. Блокируются все пакеты которые хотят влететь в одну сетевуху а вылетит с другой. всё просто как трусы .. блакировка меж интерфейсами на уровне ядра..

неверно. в случае, если этот параметр выключен, ОС считает себя узлом IP сети и дропает все пакеты, предназначенные не ей (т.е. destination address которых отличен от IP-адресов, назначенных на интерфейс, на котором получен пакет), в функции ip_input()

если параметр включен, то ОС считает себя маршрутизатором и действует в соответствии с RFC1812, в том числе пытается переслать адресованные не ей пакеты в соответствии с таблицой маршрутизации.

если у тебя пустой(читай — ненастроенный iptables) с дефолтной политикой ACCEPT и стоит ip_forward=1, то да, пойдет пересылка ЛЮБОГО ipv4 трафика, направленного через твою машину

Чего ему его дропать то если ip_forward включен у товарища в топике?

ВНЕМАТЕЛЬНО СТАВИМ И ЧИТАЕМ ВОПРОСЫ

Автор топика какбы просит объяснить зачем оно нужно а не жалуется на не работу сабжа

если нет, то зачем оно надо? можно по подробнее, зачем оно надо и почему iptables недостаточно?

Источник

Как включить/выключить IP Forwarding в Linux

Почти во всех распространенных дистрибутивах IP Forwarding выключен по-умолчанию и это имеет смысл, так как далеко не каждый его использует. Но в том случае, если вы планируете поднять собственный маршрутизатор на ОС Linux, настроить VPN сервер и так далее, вам необходимо включить форвардинг пакетов (маршрутизацию транзитных IP-пакетов, т.е. тех пакетов, которые не предназначены именно для вашего компьютера) в вашей ОС. В данной мини-инструкции я расскажу как это можно сделать:

Проверяем включен или нет IP Forwarding в данный момент

Для проверки в каком состоянии в данный момент находится форвардинг пакетов (включен или выключен), мы должны сделать запрос к ядру через команду sysctl. Делается это так:

В ответ мы получим текущий статус (1 — включен, 0 — выключен)

Временно включаем/отключаем IP Forwarding

Чтобы включить форвардинг пакетов «на лету» и не перезагружать систему, нам достаточно выполнить следующую команду:

Чтобы выключить форвардинг пакетов «на лету» и не перезагружать систему, нам достаточно выполнить следующую команду:

Постоянно включаем/отключаем IP Forwarding в системе

В том случае, если нам необходимо перманентно включить или отключить форвардинг пакетов в системе, нам необходимо внести правки в конфигурационный файл /etc/sysctl.conf

Для перманентного включения IP Forwarding, в конец данного файла добавляем следующую строчку:

Для перманентного отключения IP Forwarding, в конец данного файла добавляем следующую строчку:

. И сохраняем отредактированный файл.

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

Источник

Читайте также:  Lazarus компиляция для linux
Оцените статью
Замечание