0,0
рейтинг
28 июня 2011 в 20:35

Администрирование → Временное переключение WIFI в режим точки доступа

Представьте, что вы поехали в другую страну, у вас собой есть смартфон и вам очень нужно зайти с него в интернет (например синхронизировать контакты или поставить какой-то софт). Какие есть варианты?
— Первый вариант — это мобильный интернет. К сожалению, это не всегда просто и не всегда дёшево.
— Второй вариант — WIFI. Вам повезло, если вы можете подключиться к WIFI там, куда вы прибыли, и в этом случае задача уже решена.
— Третий вариант — LAN. А что если у нас есть только LAN? Самое простое — это захватить с собой из дома небольшую точку доступа, но что если вы её не взяли с собой или у вас её нет? В этос случае вам поможет случайно захваченный с собой ноутбук или нетбук :)

Имеем


— EeePC 901 с Ubuntu 10.10
— Смартфон
— Локальная сеть

Задача


— Получить доступ в сеть со смартфона используя WIFI

Решение


Данное решение выработано исходя из того, что иметь постоянно настроенный и включенный WIFI на нетбуке в режиме точки доступа не является целесообразным, поэтому реализовано оно в виде скрипта, который включает этот режим временно.

Для решения задачи нам потребуются:
— hostapd — обеспечивает работу сетевой карты в режиме точки доступа
— dnsmasq — выступает в качестве DHCP и DNS сервера
— скрипты install.sh и start.sh для автоматизации процесса

Первый скрипт поможет установить необходимые пакеты.

install.sh
#!/bin/bash

# Install wifi hotspot daemon and dns/dhcp server
sudo apt-get install hostapd dnsmasq
# Stop installed services
sudo service hostapd stop
sudo service dnsmasq stop
# Disable autostart on boot
sudo update-rc.d hostapd disable
sudo update-rc.d dnsmasq disable


А это минимальный конфиг для hostapd.

/etc/hostapd.conf
# Define interface
interface=wlan0
# Select driver
driver=nl80211
# Set access point name
ssid=laptop-wifi
# Set access point harware mode to 802.11g
hw_mode=g
# Set WIFI channel (can be easily changed)
channel=6
# Enable WPA2 only (1 for WPA, 2 for WPA2, 3 for WPA + WPA2)
wpa=2
wpa_passphrase=wifipass


Минимальный конфиг для dnsmasq.

/etc/dnsmasq.conf
# Bind to only one interface
bind-interfaces
# Choose interface for binding
interface=wlan0
# Specify range of IP addresses for DHCP leasses
dhcp-range=192.168.150.2,192.168.150.10


И второй скрипт, который переводит сетевую карту в режим точки доступа и обратно.

start.sh
#!/bin/bash

# Start
# Configure IP address for WLAN
sudo ifconfig wlan0 192.168.150.1
# Start DHCP/DNS server
sudo service dnsmasq restart
# Enable routing
sudo sysctl net.ipv4.ip_forward=1
# Enable NAT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Run access point daemon
sudo hostapd /etc/hostapd.conf

# Stop
# Disable NAT
sudo iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
# Disable routing
sudo sysctl net.ipv4.ip_forward=0
# Disable DHCP/DNS server
sudo service dnsmasq stop


Использование



К вы наверное уже догадались, использовать данное решение очень просто. Итак, подготовка.
1. Запускаем install.sh.
2. Создаём файл конфигурации с нашими параметрами /etc/hostapd.conf.
3. Подменяем установленный файл конфигурации /etc/dnsmasq.conf нашим, который описан выше.

А теперь использование! Для того, чтобы перевести сетевую карту в режим точки доступа необходимо:
1. Отключить «Беспроводную сеть» (Wireless network) щёлкнув правой кнопкой мыши на аплете Network Manager-а в системном трее.
2. Запустить скрип start.sh. Останов работы скрипта сопровождается отключением сервера точки доступа, а так же DHCP/DNS сервера.

Результат: у вас появится точка доступа с авторизацией по WPA2 именем laptop-wifi и паролем wifipass.

Решение было протестировано на Ubuntu 10.10, но может быть легко адаптировано под другой релиз Ubuntu или другой дистрибутив. В связи с ближайшей поездкой за границу производилась попытка найти готовое ПО реализующее данный функционал, но она не увенчалась успехом. В связи с этим и родилось вышеописанное решение.

Приятных экспериментов!
Donations are welcome.

UPDATE:
— Обновлённый скрипт на GitHub https://github.com/giner/helplinux/tree/master/scripts/wifi-host-ap
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (59)

  • +7
    Хороший скрипт. На всякий случай если надо то же, но под win — используйте Connectify.
    • 0
      Да, отличная софтинка, тоже часто пользуюсь!
    • 0
      она работает под 7?
      • 0
        Да. Отлично работает.
        На самом деле можно всё решить скриптами, но софтина удобнее.
        • 0
          блин, неправильно выразился. она работает только под 7?
          есть что-либо подобное под виста/server?
    • +3
      Использую Virtual Router. Она без рекламы :)
      • 0
        И оно open source! Спасибо за наводку.
    • +2
      Можно и без подобных программ на вин 7 обойтись — только штатными средствами. Очень удобно, тк шустрее все работает.
    • +1
      Ят такое проворачивал в Windows (по крайней мере Vista) без софтин.
      баловался, когда нужно было джейлбрейкить iphone 1 gen.

      Сам даавно убунтувод
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    Спасибо, хотя для поставленной задачи мне кажется более логичным Internet Connection Sharing
    • +1
      На сколько я помню оно не может перевести WIFI в режим точки доступа.
  • +4
    В ubuntu раздать интернет на смарт можно в несколько кликов = nm-applet>create new wireless connection>create
    Соединение будет в режиме adhoc.
    • 0
      Хм, сейчас попробуй сможет ли смартфон подключиться в adhoc.

      PS: Был однажды в гостях, если можно так сказать (couchsurf-ил). Там был всего один LAN и три человека с ноутбуками. В режим adhoc несколько клиентов подключить нельзя. Настроил нетбук на раздачу, но тогда у меня ушло довольно много времени на настройку, и пол года созревала мысль этот процесс красиво автоматизировать.
      • 0
        Кстати, поройте ещё на тему брандмауэра, раз всё равно iptables настраиваете, а то у Вас все входы открыты.
        • 0
          Для безопасности я лишь сделал биндинг DHCP на одну сетевую карту, чтобы наружу эти порты не светились. Что на счёт остального, так в установке Ubuntu по-умолчанию ничего наружу не смотрит.

          Но вы правы, лишним это точно не будет.
      • 0
        Как это нельзя? У меня прекрасно работала Ad-Hoc сеть из шести ноутов и одного коммуникатора.
        • +1
          Не все драйверы смартфонов и особо древних ноутов такое держит. Например в htc hero без танцев адхук не включить
          • 0
            Про Hero — очень странно. HTC Touch2 прекрасно пахал.
            А так да, не все умеют.
        • 0
          Хм, а вы правы. Почитал на Wikipedia, действительно может подразумеваться соединение нескольких устройств, но, на сколько я понял, вероятность проблем выше чем с «Master» <-> «Managed».
    • +2
      А ещё плюс к этому нужен NAT, DHCP и DNS :)
      • 0
        Ну да, adhoc заменяет только hostapd.
      • –1
        все это есть в стандартной убунте
        • 0
          В каком смысле?
    • +1
      У этого варианта есть один плюс — он работает с WiFi-модулями, которые не поддерживают режим точки доступа (AKA master-mode), но есть и минусы — смарт может быть только один.
  • +1
    Можно вкратце плюсы и минусы по сравнению с W7? А конкретно:

    1. netsh wlan set hostednetwork mode=allow ssid=wifi key=123456
    2. включить ICS на виртуальном адаптере
    3. netsh wlan start hostednetwork
    • 0
      Не увидел здесь про WPA2, но круто :)
  • 0
    Спасибо за статью, но есть проблема. У меня Fedora 15, адаптер — D-LINK DWA-125
    При использовании вашего метода сеть создается, но смарт не может к ней подключится. Во время подключения смарта в консоли пишет:
    wlan0: STA a0:75:91:65:a0:89 IEEE 802.11: authenticated
    wlan0: STA a0:75:91:65:a0:89 IEEE 802.11: associated (aid 1)
    unknown mgmt cb frame subtype 10
    wlan0: STA a0:75:91:65:a0:89 IEEE 802.11: deauthenticated due to local deauth request

    В чем может быть моя ошибка?
    • 0
      Плюс периодически появляется:
      • 0
        Извиняюсь, браузер тупит.
        Появляется:
        AP-STA-DISCONNECTED a0:75:91:65:a0:89
    • 0
      Сложно сказать в чём проблема, но беглый просмотр по Гуглу говорит, что вы не первый. Посмотрите, может найдёте своё решение. Если получится — дайте знать, пожалуйста.

      Ещё можно попробовать перевести карту в Master без hostapd (на EeePC этот вариант не работает): iwconfig wlan0 mode master. Если сработает, то, возможно, вам не нужен hostapd.
      • 0
        Без hostapd не работает. Хорошо поищу решение, если что — дам знать
    • 0
      У меня была похожая проблема — решилась свежей версией hostapd.
  • –3
    Выложите конфиги на хостинг и добавьте в install.sh их скачивание в нужное место и запуск редактора для конфигов. будет немного практичнее. Так же можно выложить и сами файлы install.sh и start.sh на хостинг, а в install.sh добавить скачивание файла start.sh. Тогда для запуска всей этой системы надо будет только вгетнуть install.sh, запустить и поправить конфиги.
    Как то так.
    • +1
      А на Хабр тогда можно поместить только ссылку на скрипт и писать ничего не надо :)
      Думаю, что Хабр всё же место, где можно поделиться опытом, а не просто сборник готовых решений.
      • 0
        А на хабре можно просто описать как это создавалось и как это работает. Или хабр это сайт для постинга скриптов? Никто же не мешает развернуто рассказать про готовое решение.
        • 0
          Займётесь? :)
          • 0
            Облизательно, как только у меня будет о чём написать.
            И да, первый мой пост не был ни капли критикой. Это всего лишь предложение по усовершенствованию.
            • 0
              Я имел ввиду, что вы можете выложить скрипты из топика на хостинг и т.д.

              > И да, первый мой пост не был ни капли критикой. Это всего лишь предложение по усовершенствованию.
              Это я понял :)
  • 0
    Я ничего не понял!

    Если у вас в другой стране оказался в загажниках смартфон и нетбук/ноутбук с WiFi+LAN, то зачем лезть в инет со смартфона? Почему нельзя напрямую залезть с нетбука/ноутбука?
    • 0
      Синхронизировать контакты, поставить софт, обновить офлайн карты для GPS-навигатора, позвонить через SIP (позвонить можно и с ноута, но телефон привычнее)/
  • 0
    MASQUERADE грузит систему, SNAT будет получше
    • 0
      > MASQUERADE грузит систему, SNAT будет получше
      1. Пруф? В одной русскоязычной статье читал об этом, но было неубедительно. В англоязычных такой информации не нашёл.
      2. MASQUERADE используется в том случае, если IP адрес внешнего интерфейса не статический (наш случай).
      • 0
        Masquerade все интерфейсы, а если как вы говорите адрес динамический, то вы тогда забыли указать:
        echo 1 > /proc/sys/net/ipv4/ip_dynaddr
        • 0
          слово пропустил, сорри: Masquerade натит все интерфейсы,
        • 0
          Я имел ввиду, что адрес для Ethernet интерфейса система получает по DHCP и вы не знаете какой будет адрес там, куда вы приедете.
  • 0
    Простите, а можно ли так раздать интернет, от сети, которая работает через прокси с авторизацией? Интересует именно hostapd, ответа в google не нашел, может ссылкой поделитесь?
    Спасибо!
    • +1
      Можно настроить прокси на смартфоне, если есть возможность. Или же можно попробовать воспользоваться proxychains.
      • 0
        Спасибо! Буду смотреть proxychains, т.к. не смартфон, а kindle wifi. Думаю, там заморочно прокси добавить.
  • 0
    Сеть создана, андроид конектится, но инэта нет…

    У меня eth0, eth1, ppp0. инет приходит по eth0 через pppoe

    пробовал менять в start.sh:
    eth0 на ppp0 — все равно не работает
    • 0
      Теоретически Должно работать. Попробуйте поанализировать проблему. Сделать ping андроида. Посмотреть route -n и iptables -L -t nat -n.
      • 0
        еще раз попробовал в start.sh eth0 заменить на ppp0, все пингуется (и ноут c ubuntu и android)
        пошел в холодильник за пивом (минуты три), загрузилось только половина страницы yandex.ru
        грузится очень медленно как по одному, так и оба клиента вместе (скорость у меня 40мегабит даунлоад и 70мегабит аплоад)

        root@bt:~# route -n
        Destination---------Gateway---Genmask-----------Flags-Metric-Ref-Use-Iface
        94.228.201.250----0.0.0.0-----255.255.255.255---UH---0--------0----0----ppp0
        192.168.0.0---------0.0.0.0-----255.255.255.0------U-----0--------0----0----wlan0
        10.23.14.0-----------0.0.0.0-----255.255.254.0------U-----0--------0----0----eth0
        0.0.0.0----------------0.0.0.0-----0.0.0.0----------------U-----0--------0----0----ppp0

        root@bt:~# iptables -L -t nat -n
        Chain PREROUTING (policy ACCEPT)
        target prot opt source destination
        Chain INPUT (policy ACCEPT)
        target prot opt source destination
        Chain OUTPUT (policy ACCEPT)
        target prot opt source destination
        Chain POSTROUTING (policy ACCEPT)
        target prot opt source destination
        MASQUERADE all — 0.0.0.0/0 0.0.0.0/0
        • 0
          iptables -L -t nat -n -v
          • 0
            root@bt:~# iptables -L -t nat -n -v

            Chain PREROUTING (policy ACCEPT 84 packets, 7070 bytes)
            pkts bytes target prot opt in out source destination

            Chain INPUT (policy ACCEPT 48 packets, 4910 bytes)
            pkts bytes target prot opt in out source destination

            Chain OUTPUT (policy ACCEPT 69 packets, 4542 bytes)
            pkts bytes target prot opt in out source destination

            Chain POSTROUTING (policy ACCEPT 35 packets, 2447 bytes)
            pkts bytes target prot opt in out source destination
            70 4255 MASQUERADE all — * ppp0 0.0.0.0/0 0.0.0.0/0
            • 0
              Напишу в личку.
  • 0
    Android к Adhoc не подключается. По крайней мере подключить LG Optimus One (2.2.1) я не смог. И в интернетах пишут, что нельзя.
  • 0
    А как сделать такой Вариант:
    Получаем инет по Вай-Фай и раздаем его по ЛАН?
  • 0
    Спасибо! Очень помогло. Раздавал с EEEPC на андроид. Единственное — поменял eth0 на ppp0 т.к. подулючение через VPN
  • 0
    Обновил скрипт. Смотрите UPDATE.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.