Open1

Wi-Fi が使える Ubuntu22.04 PC を無線ルーター化してインターネット疎通できるようにするbashスクリプト

PINTOPINTO
net_setting.sh
#!/bin/bash

RED=$'\e[31m'
YELLOW=$'\e[33m'
GREEN=$'\e[32m'
BLUE=$'\e[44m'
RESET=$'\e[0m'

########## 0. 環境確認
read -p "${GREEN}Ubuntuの設定画面でWi-Fiを有効にしましたか? [y/n]: ${RESET}" response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
    printf "${YELLOW}処理を中断します。${RESET}\n"
    exit 1
fi
read -p "${GREEN}モバイルルーターあるいはインターネット疎通できる有線LANは接続しましたか? [y/n]: ${RESET}" response
if [[ ! "$response" =~ ^[Yy]$ ]]; then
    printf "${YELLOW}処理を中断します。${RESET}\n"
    exit 1
fi

printf "\n${GREEN}現在有効なネットワークインタフェース一覧:${RESET}\n"
ip -o link show | awk -F': ' '{print $2}' | awk '{print $1}'
available_interfaces=$(ip -o link show | awk -F': ' '{print $2}' | awk '{print $1}')

printf "\n"
read -p "${GREEN}上記の一覧の中からローカルネットワーク化するWi-FiのNWインタフェース名を選んで入力してください。: ${RESET}" WNWIF
# 入力されたインタフェース名が一覧に存在するか確認
if echo "$available_interfaces" | grep -q "^$WNWIF$"; then
    :
else
    printf "${RED}インタフェース '${WNWIF}' は存在しません。処理を終了します。${RESET}\n"
    exit 1
fi

# SSIDとパスフレーズの入力
read -p "${GREEN}Wi-Fiで使用する任意のSSIDを指定してください。:${RESET} " SSID
while true; do
    printf "${GREEN}任意のパスフレーズを指定してください。(8文字以上): ${RESET}"
    PASSPHRASE=""
    while IFS= read -r -s -n1 char; do
        if [[ $char == "" ]]; then
            echo
            break
        fi
        if [[ $char == $'\x7f' ]]; then
            if [ -n "$PASSPHRASE" ]; then
            PASSPHRASE=${PASSPHRASE%?}
            echo -ne "\b \b"
            fi
        else
            PASSPHRASE+="$char"
            echo -n "*"
        fi
    done
    if [ ${#PASSPHRASE} -ge 8 ]; then
        break
    else
        printf "${RED}パスフレーズは8文字以上である必要があります。再度入力してください。${RESET}\n"
    fi
done

read -p "${GREEN}上記の一覧の中からインターネット通信用のインタフェース名を選んで入力してください。: ${RESET}" INIF
# 入力されたインタフェース名が一覧に存在するか確認
if echo "$available_interfaces" | grep -q "^$INIF$"; then
    :
else
    printf "${RED}インタフェース '${INIF}' は存在しません。処理を終了します。${RESET}\n"
    exit 1
fi

########## 1. Wi-Fiソフトウェアルータの設定とインタネット向けフォワーディングの設定
file_name="lnxrouter"

if [ -f "$file_name" ]; then
    :
else
    # ファイルが存在しない場合はコマンドを実行
    wget -O lnxrouter https://github.com/garywill/linux-router/raw/fbad56f05ca79e7450c8a62090dfe84f28f84d6a/lnxrouter
    sudo chmod +x lnxrouter
fi

sudo apt-get update > /dev/null 2>&1
sudo apt-get install -y \
iw \
hostapd \
dnsmasq \
iproute2 \
iptables > /dev/null 2>&1

sudo systemctl stop hostapd dnsmasq

printf "\n"
printf "${GREEN}インターネット インタフェース:${RESET} ${INIF}\n"
printf "${GREEN}Wi-Fi インタフェース:${RESET} ${WNWIF}\n"
printf "${GREEN}Wi-Fi SSID:${RESET} ${SSID}\n"
printf "\n"

sudo ./lnxrouter -i ${INIF} --ap ${WNWIF} ${SSID} -p ${PASSPHRASE} --no-virt --daemon

printf "\n"
printf "${GREEN}Wi-Fiアクセスポイントとインターネット通信が有効になりました。\n"