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

в 20:39, , рубрики: Debian, linux, 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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js