
У меня есть Pi с 2 беспроводными интерфейсами, один подключен к сетевому шлюзу, другой действует как точка доступа благодаряhostapd.
На точке доступа не запущено программное обеспечение DHCP или NAT, а просто запущен hostapt, позволяющий нескольким устройствам подключаться к ней.
Я пытаюсь подключить свой ноутбук к этой точке доступа.
При использовании статического IP-адреса и ручного ввода адреса шлюза, DNS и т. д. все работает отлично.
Однако, когда я пытаюсь подключиться с помощью DHCP, это не работает, из Wireshark я вижу, что начальный пакет DHCP Discover отправляется точке доступа при попытке подключения. Однако этот пакет затем не пересылается из интерфейса, подключенного к шлюзу, несмотря на то, что у меня есть программное обеспечение для моста, которое я написал на Python, работающее на Pi.
Программное обеспечение просто отправляет пакеты на противоположный интерфейс, на котором они были получены (чрезмерное упрощение того, что оно делает, но это общая суть для этого сценария, это сетевой мост). Таким образом, интерфейс AP должен получить пакет DHCP и переслать его на шлюз, который должен ответить предложением DHCP и т. д.
Программное обеспечение работает, поскольку я вижу на своем ноутбуке другие сообщения DHCP inform, которые прошли через программное обеспечение моста, а также другие сообщения DHCP discover/offer/request/acks, которые программное обеспечение моста отправляет на мой ноутбук в данный момент, поскольку они являются широковещательными.
Мне интересно, связана ли причина, по которой эти пакеты DHCP Discover не пересылаются на шлюз, с какой-либо настройкой или функцией точки доступа hostapd?
Я уверен, что проблема не в написанном мной коде, поскольку он прекрасно работает для DNS и подобных задач.
Более того, если я вручную создаю пакет обнаружения DHCP, то он без проблем пересылается и выводится интерфейсом, подключенным к шлюзу, пакеты DHCP не пересылаются только тогда, когда они автоматически отправляются моим ноутбуком, пытающимся получить IP-адрес от точки доступа, к которой он пытается подключиться.
Я предполагаю, что точке доступа не нужно предоставлять IP-адрес напрямую, а она может связаться с реальным DHCP-сервером в сети, чтобы назначить его правильно.
Если у кого-то есть идеи, почему пакет поглощается точкой доступа до того, как он может быть перенаправлен на другой интерфейс, пожалуйста, дайте мне знать!
решение1
Я предполагаю, что вы используете WPA2 на стороне "uplink". Это не сработает, так как WPA2 привязывается к MAC-адресу при шифровании. Поэтому ретрансляция пакетов работать не будет.
Вам нужно будет создать что-то с proxy arp или IP-пересылкой.
Если вы попытаетесь изобрести велосипед в Python, не волнуйтесь, все есть в ядре Linux. Но помните: DHCP Discover — это широковещательная рассылка, а ответ — одноадресная рассылка уровня 2 на MAC-адрес отправителя. Так что если вы переведете здесь, вам нужно будет переписать внутри пакетов. Возможно, будет проще поэкспериментировать с настройкой DHCP Relay, поскольку Raspi будет коммутатором, делающим именно это.
Моя первая рекомендация — настроить работу NAT и DHCP-сервера на среднем устройстве, а затем, в качестве второго шага, перейти к более прозрачному среднему устройству.