Linux32 - Блог



LINUX32

Свобода выбирать


ArchLinux
Блог >> 2014 >> Август


22.08.2014

Делаем Wi-Fi точку доступа




Всем привет!

Многие сейчас имеют дома ноутбуки и современные сенсорные мобильные телефоны. И в тех, и в других уже давно присутствуют Wi-Fi приемники для упрощения выхода в интернет. Правда, для осуществления этого выхода еще нужен и Wi-Fi роутер, но они тоже уже перестали быть экзотикой. Даже наоборот, экзотикой стало отсутствие роутера. А выйти в интернет с мобильного, при этом, хочется. Если еще учесть, что цены на мобильный интернет кусаются, да и скорость мягко говоря не очень, выходом становится создание своей wi-fi точки доступа.

Вот как раз об одном из экзотических случаев и напишу, основываясь на собственном примере. У меня обычный стационарный компьютер (даже не ноутбук с wi-fi модулем) который выходит в интернет через витую пару, смартфон, которому хочется в интернет и, конечно, Linux на борту компьютера.

Итак, делать мы будем программную Wi-Fi точку доступа из компьютера. Для этого я купил самый дешевый в моем городе usb wi-fi брелок D-Link DWA-125 (не сочтите за рекламу, но я очень доволен покупкой, работает как часы). До сих пор помню глаза продавца-консультанта в магазине, у которого я спросил: "Может ли этот брелок работать в режиме точки доступа?" Поэтому выходит что покупал я кота в мешке (вернее, почти, перед покупкой я всеже поискал в интернете информацию по этому вопросу и всезнающий интернет хоть и неуверенно, но подтвердил что я сделал правильный выбор).

Итак, есть брелок, вставили его в usb-порт. Открываем терминал и следующей командой проверяем, определился ли брелок системой:

lsusb | grep -i wireless


В выводе должно быть что-то похожее на:

Bus 002 Device 004: ID 2001:3c19 D-Link Corp. DWA-125 Wireless N 150 Adapter(rev.A3) [Ralink RT5370]


Если есть подобная строка (или такая же при использовании DWA-125) продолжаем:

iwconfig
eth0 no wireless extensions.
lo no wireless extensions.
wlan0 IEEE 802.11bgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on


Где "Access Point: Not-Associated" означает что ваш брелок не работает сейчас в режиме точки доступа. Далее нужно проверить может ли он раздавать wi-fi или работает только как приемник. Для этого вводим в терминале такую команду:

iw list


И ищем в выводе такие строки:

Supported interface modes:
...
* AP
* AP/VLAN
...


Если нашли, поздравляю, ваш брелок подходит для наших целей, осталось только настроить точку доступа.

Для этого необходимо установить пару программ:

sudo pacman -S hostapd dnsmasq


Hostapd нам нужен собственно для поднятия точки доступа, а dnsmasq для того чтобы при подключении мобильного телефона к нашей будущей wi-fi сети телефону автоматически выдавался IP-адрес.

Для настройки hostapd идем в /etc/hostapd, открываем терминал в этой папке и создаем файл hostapd.conf:

sudo touch hostapd.conf


С таким содержимым:

ssid=<имя вашей точки доступа>
wpa_passphrase=<пароль для вашей точки доступа>
interface=wlan0
auth_algs=3
channel=1
driver=nl80211
hw_mode=g
logger_stdout=-1
logger_stdout_level=2
max_num_sta=5
rsn_pairwise=CCMP
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP


Для минимальной настройки hostapd этого будет достаточно. Естественно <имя вашей точки доступа> и <пароль для вашей точки доступа> необходимо заменить на свои (кавычки <> убрать). Немного поясню: при таких значениях в этом файле ваша точка доступа будет работать на wi-fi-канале "g", с шифрованием AES и защитой WPA2-PSK. Как и большинство "железных" роутеров на сегодняшний день. Кстати, имя интерфейса у вас может быть не wlan0. Уточнить имя можно из команды iwconfig, приведенной выше.

Перейдем к настройке dnsmasq. В папке /etc есть файл dnsmasq.conf. Там очень много всяческих настроек с подробными комментариями, но на английском, поэтому для того чтобы все работало ищем вот такие строки в нем и меняем в соответствии с этим отрывком:

...
user=<имя пользователя>
...
interface=wlan0
...
dhcp-range=192.168.0.2,192.168.0.255,255.255.255.0,24h
...


Здесь мы задаем свое имя пользователя, опять же имя интерфейса и диапазон IP-адресов, которые будут получать подключающиеся устройства. В данном примере от 2 до 255. Ip-адрес 192.168.0.1 я оставил для самого компьютера, который будет раздавать интернет.

Далее необходимо создать файл dnsmasq.service в папке /etc/systemd/system:

sudo touch /etc/systemd/system/dnsmasq.service


С таким содержимым:

.include /usr/lib/systemd/system/dnsmasq.service

[Service]
ExecStartPre=/usr/bin/ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 up


Содержимое этого файла как раз и отвечает за присвоение компьютеру "оставленного" IP-адреса при загрузке системы и будет включаться в файл /usr/lib/systemd/system/dnsmasq.service при запуске сервиса dnsmasq.

Перейдем к настройке iptables. Iptables - это очень мощный, гибко настраиваемый firewall в linux, но довольно сложный в освоении. Особо вдаваться в подробности не буду (так как и сам еще не до конца в нем разобрался), поэтому просто открываем терминал и вводим по очереди следующие команды:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables-save > /etc/iptables/iptables.rules


Все же немного поясню: все строки, кроме предпоследних двух сбрасывают все настройки firewall к начальным, предпоследняя строка разрешает нам пользоваться интернетом, подведенным к основному компьютеру (шлюзу) на устройствах, объединенных с ним в локальную сеть, а последняя строка сохраняет введенные нами настройки firewall. Важная деталь: eth0 в предпоследней строке - это имя интерфейса компьютера на который приходит интернет (у вас может отличаться).

Осталось совсем немного)

Теперь нужно настроить проброс пакетов. делается это командой:

echo 1 > /proc/sys/net/ipv4/ip_forward


Но есть один недостаток, эту команду нужно будет вводить после каждой загрузки компьютера. Чтобы так не заморачиваться идем в папку /etc/sysctl.d и в файле 99-sysctl.conf приводим строку "net.ipv4.ip_forward =" к такому виду:

net.ipv4.ip_forward = 1


То есть пишем 1 после знака равно. Тем самым разрешая проброс пакетов. Кстати, если такого файла не оказалось, просто создайте его и поместите внутрь вышеописанную строку.

На этом с настройками закончили. На первый взгляд все кажется очень сложным, но... глаза боятся, а руки делают. После самостоятельной настройки все эти "магические надписи" станут логичными и понятными. Теперь осталось только запустить необходимые сервисы и добавить их в автозагрузку:

sudo systemctl start hostapd
sudo systemctl start dnsmasq
sudo systemctl start iptables
sudo systemctl enable hostapd
sudo systemctl enable dnsmasq
sudo systemctl enable iptables


После запуска проверьте на всякий случай работают ли сервисы:

systemctl status hostapd
systemctl status dnsmasq
systemctl status iptables


Если все хорошо, вы увидите зеленую надпись "Active", если плохо - красную "Inactive", тогда проверьте все введенные настройки, возможно где-то в чем-то ошиблись.

Теперь у вас есть собственная wi-fi точка доступа. Плюс ее в том что ваш телефон, планшет, ноутбук и т.д. теперь имеет полноценный высокоскоростной доступ в интернет, причем бесплатно (имею в виду что не за дополнительную плату. За подключение к интернету компьютера с нашей точкой доступа все же нужно платить). К тому же, через wi-fi подключение теперь можно передавать файлы с компьютера на телефон или планшет и обратно без проводов. Для этого правда нужно установить на устройство с Android (не реклама, просто сам пользуюсь. На остальных мобильных операционных системах должны быть подобные программы) программу FTP-server (опять же, не реклама), ввести несколько простых настроек (все на русском языке, просто и понятно) и готово!

Но у такой точки доступа есть и один минус: wi-fi раздается только при включенном компьютере, что вполне логично. Лично мне, например, интернета на мобильном хватает когда я нахожусь рядом с компьютером. В остальное время просто не пользуюсь им с телефона. Поэтому особо и не минус. Как для вас такое ограничение - попробуйте и сделаете выводы.

Вот такая обширная статья получилась.

Изучайте, настраивайте, комментируйте. Если найдете где-то ошибку - пишите, вместе исправим.

Статья


Ваш комментарий:

Имя:
E-mail:
Код с картинки:
Комментарий: