Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Проблемы с DHCP: клиент не может получить адрес  (Прочитано 2729 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BSB

  • Автор темы
  • Участник
  • *
  • Сообщений: 239
  • Сама Справедливость
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #15 : 18 Августа 2013, 23:18:53 »
Где в этом правиле вы видите упоминание UDP или TCP? Очевидный ответ - нет, к протоколам IP стека это правило никакого отношения не имеет.

И, (внимание, сюрприз!) DHCP работает по UDP.
Ну ногами не бейте, я только третий день разбираюсь с iptables :)
Тогда, получается, это бесполезные правила? Я-то грешным делом думал, что этим я "отпускаю" трафик без ограничения...

И еще: если я прописал INPUT с 67 для 68 порта, а потом OUTPUT наоборот, то я и для INPUT должен FORWARD делать и для OUTPUT?
« Последнее редактирование: 18 Августа 2013, 23:21:27 от BSB »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #16 : 18 Августа 2013, 23:22:26 »
Без ограничения - я вам сказал ещё когда...
А уважаемый ArcFi даже правило написал.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн BSB

  • Автор темы
  • Участник
  • *
  • Сообщений: 239
  • Сама Справедливость
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #17 : 18 Августа 2013, 23:24:44 »
то есть вот так?
-A INPUT -p udp -m udp -i eth1 --dport 68 -j ACCEPT
-A OUTPUT -p udp -m udp -o eth1 --dport 67 --sport 68 -j ACCEPT
-A FORWARD -i eth1 -p udp -m conntrack --ctstate NEW -m multiport --dports 67,68 -j ACCEPT

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #18 : 18 Августа 2013, 23:24:54 »
Может еще что-нибудь забыл? Потому что так не работает :(
И не будет. Вы ещё раз посмотрите что у вас с iptables.
Код: (text) [Выделить]
:INPUT DROP [954:230773]
-A INPUT -p udp -m udp -i eth1 --dport 68 -j ACCEPT
И на каком порту всё-таки висит dnsmasq, его dhcp'шная часть. По RFC951 - это порт 67/UDP. У вас не видно что бы оно работало там. Почему - см логи (man dnsmasq - -d)
Код: (text) [Выделить]
ss -nulp | grep dnsmasqА тут Вы вообще на ноль помножили
Код: (text) [Выделить]
:OUTPUT ACCEPT [763:211059]
-A OUTPUT -p udp -m udp -o eth1 --dport 67 --sport 68 -j ACCEPT
С FORWARD то же самое.
еще вот тут наводящий вопрос:
-A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -i eth1 -j ACCEPT
эти правила пропускают все UDP и TCP, работающие стандартно, правильно я понимаю? Другими словами, DHCP - единственный протокол, который ответ шлет другим портом?
Эти правила пропускают пакеты с сети источника в цепочках INPUT и FORWARD по любому протоколу, который  использует IPv4. Вам правильно выше заметили, что эти правила для dhcp/bootp бесполезны, т.к IP протокол ещё не испольуется, вернее он инкапсулирован в bootp ( bootp -> udp -> ip) И таки да, клиент и сервер общаются между собой используя разные порты, особенности UDP.
форвардинг в его случае не обязателен?[/url]
Что это значит?
OpenWrt 19.07

Оффлайн BSB

  • Автор темы
  • Участник
  • *
  • Сообщений: 239
  • Сама Справедливость
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #19 : 18 Августа 2013, 23:30:58 »
вот оно что! значит, в данном случае получается не "вместо", а "вместе"?
Что это значит?FORWARD

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #20 : 18 Августа 2013, 23:32:59 »
FORWARD
Не нужно, только для случая, где используется dhcp-relay.
OpenWrt 19.07

Оффлайн BSB

  • Автор темы
  • Участник
  • *
  • Сообщений: 239
  • Сама Справедливость
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #21 : 18 Августа 2013, 23:38:34 »
вот так?
*nat
:PREROUTING ACCEPT [66:8933]
:INPUT ACCEPT [66:8933]
:OUTPUT ACCEPT [14:1710]
:POSTROUTING ACCEPT [14:1710]
-A PREROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
COMMIT

*mangle
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1300:1500 -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1300:1500 -j TCPMSS --clamp-mss-to-pmtu
COMMIT

*filter
:INPUT DROP [954:230773]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [763:211059]
-A INPUT -i lo -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A INPUT -s 192.168.0.0/24 -i eth1 -p tcp -m conntrack --ctstate NEW -m multiport --dports 22,53,80,6543,6544 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -i eth1 -p udp -m conntrack --ctstate NEW -m multiport --dports 53,67,68,123 -j ACCEPT
-A OUTPUT -p udp -m udp -o eth1 --dport 67 --sport 68 -j ACCEPT
-A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -i eth1 -p tcp -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -i eth1 -p udp -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -i eth1 -j ACCEPT

Пользователь решил продолжить мысль 19 Августа 2013, 00:07:44:
Еще (можно я тут тупить продолжу, чтобы не создавать других тем?) в syslog ругается ntpd:
ntpd[1664]: bind(24) AF_INET6 fe80::21b:fcff:febe:9865%3#123 flags 0x11 failed: Cannot assign requested address
ntpd[1664]: unable to create socket on eth1 (10) for fe80::21b:fcff:febe:9865#123
ntpd[1664]: failed to init interface for address fe80::21b:fcff:febe:9865
Ему тоже нужен порт?
« Последнее редактирование: 19 Августа 2013, 00:07:44 от BSB »

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #22 : 19 Августа 2013, 00:20:21 »
BSB, ещё раз: должно быть правило, разрешающее входящие DHCP-запросы без фильтра на IP-источника.

В общем случае, картина выглядит примерно так:

Сервер:
Код: (bash) [Выделить]
# dnsmasq.dhcp.discover-request
-A INPUT -i eth1 -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT
# dnsmasq.dhcp.offer-ack
-A OUTPUT -i eth1 -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT

Клиент:
Код: (bash) [Выделить]
# dhclient.dhcp.offer-ack
-A INPUT -i eth0 -p udp -m conntrack --ctstate NEW -m udp --sport 67 --dport 68 -j ACCEPT
# dhclient.dhcp.discover-request
-A OUTPUT -o eth0 -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT

OUTPUT обычно не фильтруют, только если паранойя одолевает.

***
В вашем случае, чтобы DHCP-сервер мог нормально выдавать аренду, вместо
-A INPUT -s 192.168.0.0/24 -i eth1 -p udp -m conntrack --ctstate NEW -m multiport --dports 53,67,68,123 -j ACCEPT
надо сделать
-A INPUT -s 192.168.0.0/24 -i eth1 -p udp -m conntrack --ctstate NEW -m multiport --dports 53,123 -j ACCEPT
-A INPUT -i eth1 -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT
Кроме того, если на интерфейсе eth0 динамический IP, то также добавить правила для DHCP-клиента.

Оффлайн BSB

  • Автор темы
  • Участник
  • *
  • Сообщений: 239
  • Сама Справедливость
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #23 : 19 Августа 2013, 00:29:45 »
Понятно, спасибо за разъяснения! Есть еще один теоретический вопрос, связанный с уровнем обработки 68-го порта (ebtables), но это я уже сам потихоньку доеду. Главное, что пока всё работает, и спешки особой нет. Единственное, напрягают логи, но с этим тоже потихоньку разберусь.

(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 19 Августа 2013, 00:35:15:
ой, забыл спросить,
Кроме того, если на интерфейсе eth0 динамический IP, то также добавить правила для DHCP-клиента.
- шлюз действительно получает адрес по DHCP. В связи с этим, от кого делать правило - от localhost? Как я обозначу машину, если у неё нет пока адреса?
-A INPUT -s 127.0.0.1 -i eth0 -p udp -m conntrack --ctstate NEW -m multiport --dports 53,123 -j ACCEPT
-A INPUT -i eth0 -p udp -m conntrack --ctstate NEW -m udp --sport 68 --dport 67 -j ACCEPT
-A OUTPUT -p udp -m udp -o eth0 --dport 67 --sport 68 -j ACCEPT
« Последнее редактирование: 19 Августа 2013, 00:35:15 от BSB »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #24 : 19 Августа 2013, 01:23:59 »
Может, хватит уже паранойей страдать?
Паранойя - хорошее качество системного администратора. Пока он не начинает вываливать её на окружающих.

*filter
:OUTPUT ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Всё. DHCP на внешнем интерфейсе будет работать.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн BSB

  • Автор темы
  • Участник
  • *
  • Сообщений: 239
  • Сама Справедливость
    • Просмотр профиля
Re: Проблемы с DHCP: клиент не может получить адрес
« Ответ #25 : 19 Августа 2013, 01:45:15 »
Спасибо вам за терпение! Все работает. Остальное на досуге буду учить и допиливать

 

Страница сгенерирована за 0.019 секунд. Запросов: 22.