LINUX.ORG.RU
ФорумAdmin

dhcp и iptables


0

1

Полностью закрыл сеть по iptables (закрыл все таблицы), а по dhcp всё равно ip получаю. Насколько я знаю - это видно и по tcpdump, происходит следующий обмен:

Сервер:255.255.255.255:67 <-- Клиент:0.0.0.0:68
Сервер:ip-сервера:67 --> Клиент:ip-клиента_который_будет_ему_выдан:68

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

Так ли это?? Если кто знает подскажите пожалуйста.

★★

и наверное ядро просто посылает пакеты в этот интерфейс не смотря на таблицу маршрутизации.

Какая может быть таблица маршрутизации для broadcast-пакета? Понятно, что указывается интрефейс через который нужно отправить broadcast.

Но получается так что ядро минует и сетевой фильтр

Пакет, а не ядро, минует netfilter. При работе с пакетами через Raw-сокеты до iptables дело не доходит.

mky ★★★★★
()
Ответ на: комментарий от DALDON

mky

При работе с пакетами через Raw-сокеты до iptables дело не доходит.

Могу ошибаться но насколько я знаю в iptables есть raw таблица, в ней я ставил полный запрет, но по dhcp всё работало.

v4567 ★★
() автор топика

iptables-save покажи

anonymous
()
Ответ на: комментарий от v4567

Я не уверен, что raw таблица работает «до» raw-сокетов. Нужно смотреть исходники ядра, мне лень.

в iptables есть raw таблица, в ней я ставил полный запрет,

Ну получается, либо вы писали какие-то неправильные правила, либо raw-сокет вобще не подвластен iptables (даже таблице raw). Причём не факт, что последнее было неизменно, может для разных версий ядер по разному. В man'ах по этому поводу ничего нет.

mky ★★★★★
()
Ответ на: комментарий от v4567

Таблица raw для того, чтобы отсеивать лишнее до connection-tracking'а, это все внутренняя кухня netfilter и с raw-сокетами никак не связано.

anonymous
()

Если что-то не так как хочется проходит через iptables, то «iptables -t raw -A PREROUTING ..... -j TRACE» и «iptables -t raw -A OUTPUT ..... -j TRACE» обычно дают ответ как проходит тот или иной пакет через все цепочки iptables.

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

vel ★★★★★
()
Ответ на: комментарий от srg666

Всем спасибо за ответы.

У меня вопрос к mky

Нужно смотреть исходники ядра, мне лень.

Подскажи реально ли освоить Линукс в качестве программного конструктора. Я Си знаю теоретически, практически писал небольшие консольные программки, но разобраться в исходниках не то что бы ядра, а даже небольших программок не могу. Когда смотрю в исходники, для меня это тёмный лес. Да что там разобраться в исходниках, при компилировании из исходником не могу даже победить ошибки - если они возникают. Реально ли манипулировать исходниками ядра, программ, на уровне файлов, функций в этих файлах, что бы собирать что то своё, по кускам отбрасывая ненужное? Если да то как это освоить? Что ты делал что бы научиться читать исходники? Насколько я знаю это не то что бы очень трудно, а практически не возможно, так ли это? Вот что бы было немного понятней, что я имею ввиду, поясню на примере. В инете есть устройство - часы на avr которые подстраиваются через инет, по протоколу ntp. Программа написана на Си в среде разработки под этот контроллер AVR. Можно сделать следующее, взять из ядра исходники протоколов tcp/ip, ntp и т. д. дописать сами часы и скомпилить всё согласно архитектуре avr - (в ядре ведь есть такая возможность - скомпилить всё под определённую архитектуру). Так вот реально ли это сделать используя ядро линукс как программный конструктор? Если да ток как этому можно научиться? За ответы заранее благодарен.

v4567 ★★
() автор топика
Последнее исправление: v4567 (всего исправлений: 1)
Ответ на: комментарий от v4567

Реально ли манипулировать исходниками ядра, программ, на уровне файлов, функций в этих файлах, что бы собирать что то своё, по кускам отбрасывая ненужное?

Маловероятно. Чтобы понять, что не нужное, нужно хорошо разобраться в коде. Если есть желание, попробуйте начать разбираться с самыми простыми программами, допустим, cat, echo.

Чтобы разобраться с ядром, его исходников не достаточно. ЕМНИП, для 2.0.x ядер была книга «Исходники ядра с комментариями», для 2.4.x было «Kernel hackers guide», для 2.6.x, вроде, тоже было что-то подобное. В общем, нужен текст, описывающий в общем устройство ядра, какие там есть структуры данных, через какие функции проходит сетевой пакет, где точка входа системных вызовов из user-space. А для грамотного написания кода ещё нужно читать lkml или что-то подобное, где расписываются новые особенности ядра, чтобы писать код опираясь на новые интерфейсы, не используя устаревшие (оставленные для совместимости) функции.

Так вот реально ли это сделать используя ядро линукс как программный конструктор?

Реально сделать всё, если повезёт, конечно :-) Просто так взять tcp из ядра не получится, да и не нужен он (ntp работает по udp), но помимо udp нужен ещё ip и, как правило ethernet/arp. Вытаскивая из ядра tcp/udp/ip целиком вы натолкнётесь на функции выделения памяти, которые на уровне ядра реализованы архитектурно-зависимо. Вытащить отдельные функции — расчёт контрольной суммы, анализа заголовка можно, но нужно полностью понимать, что они делают, знать соответствующий данному протоколу RFC.

Компиляцией под заданную архитектуру занимается компилятор, в ядре достаточно мало кода завязано на особенности того или иного процессора. Про микроконтроллеры я знаю мало, разве что одни из них достаточно продвинутые и на них может работать операционная система, у них есть файловая система и программы хранятся в стандарных форматах исполнямых файлов. А другие — слабые и для них компилятор из программы должен делать прошивку строго определённого формата, здесь, вроде как, у gcc бывают трудности.

mky ★★★★★
()
Ответ на: комментарий от mky

Чтобы понять, что не нужное, нужно хорошо разобраться в коде. Если есть желание, попробуйте начать разбираться с самыми простыми программами, допустим, cat, echo.

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

v4567 ★★
() автор топика
Ответ на: комментарий от anonymous

Мне не смешно, я говорил вполне серьёзно. Есть огромное направление по разработке всевозможных устройств на контроллерах - это и системы управления и системы контроля и мониторинга, системы обработки данных и т. д. Основную часть работ занимает написание программы. Написать её можно как я думаю двумя способами:
1. Писать с нуля, если есть возможность то используя библиотеки (если они есть) для используемого контроллера.
2. Брать уже готовое. Я думаю (может конечно я ошибаюсь) лучше ядра линукс и ПО под линукс - нет. Вопрос в другом, что легче, написать с нуля, или разобраться (для того что бы взять код тот что нужно) в коде линукс и ПО под него. Например есть некоторое устройство которое контролирует некоторый процесс, снимает множество параметров. Необходимо осуществить вход на устройство по ssh для просмотра этих параметров. Что бы написать этот кусок кода с нуля необходимо написать следующее: ethernet/arp/ip/tcp/icmp/ssh/openssl, но всё это есть в линукс и ПО.
Вот я и пытаюсь разобраться в коде линукс потому что думаю что легче разобраться чем писать с нуля. Но судя по всему ошибаюсь.......
Аноним - что здесь смешно?????

v4567 ★★
() автор топика
Последнее исправление: v4567 (всего исправлений: 4)
Ответ на: комментарий от v4567

У тебя каша в голове.

Легче разобраться совсем не в перегруженном навороченном реально используемом коде, а:
1 в процессе самостоятельного написания минимального кода по спецификации,
2 или, для начинающего, по пошаговой книжке, где расписана теория, даны примеры реализации, и, опять же, задания для самостоятельного выполнения.

Короче, создай уже тему насчёт этого.

anonymous
()
Ответ на: комментарий от anonymous

В общем поговорил я со знающими людьми и сказали мне следующее. Вынимать отдельные файлы (те что нужны) и лепить из них - ОЧЕНЬ СЛОЖНО! и на это уйдёт ОЧЕНЬ МНОГО ВРЕМЕНИ! Легче всего использовать стандартные средства для сбора и компиляции ядра линукс согласно имеющейся в исходных кодах архитектуре. Но полностью собранное ядро линукс будет работать на серьёзных контроллерах. В общем на слабеньких контроллерах лучше писать с нуля на Си и использовать библиотеки (если они конечно есть) для данного контроллера. Если на контроллере будет работать ядро линукс, то можно собрать ядро, libc, и соответствующее ПО.

v4567 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.