Видео смотреть бесплатно

Смотреть жесткий видео

Официальный сайт медиатэк 24/7/365

Смотреть видео бесплатно

uscr 25.03.2011 10:55

СкриптыАвтоматически поднимаем ad-hoc точку доступа в линукс.

Что происходит?


Здравствуйте. Последнее время участились вопросы о поднятии ad-hoc точки доступа на компьютере с линуксом на борту. В связи с этим я наваял небольшой скриптик, который думает за вас.

Как это работает


Скрипт самостоятельно определяет имя и адрес устройства, через которое вы общаетесь с интернетом (делает он это исходя из шлюза по умолчанию). Затем легко и просто поднимает точку доступа, NAT и DHCP сервер.

Раньше все свои посты я старался писать так, что бы даже самый непросвящённый линуксюзер смог путём простой копипасты получить работающее решение. В это раз я напишу целых 3 инструкции по развёртыванию скрипта - для закалённых в бою линуксадминов, для средней осведомлённости пользователей и для виндузятников, которые сегодня впервые увидели линукс. Таким, образом, просто выберите нужную вам инструкцию и не тратьте своё время зря.


Я матёрый админ! Мне просто лень заниматься этим самому.
Вот скрипт:
#!/bin/bash

#Команда для iptables, создающая NAT (не боимся хранить в /tmp, ибо после ребута всё равно всё вернётся на исходную)
LASTWLANMODESTORE="/tmp/lastwlanmodewritenbyinetshareman"

UNSHAREINETCOMMAND="/tmp/stopshareinetcommandwritenbyshareman" #Команда для iptables, удаляющая NAT

STARTDHCP="sh /etc/init.d/dhcp3-server start &" #Как запустить DHCP
STOPTDHCP="sh /etc/init.d/dhcp3-server stop &" #Как остановить DHCP
DHCPCONF="/etc/default/dhcp3-server" #Куда говорить DHCP о интерфейсе, на котором нужно жить.

GETADDRCMD="/etc/init.d/networking restart" #После выключения ad-hoc нужно вернуть настройки интерфейсам.

WLANDEV="wlan0" #Беспроводной интерфейс
WLANNAME=`hostname` #Имя сети совпадает с именем хоста.
WLANKEY="s:`hostname`" #Ключ сети (смотри строкой ниже)
WLANKEY=${WLANKEY:0:7} #Это магия

shareinet () {
inetdev=`ip route | sed -n '/default/p' | cut -d ' ' -f5` #Устройство, через которое к нам ходит интернет
inetip=`ifconfig $inetdev | sed -n '/<0-9>*\.<0-9>*\.<0-9>*\.*<0-9>/p'|cut -d ':' -f2|cut -d ' ' -f1` #Адрес inetdev
curwlanmode=`iwconfig $WLANDEV | sed -n '/Mode\:/p'|cut -d ':' -f2| cut -d ' ' -f1` #В каком режиме сейчас беспроводной интерфейс

#Колдуем с интерфейсом:
ifconfig $WLANDEV down
iwconfig $WLANDEV mode ad-hoc
iwconfig $WLANDEV channel 1
iwconfig $WLANDEV Bit 54Mb/s
iwconfig $WLANDEV essid $WLANNAME
iwconfig $WLANDEV key $WLANKEY
ifconfig $WLANDEV 192.168.50.1 netmask 255.255.255.0
ifconfig $WLANDEV up
echo 1 > /proc/sys/net/ipv4/ip_forward #Включаем форвардинг
iptables -t nat -A POSTROUTING -o $inetdev -j SNAT --to-source $inetip #Используем более шустрый чем маскарадинг snat
#################################################################################################
#Если IP адрес inetdev у вас будет менятся во время раздачи интернета по wi-fi, #
#то расскоментируйте строку ПОД этим комментарием и заккоментируйте сроку НАД этим комментарием.#
#################################################################################################
#iptables -t nat -A POSTROUTING -o $inetdev -j MASQUERADE

#Следущими строками запоминаем то, что нам ещё понадобится и стартуем DHCP.
echo $curwlanmode > $LASTWLANMODESTORE
echo "iptables -t nat -D POSTROUTING -o $inetdev -j SNAT --to-source $inetip" > $UNSHAREINETCOMMAND
chmod 400 $UNSHAREINETCOMMAND #Безопасность, чё. Команда из этого файла потом будет выполнена из под рута.
echo "INTERFACES="$WLANDEV";" > $DHCPCONF
$STARTDHCP
}

stopshare () {
chmod +x $UNSHAREINETCOMMAND
$UNSHAREINETCOMMAND #Стопаем NAT
rm -f $UNSHAREINETCOMMAND
echo 0 > /proc/sys/net/ipv4/ip_forward #Прекращаем форвардинг
$STOPDHCP #Гасим DHCP
#Теперь гасим интерфейс и возвращаем ему прежний режим работы.
ifconfig $WLANDEV down
iwconfig $WLANDEV mode `cat $LASTWLANMODESTORE`
$GETADDRCMD
}

case "$1" in
"start")
shareinet
;;

"share")
shareinet
;;

"stop")
stopshare
;;

esac

exit 0



Возьми скрипт, установи себе DHCP, отредактируй шапку скрипта и пользуйся.

Я понимаю, что происходит, но хочу подробностей.


Разберём на примере Ubuntu. Первым делом нужно установить DHCP сервер. Например, dhcp3-server.
Делаем так:

1
sudo apt-get install dhcp3-server




вероятно, нам не нужно запускать DHCP при старте системы.
Поэтому делаем так:

1
sudo chmod -x /etc/init.d/dhcp3-server



Теперь возьмём конфиг DHCP и положим его в /etc/dhcp3/dhcp.conf
Вот так выглядит конфиг, нужный нам:

ddns-update-style none;

option domain-name "sharenet";
option domain-name-servers 8.8.8.8, 4.4.4.4;

default-lease-time 600;
max-lease-time 7200;

#authoritative;

log-facility local7;

subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.50 192.168.50.200;
option routers 192.168.50.1;
option broadcast-address 192.168.50.255;
}


#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}

#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}

Всё. Теперь скрипт копипастим в подходящий файлик, даём права на выполнение и пользуемся. Скрипт понимает команды start и stop.
Вот скрипт:

#!/bin/bash

#Команда для iptables, создающая NAT (не боимся хранить в /tmp, ибо после ребута всё равно всё вернётся на исходную)
LASTWLANMODESTORE="/tmp/lastwlanmodewritenbyinetshareman"

UNSHAREINETCOMMAND="/tmp/stopshareinetcommandwritenbyshareman" #Команда для iptables, удаляющая NAT

STARTDHCP="sh /etc/init.d/dhcp3-server start &" #Как запустить DHCP
STOPTDHCP="sh /etc/init.d/dhcp3-server stop &" #Как остановить DHCP
DHCPCONF="/etc/default/dhcp3-server" #Куда говорить DHCP о интерфейсе, на котором нужно жить.

GETADDRCMD="/etc/init.d/networking restart" #После выключения ad-hoc нужно вернуть настройки интерфейсам.

WLANDEV="wlan0" #Беспроводной интерфейс
WLANNAME=`hostname` #Имя сети совпадает с именем хоста.
WLANKEY="s:`hostname`" #Ключ сети (смотри строкой ниже)
WLANKEY=${WLANKEY:0:7} #Это магия

shareinet () {
inetdev=`ip route | sed -n '/default/p' | cut -d ' ' -f5` #Устройство, через которое к нам ходит интернет
inetip=`ifconfig $inetdev | sed -n '/<0-9>*\.<0-9>*\.<0-9>*\.*<0-9>/p'|cut -d ':' -f2|cut -d ' ' -f1` #Адрес inetdev
curwlanmode=`iwconfig $WLANDEV | sed -n '/Mode\:/p'|cut -d ':' -f2| cut -d ' ' -f1` #В каком режиме сейчас беспроводной интерфейс

#Колдуем с интерфейсом:
ifconfig $WLANDEV down
iwconfig $WLANDEV mode ad-hoc
iwconfig $WLANDEV channel 1
iwconfig $WLANDEV Bit 54Mb/s
iwconfig $WLANDEV essid $WLANNAME
iwconfig $WLANDEV key $WLANKEY
ifconfig $WLANDEV 192.168.50.1 netmask 255.255.255.0
ifconfig $WLANDEV up
echo 1 > /proc/sys/net/ipv4/ip_forward #Включаем форвардинг
iptables -t nat -A POSTROUTING -o $inetdev -j SNAT --to-source $inetip #Используем более шустрый чем маскарадинг snat
#################################################################################################
#Если IP адрес inetdev у вас будет менятся во время раздачи интернета по wi-fi, #
#то расскоментируйте строку ПОД этим комментарием и заккоментируйте сроку НАД этим комментарием.#
#################################################################################################
#iptables -t nat -A POSTROUTING -o $inetdev -j MASQUERADE

#Следущими строками запоминаем то, что нам ещё понадобится и стартуем DHCP.
echo $curwlanmode > $LASTWLANMODESTORE
echo "iptables -t nat -D POSTROUTING -o $inetdev -j SNAT --to-source $inetip" > $UNSHAREINETCOMMAND
chmod 400 $UNSHAREINETCOMMAND #Безопасность, чё. Команда из этого файла потом будет выполнена из под рута.
echo "INTERFACES="$WLANDEV";" > $DHCPCONF
$STARTDHCP
}

stopshare () {
chmod +x $UNSHAREINETCOMMAND
$UNSHAREINETCOMMAND #Стопаем NAT
rm -f $UNSHAREINETCOMMAND
echo 0 > /proc/sys/net/ipv4/ip_forward #Прекращаем форвардинг
$STOPDHCP #Гасим DHCP
#Теперь гасим интерфейс и возвращаем ему прежний режим работы.
ifconfig $WLANDEV down
iwconfig $WLANDEV mode `cat $LASTWLANMODESTORE`
$GETADDRCMD
}

case "$1" in
"start")
shareinet
;;

"share")
shareinet
;;

"stop")
stopshare
;;

esac

exit 0



Совсем ничего не понятно. Как это делается, а?

Если ваш дистрибутив - Ubuntu, пишем в консоли:

1

2
sudo apt-get -y install dhcp3-server

sudo chmod -x /etc/init.d/dhcp3-server



Теперь пишем:

1
sudo gedit /etc/dhcp3/dhcpd.conf




Откроется конфигурационный файл DHCP сервера. Нужно стереть всё, что там есть и вставить туда вот что:
ddns-update-style none;

option domain-name "sharenet";
option domain-name-servers 8.8.8.8, 4.4.4.4;

default-lease-time 600;
max-lease-time 7200;

#authoritative;

log-facility local7;

subnet 192.168.50.0 netmask 255.255.255.0 {
range 192.168.50.50 192.168.50.200;
option routers 192.168.50.1;
option broadcast-address 192.168.50.255;
}


#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}

#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}


Сохраняем изменения.
Теперь у нас настроенный DHCP сервер. Он будет раздавать IP адреса устройствам в сети. Обратите внимание: даже если у вас уже есть DHCP сервер в сети, всё равно проделайте все эти шаги.

Далее создадим сам скрипт.
В консоли пишем:
1
sudo gedit /usr/sbin/inetshareman && sudo chmod +x /usr/sbin/inetshareman




В открывшееся окошко копируем следующий текст:
#!/bin/bash

#Команда для iptables, создающая NAT (не боимся хранить в /tmp, ибо после ребута всё равно всё вернётся на исходную)
LASTWLANMODESTORE="/tmp/lastwlanmodewritenbyinetshareman"

UNSHAREINETCOMMAND="/tmp/stopshareinetcommandwritenbyshareman" #Команда для iptables, удаляющая NAT

STARTDHCP="sh /etc/init.d/dhcp3-server start &" #Как запустить DHCP
STOPTDHCP="sh /etc/init.d/dhcp3-server stop &" #Как остановить DHCP
DHCPCONF="/etc/default/dhcp3-server" #Куда говорить DHCP о интерфейсе, на котором нужно жить.

GETADDRCMD="/etc/init.d/networking restart" #После выключения ad-hoc нужно вернуть настройки интерфейсам.

WLANDEV="wlan0" #Беспроводной интерфейс
WLANNAME=`hostname` #Имя сети совпадает с именем хоста.
WLANKEY="s:`hostname`" #Ключ сети (смотри строкой ниже)
WLANKEY=${WLANKEY:0:7} #Это магия

