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
#Команда для 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 |
|
вероятно, нам не нужно запускать DHCP при старте системы.
Поэтому делаем так:
1 |
|
Теперь возьмём конфиг 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";
#}
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
#Команда для 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 |
|
Теперь пишем:
1 |
|
Откроется конфигурационный файл 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";
#}
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 |
|
В открывшееся окошко копируем следующий текст:
#!/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
#Команда для 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 |
|
Для выключения точки доступа нужно использовать команду
1 |
|
Разумеется, скрипт не будет работать, если вы получаете интернет по Wi-Fi.
Варнинг!
Если вдруг, по непонятной причине, адрес устройства, через которое вы получаете интернет меняется прямо во время сессии, найдите в скрипте строку
1 |
|
и поставьте перед ней символ комментария. А перед строчкой
1 |
|
наоборот, удалите "решётку".
Спасибо qmor за вдохновение. Спасибо assaron за решение проблемы.
Я периодически обновляю и дополняю скрипт, но этот пост обновляться не будет. Если вы хотите увидеть самую свежую версию скрипт, то приходите ко мне в блог: blog.dn90.ru
yuretsz 25.03.2011 11:24 #
+ 0 -
Эээ, а скрипт-то где7
Это у меня опять глюки, или заголовок поста — h2, подзаголовки абзацев — h1? И выглядит как-то странно?
Везде h1. Но выглядит немножко странно, да. Такое оформление не плохо смотрится, когда много текста между заголовками.
Вы бы предупреждали заранее, что в ad-hoc из шифрования только WEP, который ломается за считанные минуты. Для WPA1/WPA2/whatever лучше поднимать hostapd в master mode.
Я не предполагал использование этого скрипта "в бою". Предполагаемый сценарий использования - быстро расшарить интернет с 3g модема, например.