Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: IP-шлюз на Linux  (Прочитано 34861 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 31-08-2004 14:00 » 

Требуется Linux-машину использовать в качестве шлюза между двумя сегментами сети (с фильтром). Как это дело настроить?

Имеем route и iptables.

Сколь я понимаю, route обеспечивает перенаправление пакетов. Так как имеется только Destination, то, полагаю, она анализирует исходящие пакеты и отправляет их на gateway (в данном случае, шлюз, который надо создать, и всё это должно работать на клиенте). Не то.

iptables умеет много чего. По умолчанию в таблице filter политики на цепочки INPUT, FORWARD и OUTPUT установлены в ACCEPT и правил не задано, т.е. по идее по умолчанию должно всё проходить. В остальных таблицах также пусто и политики ACCEPT, т.е. файрвол вообще ничего не делает.

Клиенты вообще-то виндовые, и там в качестве шлюза подключения по локальной сети уставновлен IP Linux-машины (имеющей 2 IP, т.е. видна в каждом сегменте).

И оно не работает.

В сетях устанавливаем тишину, имеем 3 машины: шлюз и по клиенту в каждой сегменте.
Добавляем правило
iptables -A INPUT -j LOG --log-level info
Начинаем пинговать с одного клиента другой.
Лог показывает, что на шлюз приходят какие-то пакеты (причём много), но dst равен адресу шлюза, а не клиента в другой подсети.

Мне так казалось, что шлюз должен перехватывать IP-пакеты в чужую подсеть и подменять в них MAC-адрес с отправителя на свой, и форвардить. Только почему-то адрес назначения совсем другой.

Кто-нибудь может объяснить подроно, в чём загвоздка? Как правильно настроить шлюзование в Linux?

(Вообще, эту тему можно и в Windows и в Сети отнести также, если проблема не в Linux, прошу модератора это сделать, если это так).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 31-08-2004 14:11 » 

Поправочка: route не направляет пакеты, а прописывает маршруты. Я лично предпочитаю утилиту ip из пакета iproute - фукциональность выше чем у классической bsd-ишной route.

Чтобы машина пересылала ip пакеты между интерфейсами нужно сначала включить эту фичу.
echo "1" > /proc/sys/net/ipv4/ip_forward
Предупреждаю, что это настройка ядра на ходу и между перезагрузками не сохраняется. Нужно или в загрузочные скрипты помещать, или в дистрибутивах, основанных на Red Hat, записать в /etc/sysconfig/network строку "FORWARDING=yes" .

Как работает iptables - сходи на их сайт http://www.netfilter.org - там доки есть.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 31-08-2004 19:02 » 

У меня основан на Mandrake и в /etc/sysconfig/network есть строка FORWARD_IP4=yes а также строка GATEWAY=0.0.0.0

Почитаем man ip...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 31-08-2004 20:31 » 

dimka, какая строка пишется в настройки зависит только от скриптов: /etc/rc.d/init.d/network , /etc/sysconfig/network-scripts/* и возможны вариации.

GATEWAY=0.0.0.0 означает настройка маршрута по умолчанию. Только, он у тебя не установлен - нужно реальный прописать.

Проверь также на всякий случай /proc/sys/net/ipv4/ip_forward (фиртуальный текстовый файл с одним символом - 0 или 1) и список маршрутов (ip route show, или ip ro sh , или route).

Контролировать прохождение пакетов на роутере можно через tcpdump.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 31-08-2004 20:38 » 

ну... ман не совсем подробен, он всё ж по самой ip, а не по механизму работы. В общем, ip - это маршрутизатор софтовый. Сколь я понял, таблица маршрутизации примерно такая же, как и в route. Т.е. есть dst сети или хосты, куда направляются IP-пакеты. Положим, ip route list возвращает:
Код:

192.168.0.0/24 dev eth0 scope link
192.168.1.0/24 dev eth1 scope link

ну и там ещё про lo.

Как я понимаю, это значит, что всякий приходящий пакет, если он имеет dst адрес из одной из указанных сетей, будет попадать на соответствующий dev. Связи ж, однако, всё равно нету.

Ну и про демон routed почитал, с ним всё равно ничего не работает.

Проблема, кажется, в том, что машина принимает и отправляет только те пакеты, где в dst или src указан её IP, а все посторонние отвергаются. Где можно почитать, как ядро Linux (2.4.20) обрабатывает IP пакеты, в какой последовательности, на каких этапах через какие программы они проходят?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 31-08-2004 20:56 » 

tcpdump показывает, что хост делает ARP-запрос dst адреса, но маршрутизатор НЕ отвечает на него, и, следовательно, не возвращает свой MAC. Где-то я с настройками что-то напутал.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 01-09-2004 07:22 » 

dimka, именно! Все так просто, что не работать может только при неправильной настройке.
Система проста:
1) на рабочих машинах ставишь маршрут по умолчанию - ip-шник роутера внутри сети.
2) на роутере ставишь то, что я уже описывал: маршрут по умолчанию на следующий роутер и включаешь форвардинг пакетов.

Если не выходит, опиши что делаешь.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #7 : 02-09-2004 08:43 » 

dimka, можно сделать проще берём читаем статейку: http://samag.ru/img/uploaded/2003/11/g11.htm надеюсь поможет.
Еще скажы версию дистриба потому как некоторое время назад сменился синтаксис правил настройки сети.
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 02-09-2004 12:25 » 

LogRus, спасибо, конечно, только DHCP и TFTP мне не надо, а о сетях я представление имею, так как CISCO Networking Academy закончил. Меня лишь особенности Linux интересовали, а вышеприведённый пример - упрощение, ситуация в сети на самом деле не такая простая. Проблема выявлена, сейчас проверяю рабочие гипотезы.

RXL, спасибо за наводку на ip и tcpdump.

P.S. Сам то маршрутизатор работает, ибо RIP пакеты шлёт, собака зарыта в настройках сети.

А есть ли софт, который позволяет сетевую карту использоватья в качестве switch... Суть в том, что на 2-м уровне сеть разделена на сегменты, но пересекающиеся  Я шокирован! (это не от меня зависящие настройки). Есть большое желание форвардить ethernet-пакеты, только терзают меня смутные сомнения - может ли сетевая карта принимать не ей адресованные пакеты (кроме бродкастовых). По идее такого быть не должно... Но так как сейчас в картах можно даже MAC сменить через софт, то... а вдруг? Улыбаюсь Самый свич приобрести не предлагать.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Anonymous
Гость
« Ответ #9 : 02-09-2004 12:41 » 

Цитата: dimka
.
может ли сетевая карта принимать не ей адресованные пакеты

Подумай что ты спросил?

Сетевавуха может иметь два и более ip- адреса. Я сейчас от юниха далек. А сюда заглядываю - чтоб квалификацию не потреять Улыбаюсь
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #10 : 02-09-2004 13:21 » 

может просто таблица маршрутизации всё таки плохо настроенна?
Ну малоли всякое бывает Улыбаюсь
Записан

Странно всё это....
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #11 : 02-09-2004 13:32 » 

dimka, по голове не бить! Я так малоли чего.

Кусок из mini-HOWTO

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

Если вы используете Linux машину с двумя сетевыми картами, чтобы установить маршрут между двумя (или более) подсетями, вам нужно иметь ядро, скомпилированное с поддержкой пересылки IP-пакетов (Forwarding). Сделайте следущее:

   cat /proc/ksyms | grep ip_forward

Вы должны получить, что-то вроде...

00141364 ip_forward_Rf71ac834

Если не так, тогда пересылка IP-пакетов не включена в ядро, и вам нужно перекомпилировать и установить новое ядро.

Для примера, позвольте предположить, что вы решили разделить вашу сеть класса C с адресом IP 192.168.1.0 на 4 подсети (в каждой пригодно для использования 62 IP адреса). Однако, две из этих подсетей объединяются в большую сеть, давая в общем три физических сети.

Network      Broadcast   Netmask         Hosts
192.168.1.0   192.168.1.63   255.255.255.192      62
192.168.1.64   192.168.1.127   255.255.255.192      62
182.168.1.128   192.168.1.255   255.255.255.126      124 (см. примечание)

Примечание: последняя сеть имеет только 124 сетевых адреса (не 126, как ожидалось бы от сетевой маски) и является сетью из двух подсетей. Главные компьютеры на других двух сетях интерпретируют адрес 192.168.1.192 как сетевой адрес 'несуществующей' подсети. Подобно они будут интерпретировать 192.168.1.191 как широковещательный адрес 'несуществующей' подсети.

Так, если вы используете 192.168.1.191 или 192 как адреса хостов в третьей подсети, тогда компьютеры двух малых подсетей не смогут связаться с ними.

Это иллюстрирует важный пункт при работе с подсетями - пригодные для использования адреса определяются САМОЙ МАЛОЙ подсетью в том адресном пространстве.
Записан

Странно всё это....
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #12 : 02-09-2004 13:34 » 

Могу дать весь мини. Там есть еще настройка ARP-Proxy.
http://bardak.blood.ru/work/freebsd/shluz.htm

АААААААААААААААААААААААААААААААААА
нет линукса подрукой засада просто.
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 02-09-2004 20:45 » 

Гость, я подумал, что спросил. Я спросил, может ли сетевуха принимать пакеты 2-го уровня, имеющие не её MAC-адрес (если то не бродкаст). Если она аппаратно отфильтровывает их, то есть ли возможность рулить этим программно? Кстати, в Linux видел HowTo про мосты 2-го уровня, так что, скорее всего, может.

LogRus, спасибо, я читал этот HowTo, я в последнем посте не о том спросил. IP - это 3-й уровень, проблема не на нём.

Собственно, тема закрыта, так как отвественный за маршрутизацию в Linux софт и вспомогательные утилиты, и настройки системы я узнал, а дальше идёт специфика, которая к теме UNIX не относится.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #14 : 02-09-2004 21:33 » 

dimka, собственно не за что.  Отлично  А тему закрывать не надо интересно же какое будет решение.
Собствено по моему тебе нужен именно уровень IP, а не ниже. в противном случае это уже какой-то ARP прокси получается.
Может я чего не понял. Может мне опять книжек по сетям почитать, Таненбаума например.

Ядро кстати проверил?
Думается если без использование fw тебе должно быть достаточно настроить таблицу маршрутизации. Этого даже для объедения сетей VPN достаточно.
Записан

Странно всё это....
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 03-09-2004 10:14 » 

dimka, сетевая карта может быть переведена в режим приема всех пакетов. К прмеру, tcpdump может переводить карту в этот режим, что позволяет мониторить непоследственно доступный сегмент сети.

Поддержка ethernet-коммутатора в linux-е есть, но, как правило, в дистрибутивах такие возможности в ядро не включают. В лучшем случае делаю как модуль. Т.е., возможно тебе потребуется пересборка ядра. За одно можно лишнее повыкидывать и нужное включить.
Кстати, в ядре есть возможность фильтрации на сетевом уровне аналогично iptables - arptables.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 03-09-2004 10:35 » 

dimka, в настройках ifconfig есть флаг

Цитата: man ifconfig
      [-]promisc
              Enable or disable the promiscuous mode of the interface.  If selected, all packets on the network will be received by the interface.


При выставленном флаге драйвер будет обрабатывать все кадры Ethernet, а не только те, у которых dst совпадает с одним из МАС адресов карты
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #17 : 08-09-2004 08:11 » 

dimka, А ядро собери сам. Обязательно вчерась конфигурировал ядро и обнаружил что у меня самого эти всякие штуки сетевые отключены нафиг потому что не надо и если у тебя стандартный дистриб ты имеешь все шансы получить ядро подобной конфигурации. еще у некоторых ядер есть возможность посмотреть конфигурацию с которой его собирали причем можно эту инфу скопировать и использовать при сборке нового ядра
файли подобный надо искать в папке /proc помоему файл просто называется config.gz его можно разжать и положить в папку сырцов ядра под имененм .config далее make oldconfig menuconfig
потом make bzImage modules modules_install для сборки
Записан

Странно всё это....
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 08-09-2004 09:47 » 

LogRus, а ядро какой версии?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
@lexB
Гость
« Ответ #19 : 08-09-2004 10:12 » 

ИМХО все намного проще... routed тебе вообще не нужен...
ИМХО2 есть несколько вариантов, пральных и не пральных
пральный  это вот этот тут (если я все правильно понял)

не оч правильный (ИМХО)
допустим имеем 2 сети

192.168.10 на интерфейсе eth0

192.168.2.0 на eth1

надо сделать так чтобы они друг друга видели

на пограничной машине (шлюзе) разрешаем форвардить пакеты

echo "1" >  /proc/sys/net/ipv4/ip_forward

добавляем маршруты

route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
route add -net 192.168.2.0 netmask 255.255.255.0 dev eth1

ну и навсякий случай разрешаем форвардинг

iptables -P FORWARD ACCEPT
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #20 : 08-09-2004 10:27 » 

dimka, у мя 2.6.8 но ваще там насчет сетей мало чего изменилось со времён 2.4
@lexB, ядро надо смотреть на предмет форвардинга и прочего в любом случае(ИМХО).
Записан

Странно всё это....
@lexB
Гость
« Ответ #21 : 08-09-2004 10:45 » 

Цитата: LogRus
dimka, у мя 2.6.8 но ваще там насчет сетей мало чего изменилось со времён 2.4
@lexB, ядро надо смотреть на предмет форвардинга и прочего в любом случае(ИМХО).

а чего его смотреть?
modprobe iptables
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #22 : 08-09-2004 12:07 » 

@lexB, это у тебя так а я всё в ядро зашиваю и модулями не пользуюсь
Записан

Странно всё это....
@lexB
Гость
« Ответ #23 : 08-09-2004 16:43 » 

я iptables вообще не использую... мне он для жопорезного нета не нужен...
да и о том что ядро самосборное речи не было... значит все есть, но только модулями
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 08-09-2004 17:11 » 

LogRus, не, в данном случае @lexB прав. Я то модулями пользуюсь Улыбаюсь. Потому и спросил, что не понял, для чего пересобирать ядро Улыбаюсь

@lexB, "всё проще" - это не тот случай. Просто лишь в той сетевой конфигурации, что я выше описал, на самом деле тут всё по-другому... Да и дело уже не в маршрутизации IP - она то давно заработала...
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #25 : 08-09-2004 17:31 » 

dimka, ясно дело он прав. Улыбаюсь Я к нему всё время пристаю с вопросами типа: "Дядь, а дядь скажи ЧЕ НАХ за фигня такая происходит?" и "хочу ШОБ БУЛО" Улыбаюсь
Записан

Странно всё это....
@lexB
Гость
« Ответ #26 : 09-09-2004 21:48 » 

а что не работает тогда?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines