1 февраля 2014 в 00:39

Удобное переключение wifi в режим точки доступа из песочницы

По мотивам статей (раз,два).
Знаю, что на хабре и в гугле эту тему уже не раз обсуждали, тем не менее, когда я, по мануалам, решил сделать свою точку доступа «для друзей», я столкнулся с определенными сложностями, а готовые решения оказались сыроватыми. Потому предлагаю неопытным пользователям GNU/Linux сделать это так, как сделал я.

Раздать wi-fi с 3g модема (и с проводного интернета), когда ничего другого нет под рукой — дело благородное, потому мы пройдем по быстрому пути получения профита. Инструкция предназначена для debian-based дистрибутивов. Нам понадобится hostapd — собственно для раздачи wi-fi, dnsmasq — для раздачи ip-адресов и notify-send (не обязательно) — для оповещений. iptables на данный момент доступен из коробки. Ставим hostapd и останавливаем его:

aptitude install hostapd
service hostapd stop


В файле /etc/default/hostapd раскомментируем и исправляем строку:

DAEMON_CONF="/etc/hostapd/hostapd.conf"


Создаем и редактируем файл /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211
ssid=wifi_4_friends
hw_mode=g
channel=6
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0


Тут все просто — имя точки доступа, пароль, канал, на котором будет работать и драйвер.
Ставим dnsmasq и останавливаем его:

aptitude install dnsmasq
service dnsmasq stop


dnsmasq хорош тем, что в нем все есть и он прост для настройки. Открываем файл конфигурации /etc/dnsmasq.conf:

interface=wlan0
dhcp-range=192.168.2.2,192.168.2.100,12h


Тут все крайне просто, но если нужно, можно добавить альтернативный dns сервер, а также можно хосты принудительно направлять на 127.0.0.1, тем самым блокируя их. Подробности в справке man dnsmasq. Еще один момент, обязательно адреса dhcp-range должны быть в одной сети с wlan0. если Вы по каким-либо соображениям в скрипте запуска не будете принудительно менять ip адрес для wlan0, то укажите тут пул такой же, как в wlan0. Например дома есть роутер с адресом 192.168.1.1 и сеть 192.168.1.0/24, то dhcp-range нужно указать в пределах этого пространства, а также, чтобы он не пересекался с пулом адресов, выдаваемых dhcp-сервером роутера. Мы пойдем путем по-проще и сами укажем другую подсеть.

Теперь отключим автозагрузку демонов:

update-rc.d hostapd disable
update-rc.d dnsmasq disable


Ко всему этому осталось только включать/отключать роутинг и добавлять/удалять правило из iptables

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


Это будем производить автоматически, с помощью скрипта. Все готово, а вот и сам скрипт wifi-ap:

#!/bin/bash
#script to start/stop hostapd, dnsmasq, add/remove iptables rule

set -e
exec 3>&1
exec 2>&1 >> /tmp/wifi-ap

function print_help(){
	echo "Start/Stop Software Access Point"
	echo
	echo "Usage `basename $0` options..."
	echo "wifi-ap on to start Software AP"
	echo "wifi-ap off to stop Software AP"
	echo
	echo "log-file - /tmp/wifi-ap"
	echo
}
if [ $# = 0 ]; then
	print_help >&3
		exit 0
fi

if [ $1 = on ]; then
		ifconfig wlan0 192.168.2.1
		service dnsmasq start
		sysctl net.ipv4.ip_forward=1
		iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
		service hostapd start
		notify-send --expire-time=4000 "Software Access Point" "<b>start</b>"
	exit 0
fi

if [ $1 = off ]; then
		service dnsmasq stop
		service hostapd stop
		ifconfig wlan0 192.168.1.4
		sysctl net.ipv4.ip_forward=0
		iptables -D POSTROUTING -t nat -o ppp0 -j MASQUERADE
		notify-send --expire-time=4000 "Software Access Point" "<b>stop</b>"
	exit 0
fi


Он принимает 2 параметра, on и off. Вы легко можете подкорректировать его под себя и, если нужно, заменить интерфейс ppp0 на eth0 (или другой, на Ваше усмотрение).

Я пользователь debian и не использую sudo, а Вам может понадобиться.

Приятного использования.
Олег @conformist
карма
2,0
рейтинг 0,1
Самое читаемое Администрирование

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

  • 0
    Как вы и подметили,
    Знаю, что на хабре и в гугле эту тему уже не раз обсуждали, тем не менее, когда я, по мануалам, решил сделать свою точку доступа «для друзей», я столкнулся с определенными сложностями, а готовые решения оказались сыроватыми. Потому предлагаю неопытным пользователям GNU/Linux сделать это так, как сделал я.

    подобное было и на хабре и в интернетах, при том достаточно разжёвано, но вот за скрипт — спасибо. Очень удобно.
  • +3
    Чуть-чуть офтоп
    Я пользователь debian и не использую sudo
    Странное дело, у меня тоже Debian и… В общем, работать из-под рута как-то некомильфо.

    • +1
      оффтоп
      Дело в том, что это домашняя машина, в ней всего один пользователь. Если бы это был сервер, я с Вами соглашусь на 100% ибо удобно. А для домашнего использования, например, очень неудобно набирать через sudo команды, которых нет в окружении пользователя. Уж очень я люблю tab'ом пользоваться
      • +2
        оффтоп
        Как раз таки на сервере безопаснее не использовать sudo — взломщику нужно будет подобрать лишь ваш пароль, а не рутовый.
        Дополнение отлично работает для sudo (bash, zsh). И для домашнего использования подходит здорово, KDE/GNOME умеют взаимодействовать с sudo.
        Возможно, вы не обратили внимания, но при установке Debian обычно предлагается ввести пароль root или оставить поле пустым, если хотите использовать sudo.
        • 0
          оффтоп
          Для интереса таки попробовал sudo — да, действительно дополнение работает в окружении пользователя, Вы были правы.
          По поводу сервера (не рассматривая физический доступ): sudo может и нужно, но с правами просмотра логов, например.
  • 0
    Для такого рода временных точек доступа использую NetworkManager. Там всё из коробки шарится. Интерфейс включения/выключения точки доступа в Gnome3 там вполне удобный(Использую Fedora)

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