Создание точки доступа WiFi на едином интерфейсе в Linux
Я пытаюсь создать точку доступа 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-адрес?
3 ответа
Для всех, кто столкнулся с этой проблемой, проблема была с MAC-адресом. Я запустил интерфейс точки доступа, дал ему mac адрес. Затем после запуска hostapd добавил интерфейс станции, дал ему другой mac-адрес, подключил его к сети и дал IP-адрес станции в качестве шлюза по умолчанию для клиентов через dnsmasq.
Теперь все работает правильно.
Как указывает Diblo Dk, вы можете использовать виртуальные и фиктивные интерфейсы, но hostapd не работает с ними. Я не знаю почему.
Вот шаги:
- отключить службу менеджера сети, так как она мешает работе виртуальных интерфейсов
- выключите wlan0, используя ifconfig wlan0 down
- создайте интерфейс точки доступа с помощью команды iw (типа __ap), назначьте ему другой mac и ip адрес
- включите hostapd на этом интерфейсе доступа
- используйте dnsmasq для назначения подключающихся клиентов на этом интерфейсе, IP-адресов и предоставления шлюза по умолчанию в качестве ip создаваемого интерфейса станции
- включите dnsmasq в интерфейсе доступа. Теперь клиент сможет подключиться к точке доступа и получить IP-адреса.
- создайте новый интерфейс (тип станции), назначьте ему отдельный mac-адрес и подключите его к сети, назначив essid и используя dhclient для получения ip-адреса.
- при необходимости выполните маскировку ip через команду iptables
Настройка фиктивной сети
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 Добавьте поддержку Dummy Net Driver
Перейдите к 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-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Как скомпилировать ядро для новичков: http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html
Создать виртуальный интерфейс
Создать файл 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
...