shareinet () {
inetdev=`ip route | sed -n '/default/p' | cut -d ' ' -f5` #Устройство, через которое к нам ходит интернет
inetip=`ifconfig $inetdev | sed -n '/<0-9>*\.<0-9>*\.<0-9>*\.*<0-9>/p'|cut -d ':' -f2|cut -d ' ' -f1` #Адрес inetdev
curwlanmode=`iwconfig $WLANDEV | sed -n '/Mode\:/p'|cut -d ':' -f2| cut -d ' ' -f1` #В каком режиме сейчас беспроводной интерфейс

#Колдуем с интерфейсом:
ifconfig $WLANDEV down
iwconfig $WLANDEV mode ad-hoc
iwconfig $WLANDEV channel 1
iwconfig $WLANDEV Bit 54Mb/s
iwconfig $WLANDEV essid $WLANNAME
iwconfig $WLANDEV key $WLANKEY
ifconfig $WLANDEV 192.168.50.1 netmask 255.255.255.0
ifconfig $WLANDEV up
echo 1 > /proc/sys/net/ipv4/ip_forward #Включаем форвардинг
iptables -t nat -A POSTROUTING -o $inetdev -j SNAT --to-source $inetip #Используем более шустрый чем маскарадинг snat
#################################################################################################
#Если IP адрес inetdev у вас будет менятся во время раздачи интернета по wi-fi, #
#то расскоментируйте строку ПОД этим комментарием и заккоментируйте сроку НАД этим комментарием.#
#################################################################################################
#iptables -t nat -A POSTROUTING -o $inetdev -j MASQUERADE

#Следущими строками запоминаем то, что нам ещё понадобится и стартуем DHCP.
echo $curwlanmode > $LASTWLANMODESTORE
echo "iptables -t nat -D POSTROUTING -o $inetdev -j SNAT --to-source $inetip" > $UNSHAREINETCOMMAND
chmod 400 $UNSHAREINETCOMMAND #Безопасность, чё. Команда из этого файла потом будет выполнена из под рута.
echo "INTERFACES="$WLANDEV";" > $DHCPCONF
$STARTDHCP
}

stopshare () {
chmod +x $UNSHAREINETCOMMAND
$UNSHAREINETCOMMAND #Стопаем NAT
rm -f $UNSHAREINETCOMMAND
echo 0 > /proc/sys/net/ipv4/ip_forward #Прекращаем форвардинг
$STOPDHCP #Гасим DHCP
#Теперь гасим интерфейс и возвращаем ему прежний режим работы.
ifconfig $WLANDEV down
iwconfig $WLANDEV mode `cat $LASTWLANMODESTORE`
$GETADDRCMD
}

case "$1" in
"start")
shareinet
;;

"share")
shareinet
;;

"stop")
stopshare
;;

esac

exit 0



Сохраняем изменения.

Как использовать скрипт?


Очень просто. Установите соединение с интернетом. Теперь команда
1
sudo inetshareman start


поднимает точку доступа с именем, совпадающим с именем вашего компьютера (узнать можно командой hostname) и ключом, который равен первым пяти символам (по другому не работает) имени вашего компьютера.
Для выключения точки доступа нужно использовать команду
1
sudo inetshareman stop


. После этого компьютер можно использовать как обычно.
Разумеется, скрипт не будет работать, если вы получаете интернет по Wi-Fi.

Варнинг!


Если вдруг, по непонятной причине, адрес устройства, через которое вы получаете интернет меняется прямо во время сессии, найдите в скрипте строку

1
iptables -t nat -A POSTROUTING -o $inetdev -j SNAT --to-source $inetip




и поставьте перед ней символ комментария. А перед строчкой

1
#iptables -t nat -A POSTROUTING -o $inetdev -j MASQUERADE




наоборот, удалите "решётку".

Спасибо qmor за вдохновение. Спасибо assaron за решение проблемы.


Я периодически обновляю и дополняю скрипт, но этот пост обновляться не будет. Если вы хотите увидеть самую свежую версию скрипт, то приходите ко мне в блог: blog.dn90.ru


Тэги:
+ 6 -
Похожие Поделиться

yuretsz 25.03.2011 11:24 #
+ 0 -
Эээ, а скрипт-то где7
uscr 25.03.2011 11:29 #
+ 0 -
Вместо "сохранить" ткнул "запостить".
Бывает, да.
Shtsh 25.03.2011 11:43 #
+ 0 -
Это у меня опять глюки, или заголовок поста — h2, подзаголовки абзацев — h1? И выглядит как-то странно?
uscr 25.03.2011 11:52 #
+ 0 -
Везде h1. Но выглядит немножко странно, да. Такое оформление не плохо смотрится, когда много текста между заголовками.
segoon 25.03.2011 13:35 #
+ 1 -
Вы бы предупреждали заранее, что в ad-hoc из шифрования только WEP, который ломается за считанные минуты. Для WPA1/WPA2/whatever лучше поднимать hostapd в master mode.
uscr 25.03.2011 13:58 #
+ 0 -
Я не предполагал использование этого скрипта "в бою". Предполагаемый сценарий использования - быстро расшарить интернет с 3g модема, например.
segoon 25.03.2011 19:36 #
+ 1 -
Вот так бы и написали :-)
uscr 25.03.2011 21:29 #
+ 0 -
Нет. Я не предполагал, но не отрицаю "боевого" использования :)

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн