zepete: (Default)
[personal profile] zepete
Я создал скрипт для настройки сети tl-mr3020 для случая, когда интернет он получает из wifi.
Он может пригодится, если этот маршрутизатор планируется использовать как консольный компьютер подключенный к интернету.
Он запрашивает только номер доступной точки доступа и ее пароль, а имя точки доступа он ищет сам.
#!/bin/sh
#********************************************************************************
#* скрипт для настройки сети openwrt в качестве приемника интернета из wifi     *
#* достоинства:                                                                 *
#*  - настраивает eth на адрес 192.168.0.254, а если сеть 192.168.0.0/24 занята *
#*    wifi, то настраивает на сеть 192.168.1.254                                *
#*  - настраивает opkg на ftp://<сеть eth>.200/packages                         *
#*  - умеет определять мена доступных точк доступа                              *
#*  - если доступна только одна SSID, то выбирает ее автоматом                  *
#*  - настраивает синхронизацию времени                                         *
#*  22 декабря 2013 года, zepete                                                *
#********************************************************************************
#lanip=$(uci show network.lan.ipaddr | sed 's/network\.lan\.ipaddr=//')
lan_ip="192.168.0.254"
hostname='mr3020'
timezone='MSK-4'
opkg_ip=200

#enable wireless
rm -f /etc/config/wireless
wifi detect > /etc/config/wireless
uci set wireless.radio0.disabled=0
#uci set wireless.radio0.distance=100
#uci set wireless.radio0.country='RU'
#uci set wireless.@wifi-iface[0].disabled=1
uci commit wireless
#out of wifi always go on uart.
wifi
#get information about wifi AP
iw dev wlan0 scan >/tmp/wifiAP.txt
#iw dev wlan0 scan
#get number of SSID of wifi AP
awk 'BEGIN{i=0}{if($1=="SSID:")i=i+1}END{exit i}' < /tmp/wifiAP.txt
NumSSID=$?
#echo $NumSSID
if [ $NumSSID -eq 0 ]
then
 clear
 echo '**********************************************'
 echo '*  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  *'
 echo '*  do not find wireless AP                   *'
 echo '**********************************************'
 exit 1
fi
#out table SSID with security type
clear
awk 'BEGIN{SSID="";WEP="no";WPA="no";RSA="no";AES="no";TKIP="no";free="yes";i=0;
 printf "No SSID                           free WEP WPA WPA2 TKIP AES\n"}
{if($1=="SSID:"){SSID=$2}}
{if($1=="WPA:"){WPA="yes"}}
{if($1=="WEP:"){WEP="yes"}}
{if($1=="RSA:"){RSA="yes"}}
{if($0~/CCMP/){AES="yes"}}
{if($0~/TKIP/){TKIP="yes"}}
{if($0~/cipher/){free="no"}}
{if($1=="BSS")
 {if(i!=0){printf "%2i %-30s  %3s %3s %3s  %3s  %3s %3s\n",i,SSID,free,WEP,WPA,RSA,TKIP,AES};
 WEP="no";WPA="no";RSA="no";AES="no";TKIP="no";free="yes";i+=1}
}
END{printf "%2i %-30s  %3s %3s %3s  %3s  %3s %3s\n",i,SSID,free,WEP,WPA,RSA,TKIP,AES}
'# input number SSID
if [ $NumSSID -eq 1 ]
then
 SSID="1"
else
 SSID="0"
fi
while [[ $SSID -lt 1 || $SSID -gt $NumSSID ]]
do
 read -p 'Input number of SSID:'
 SSID=$(echo $REPLY|awk '{if($0~/[^[:digit:]]+/){print "0"; exit 0}else{print $0; exit 0}}')
done
#get type of security
encryption=$( (echo GetNumSSID: $SSID;cat /tmp/wifiAP.txt)|awk 'BEGIN{SSID="";WEP="no";WPA="no";RSA="no";AES="no";TKIP="no";free="yes";i=0;}
{if($1=="GetNumSSID:"){GetNumSSID=$2}
if($1=="SSID:"){SSID=$2}
if($1=="WPA:"){WPA="yes"}
if($1=="WEP:"){WEP="yes"}
if($1=="RSA:"){RSA="yes"}
if($0~/CCMP/){AES="yes"}
if($0~/TKIP/){TKIP="yes"}
if($0~/cipher/){free="no"}
if($1=="BSS"){
 if(i==GetNumSSID){ exit }
 if(i!=0){WEP="no";WPA="no";RSA="no";AES="no";TKIP="no";free="yes";};
 i+=1};
}
END{if(i==GetNumSSID){
  if(RSA=="yes"){
   if(WPA=="no"){
    if(TKIP=="yes" && AES=="yes"){print "psk2+tkip+aes";exit 0;}
    if(TKIP=="yes"){print "psk2+TKIP";exit 0;}
    if(AES=="yes"){print "psk2+AES"; exit 0;}
    exit 1;}
   if(TKIP=="yes" && AES=="yes"){print "mixed-psk+tkip+aes";exit 0;}
   if(TKIP=="yes"){print "mixed-psk+TKIP";exit 0;}
   if(AES=="yes"){print "mixed-psk+AES";exit 0;}
   exit 1;}
  if(WPA=="yes"){
   if(TKIP=="yes" && AES=="yes"){print "psk+tkip+aes";exit 0;}
   if(TKIP=="yes"){print "psk+TKIP";exit 0;}
   if(AES=="yes"){print "psk+AES";exit 0;}
   exit 1;}
  if(WEP=="yes"){print "wep"; exit 0}
  if(free=="yes"){print "none"; exit 0}
 }
 exit 1;
}')
if [ ! $? ]
then
 echo '**********************************************'
 echo '*  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  *'
 echo '*  can not detect correct type encription    *'
 echo '*  setup network handle                      *'
 echo '**********************************************'
 exit 1
fi

#get name of SSID
NameSSID=$( (echo GetNumSSID: $SSID;cat /tmp/wifiAP.txt)|
awk 'BEGIN{NumSSID=0;i=0;NameSSID=""}
{if($1=="GetNumSSID:"){NumSSID=$2}
if($1=="SSID:"){NameSSID=$2;i+=1;}
if(i==NumSSID){print NameSSID;exit 0}}
END{exit 1}')
if [ ! $? ]
then
 echo '**********************************************'
 echo '*  ERROR  ERROR  ERROR  ERROR  ERROR  ERROR  *'
 echo '*  internal error get name SSID              *'
 echo '**********************************************'
 exit 1
fi
echo $NameSSID
# set wifi managed (client) mode
uci set wireless.radio0.channel='auto'
uci set wireless.@wifi-iface[0].mode='sta'
uci set wireless.@wifi-iface[0].disabled=0
uci set wireless.@wifi-iface[0].ssid=$NameSSID
uci set wireless.@wifi-iface[0].network='wan'
uci set wireless.@wifi-iface[0].encryption=$encryption
#set password
if [ $encryption = "none" ]
then
 uci delete wireless.@wifi-iface[0].key
 uci commit wireless

else
 connected=0
 while [ $connected -eq 0 ]
 do
  wifi down
  clear
  echo "Choosed SSID: $NameSSID  encryption: $encryption"
  read -p 'Input key:'
  uci set wireless.@wifi-iface[0].key=$REPLY
  uci commit wireless
  wifi
  sleep 10
  connected=$(cat /proc/net/wireless | awk 'BEGIN{k=0}
   {if($1=="wlan0:" && $3!=0)k=1}
   END{print k}')
 done
fi

#настройка /etc/config/network
uci set network.wan=interface
uci set network.wan.proto=dhcp
uci set network.wan.hostname=$hostname
#проверка на совпадение внешней сети с внутренней
uci delete network.lan
uci commit network
wifi down;killall -9 wpa_supplicant;wifi up
/etc/init.d/network restrt
wlan_ip=$(ifconfig | awk 'BEGIN{f=0}
$1=="wlan0"{f=1}
f==1 && $1=="inet" && $2~/addr:([0-9]{1,3}\.){3}[0-9]{1,3}$/{
 split($2,ip,":");
 print ip[2]}')

if [[ $(echo $lan_ip | awk '{split($1,ip,"."); print ip[1]}') -eq \
  $(echo $wlan_ip | awk '{split($1,ip,"."); print ip[1]}') &&\
       $(echo $lan_ip | awk '{split($1,ip,"."); print ip[2]}') -eq \
  $(echo $wlan_ip | awk '{split($1,ip,"."); print ip[2]}') &&\
       $(echo $lan_ip | awk '{split($1,ip,"."); print ip[3]}') -eq \
  $(echo $wlan_ip | awk '{split($1,ip,"."); print ip[3]}') ]]
then  
  lan_ip="$(echo $lan_ip | awk '{split($1,ip,"."); printf "%i.%i.%i.%i",ip[1],ip[2],ip[3]+1,ip[4]}')"
fi
# настройка opkg
opkg_conf_addr=$(printf "%i.%i.%i.%i"\
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[1]}') \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[2]}') \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[3]}') $opkg_ip)
sed -i "/etc/opkg.conf.bak" -e "s/\(src\/gz attitude_adjustment \).*/\1ftp:\/\/$opkg_conf_addr\/packages/"

#настройка eth сети
uci set network.lan=interface
uci set network.lan.ifname='eth0'
uci set network.lan.proto=static
uci set network.lan.ipaddr=$lan_ip
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.type='bridge'
uci commit network

#настройка /etc/config/firewall
uci set firewall.@zone[1].input=ACCEPT
uci set firewall.@zone[1].masq_dest=!192.168.1.0/24
uci add firewall forwarding
uci set firewall.@forwarding[1].src='wan'
uci set firewall.@forwarding[1].dest='lan'
uci commit firewall

# настройка /etc/config/system
uci set system.@system[0].hostname=\'$hostname\'
uci set sytem.@system[0].timezone=\'$timezone\'
uci delete system.ntp.server
uci add_list system.ntp.server='ntp.mobatime.ru'
uci add_list system.ntp.server='0.pool.ntp.org'
uci add_list system.ntp.server='ntp1.vniiftri.ru'
uci add_list system.ntp.server='time.windows.com'
uci add_list system.ntp.server='0.debian.pool.ntp.org'
uci set system.ntp.enable_server=1
uci set system.@system[0].timezone='MSK-4'
uci commit system

#сброс сети
/etc/init.d/firewall restart
sleep 1
wifi down; sleep 10; killall -9 wpa_supplicant; wifi up
sleep 10
/etc/init.d/network restart
sleep 10
ntpd -p ntp.mobatime.ru -p 0.pool.ntp.org -p ntp1.vniiftri.ru -p time.windows.com -p 0.debian.pool.ntp.org
opkg update
#вывод на экран требуемых параметров сети подключенного компьютера
clear
echo   '********************************************************'
echo   '* Config your ethernet adapter on computer             *'
printf "* ip address:%3i.%3i.%3i.%3i                           *\n" \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[1]}') \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[2]}') \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[3]}') $opkg_ip
echo   '* mask: 255.255.255.0                                  *'
printf "* gate:%3i.%3i.%3i.254                                 *\n" \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[1]}') \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[2]}') \
 $(echo $lan_ip | awk '{split($1,ip,"."); print ip[3]}')
echo   '* dns server: 8.8.8.8                                  *'
echo   '********************************************************'

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 14th, 2026 09:21 pm
Powered by Dreamwidth Studios