По мотивам статей (раз,два).
Знаю, что на хабре и в гугле эту тему уже не раз обсуждали, тем не менее, когда я, по мануалам, решил сделать свою точку доступа «для друзей», я столкнулся с определенными сложностями, а готовые решения оказались сыроватыми. Потому предлагаю неопытным пользователям 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