2022年2月19日土曜日

pCP Mobile:自宅WiFiとスマホテザリングのIPアドレスを固定したい(失敗)

接続しているSSIDでIPアドレスを変更したい(wlan0.sh編)

ホスト名でアクセスできないことが分かったので色々考えてみた。
で、
piCorePlayerの設定をDHCPからStatic IPに変更して、
接続しているSSIDを識別してIPアドレスを設定すれば良いじゃん。
と思いついた!
早速、手元にある予備のRPiを使用して試してみる。

1.Static IPに変更
DHCPで振られたIPアドレス:192.168.3.188でpiCorePlayerにアクセスして、
Main Page>Beta tab>Static IPでDHCPからStatic IPに変更する。
192.168.3.97を指定してリブート

バッチリ変更したStatic IPに変更された。
192.168.3.97になった

で、ここからが問題。
piCorePlayerのシステム上のどこが変更になったのか?

2.設定状況の確認
piCorePlayerを初期設定するスクリプトは/optに置かれている。(ここ参照)
tc@pCP:~$
tc@pCP:~$ cd /opt
tc@pCP:/opt$ ls -a
./              .filetool.lst   bootlocal.sh    shutdown.sh     wlan0.sh
../             .xfiletool.lst  bootsync.sh     tcemirror
ブラウズしてみるとwlan0.shと分かる。

中身を確認してみる。
tc@pCP:/opt$ cat wlan0.sh 
#!/bin/sh
# Maintained by piCorePlayer
echo "[ INFO ] Running $0..."
NWOK=1
until [ -d /sys/class/net/wlan0 ]
do
    if [ $((CNT++)) -gt 50 ]; then
        echo -n "${RED}No Ethernet Adapter [wlan0] Found!${NORMAL}"
        NWOK=0
        break
    else
        echo -n "."
        sleep 0.5
    fi
done
if [ $NWOK -eq 1 ]; then
    ifconfig wlan0 192.168.3.97 netmask 255.255.255.0 broadcast 192.168.3.255 up
    route add default gw 192.168.3.1
    sudo echo nameserver 192.168.3.1 > /etc/resolv.conf
    /etc/init.d/settime.sh &
fi

設定したIPアドレスがありました。
このスクリプトを変更すれば良さそうです。

3.接続しているSSIDを取得する
WiFiの設定をするコマンドはiwconfigのようだ。
試してみる。

tc@pCP:~$ iwconfig 
lo        no wireless extensions.

wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"  
          Mode:Managed  Frequency:2.452 GHz  Access Point: 40:xx:xx:xx:xx:32   
          Bit Rate=39 Mb/s   Tx-Power=20 dBm   
          Retry short  long limit:2   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=57/70  Signal level=-53 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:7  Invalid misc:9   Missed beacon:0

という具合にSSIDを含んだ表示がされる。
wlan0に絞るには
tc@pCP:~$ iwconfig wlan0 
とすれば良い。

4.SSIDを評価する
iwconfigの結果に"TP-Link"が含まれているかを調べる。
tc@pCP:~$ iwconfig wlan0 | grep TP-Link ; echo $?
wlan0     IEEE 802.11  ESSID:"TP-Link_BC32"
0
tc@pCP:~$ iwconfig wlan0 | grep TPLink ; echo $?
1
という具合に評価できる。

5.評価結果を使用して接続するIPアドレスを変更する
Static IPの評価に加えてSSIDの評価を追加してみた。
grepが無言で動くように-qオプションを付けるよ。

tc@pCP:/opt$ sudo vi wlan0.sh
tc@pCP:/opt$ cat wlan0.sh
#!/bin/sh
# Maintained by piCorePlayer
echo "[ INFO ] Running $0..."
NWOK=1
until [ -d /sys/class/net/wlan0 ]
do
    if [ $((CNT++)) -gt 50 ]; then
        echo -n "${RED}No Ethernet Adapter [wlan0] Found!${NORMAL}"
        NWOK=0
        break
    else
        echo -n "."
        sleep 0.5
    fi
done
if [ $NWOK -eq 1 ] && iwconfig wlan0 | grep -q TP-Link ; then
    ifconfig wlan0 192.168.3.96 netmask 255.255.255.0 broadcast 192.168.3.255 up
    route add default gw 192.168.3.1
    sudo echo nameserver 192.168.3.1 > /etc/resolv.conf
    /etc/init.d/settime.sh &
else
    ifconfig wlan0 192.168.132.231 netmask 255.255.255.0 broadcast 192.168.132.20
    route add default gw 192.168.132.148
    sudo echo nameserver 192.168.132.148 > /etc/resolv.conf
    /etc/init.d/settime.sh &
fi

設定を保存するための呪文
tc@pCP:/opt$ sudo filetool.sh -b
Backing up files to /mnt/mmcblk0p2/tce/mydata.tgz / 
Done.

6.テスト!!
リブートしてみるよ。
tc@pCP:/opt$ sudo reboot

自宅WiFiには繋がらない。。。(T_T)
試しにテザリングしてみると繋がった。。。
テザリングができた

どうやらSSIDの評価ができてないようだ。。。
ダメだ(T_T)
どうしてなんだろう???

0 件のコメント:

コメントを投稿