Создание точки доступа WiFi на одном интерфейсе в Linux


14

Я пытаюсь создать точку доступа WiFi или точку доступа на моем ноутбуке с Linux. Я использую Opensuse Kde 12.3.

Я обнаружил программное обеспечение, hostapdкоторое позволяет вам создавать точки доступа, но требует двух интерфейсов. Один подключен к Интернету, а другой - для создания точки доступа ( учебное пособие здесь ). У меня проблема в том, что у меня нет соединения Ethernet. wlanИнтерфейс используется для подключения к Интернету.

Есть ли способ создать точку доступа на том же интерфейсе, который подключен к Интернету (как программное обеспечение connectctify в Windows)? Я думал о создании виртуального интерфейса (как тот, который airmon-ngсоздается для мониторинга Wi-Fi) и использовать его в качестве второго интерфейса. Это возможно?

ОБНОВИТЬ

Вот что я смог сделать до сих пор:

1) Создайте 2 интерфейса (один как станция, а другой как точка доступа)

  iw phy phy0 interface add mySta type station
  iw phy phy0 interface add myAcc type __ap

2) Дайте им отдельный Mac ID

ifconfig myAcc hw ether A4:17:FE:6E:00:53
ifconfig myAcc 192.168.27.1 up

3) запустить hostapd на интерфейсе myAcc

4) запустите dnsmasq для предоставления IP-адреса подключаемым устройствам

Все это работает. Устройства могут подключиться к этой сети и получить IP-адрес. Следующим шагом является предоставление ip маскарадинга

iptables --table nat --append POSTROUTING --out-interface mySta -j MASQUERADE
iptables --append FORWARD --in-interface myAcc -j ACCEPT

Но интерфейс mySta теперь не может подключиться к Интернету. Он может получить Essid, но не может получить IP-адрес.

Команда dhclient mySta не показывает никаких сообщений и через некоторое время выдает ошибку:

ls: cannot access /var/run/netconfig//mySta/: No such file or directory

Может кто-нибудь выяснить, как получить IP-адрес?


Вы пробовали с "поддержкой фиктивного сетевого драйвера" (драйвер ядра) в качестве модуля. Я не могу помочь вам больше, потому что я не знаю openSUSE. Но я вижу, что есть ошибки от версии 11 и выше, когда она собирается с Yast. Так что будь осторожен.
Дибло Дк

Конечно, я могу вам помочь, если это можно сделать теми же способами (настройка ядра, настройка сети), что и в Gentoo, Debian или Ubuntu.
Дибло Дк

Любая помощь будет оценена. Я не использую инструменты Yast как таковые. Конфигурации были из учебника по Ubuntu. Файловая система и конфигурации практически одинаковы.
adityap174

Какая у вас версия ядра?
Дибло Дк

Ядро: x86_64 Linux 3.7.10-1.16-рабочий стол
adityap174

Ответы:


9

Для всех, кто столкнулся с этой проблемой, проблема была с MAC-адресом. Я запустил интерфейс точки доступа, дал ему mac адрес. Затем после запуска hostapd добавил интерфейс станции, присвоил ему другой mac-адрес, подключил его к сети и дал IP-адрес станции в качестве шлюза по умолчанию для клиентов через dnsmasq.

Теперь все работает правильно.

Как указывает Diblo Dk, вы можете использовать виртуальные и фиктивные интерфейсы, но hostapd не работает с ними. Я не знаю почему.

Вот шаги:

  1. отключить службу менеджера сети, так как она мешает работе виртуальных интерфейсов
  2. выключите wlan0, используя ifconfig wlan0 down
  3. создать интерфейс точки доступа с помощью команды iw (типа __ap), назначить ему другой mac и ip адрес
  4. включите hostapd на этом интерфейсе доступа
  5. используйте dnsmasq для назначения подключающихся клиентов на этом интерфейсе, ip-адресов и предоставления шлюза по умолчанию в качестве ip создаваемого интерфейса станции
  6. включите dnsmasq в интерфейсе доступа. Теперь клиент сможет подключаться к точке доступа и получать IP-адреса.
  7. создайте новый интерфейс (тип станции), назначьте ему отдельный mac-адрес и подключите его к сети, назначив essid и используя dhclient для получения ip-адреса.
  8. при необходимости выполните маскировку ip через команду iptables

Проще говоря, WTF hostapd :)
Diblo Dk

Можете ли вы обновить свой ответ с точными шагами, которые вы сделали. Это определенно ответ, который я хотел бы сохранить.
Дибло Дк

обновил :) хочешь подробнее?
adityap174

Крутой способ обойти проблему :)
Diblo Dk

Какой ключ / чипсет вы использовали?
Элвин

2

Настройка фиктивной сети

1 Откройте консоль

su -

2 Проверьте, есть ли у вас фиктивный водитель

modprobe -l | grep /net/dummy.ko

(!) Если у вас нет фиктивного драйвера, перейдите к « Создать модуль ядра ».

3 Загрузить заглушку драйвера

modprobe dummy

(!) Не добавляйте его в автозагрузку, если она не удалась.

4 Проверьте dummy0, подняв его

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

Это даст вам аналогичный вывод.

dummy0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
        inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
        ...

5 Добавьте заглушку в автозагрузку

Отредактируйте системный файл ядра.

nano /etc/sysconfig/kernel

и добавьте " пустышку " в MODULES_LOADED_ON_BOOT.

MODULES_LOADED_ON_BOOT = "..."

Ex. MODULES_LOADED_ON_BOOT = "пустышка vmcp".

6 Настройте параметры сети для dummy0

Создайте файл ifcfg-dummy0.

nano /etc/sysconfig/network/ifcfg-dummy0

Добавьте в файл ifcfg-dummy0:

# Configuration for dummy0
BOOTPROTO=static

# This line ensures that the interface will be brought up during boot.
STARTMODE=onboot

# dummy0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1



Создать модуль ядра

1 Сначала установка необходимых вещей

Откройте YaST.

Перейдите к Software-> Software Management.

Поставить галочку:

Development 

[X] Base Development
[X] Linux Kernel Development
[X] C/C++ Development

2 Вернитесь в консоль и перейдите к исходному коду ядра.

cd /usr/src/linux

3 Импортируйте текущую конфигурацию ядра

zcat /proc/config.gz > .config

4 Откройте ядро ​​menuconfig

make menuconfig

5 Добавьте поддержку фиктивного сетевого драйвера

Перейдите к Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!) Если у вас есть звездочка рядом с «Поддержка драйвера сетевого ядра», вы можете пропустить шаги 7 и 9.

6 Скомпилируйте ядро

make -j(n+1)

Где (n + 1) = количество ядер процессора плюс одно, используемое для ускорения компиляции. Для четырех ядер используйте make -j5.

7 Установите новое ядро

make install

8 Установите модули

make modules_install

9 Загрузите новое ядро

reboot



Определение VIPA (часть о загрузке модуля и ifcfg-dummy0): http://wiki.linuxvm.org/wiki/Defining_a_VIPA
Настройка статических IP-адресов: https://www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3 и установка новых версий ядра Linux с сайта kernel.org: http://forums.opensuse.org/blogs/jdmcdaniel3/opensuse-install-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Как скомпилировать ядро ​​для новичков : http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html


Спасибо за такое подробное объяснение. Я попробовал этот метод. Я смог создать интерфейс dummy0 и начать загрузку. Но как сделать беспроводной интерфейс? iwconfig выдает: dummy0 никаких беспроводных расширений. hostapd не работает с этим. Выдает ошибку: сбой инициализации драйвера
nl80211

Да, проблема в том, что у вас конфликт IP. Но это можно сделать с помощью псевдо-модуля (назначить несколько IP-адресов). Дайте мне немного времени, чтобы найти его для вашей системы.
Diblo Dk

Вы также можете посмотреть здесь linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE Возможно, вы увидите, как это сделать с wlan :)
Diblo Dk

, проблема в том, что вы получите конфликт IP *
Diblo Dk

1

Создать виртуальный интерфейс

Создать файл ifcfg-wlan0: 0

nano /etc/sysconfig/network/ifcfg-wlan0:0

Добавьте в файл ifcfg-wlan0: 0:

DEVICE=wlan0:0

# Configuration for wlan0:0
ONBOOT=yes

# This line ensures that the interface will be brought up during boot.
BOOTPROTO=static

# wlan0:0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1

Команды для активации интерфейса

ifup wlan0:0

Примечание. Выключение основного интерфейса также отключает все его псевдонимы. Псевдонимы могут быть отключены независимо от других интерфейсов.

Проверьте, работает ли интерфейс

ifconfig

Это даст вам аналогичный вывод.

wlan0:0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
         inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
         ...

http://forums.opensuse.org/english/get-technical-help-here/network-internet/461132-os-11-4-network-manager-default-connection-can-handle-virtual-interfaces.html# post2350426


даже это не работает с hostapd. Это выдало ту же ошибку: Не удалось открыть файл / sys / class / net / dummy0 / phy80211 / name: нет такого файла или каталога с dummy0 и не удалось открыть файл / sys / class / net / wlan0: 0 / phy80211 / name: Нет такого файла или каталога с виртуальным интерфейсом. Спасибо за вашу помощь. :) Проблема была с MAC-адресом. Я проголосовал за ваши ответы, и я публикую решение для других.
adityap174
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.