0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

バックアップ用のWi-Fi-Ethernet中継機をRaspberryPiで作った話

Last updated at Posted at 2021-09-09

経緯

私の部屋の有線LANはbuffaloのwifi中継機から伸びていて、その中継機がよく親機との接続が切れるのでそのたびに再起動する必要があった
毎回再起動するのはヒジョーに面倒だが家にいるときはそれでいい
しかし、外からリモートデスクトップ等でPCに接続することが多々あるので、そういった中継機にアクセスできないときのために自動でつながってくれるバックアップ用の中継機を作った

環境

Computer: Raspberry Pi 3B
      OS: Ubuntu 20.04.3 LTS

やったこと

OSのインストールは割愛

wifi, ethernet設定

netplanを使用して以下の用に設定

eth0

  • DHCPオフ
  • IPアドレス無し

wlan0

  • DHCPオフ
  • IPアドレス: 192.168.0.252/24
  • gateway: 192.168.0.1
  • DNS: 8.8.8.8, 8.8.4.4
  • 自分の環境のAP設定
$ sudo vim /etc/netplan/99-config.yaml
/etc/netplan/99-config.yaml
network:
    ethernets:
        eth0:
            dhcp4: false
            dhcp6: false
    wifis:
        wlan0:
            dhcp4: false
            addresses: [192.168.0.252/24]
            optional: true
            gateway4: 192.168.0.1
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
            access-points:
                "hogehoge":
                    password: "SUGOI TUYOI PASSWORD"
    version: 2

設定の適用

$ sudo netplan apply

おそらくこの時sshが切断されるので接続し直すなどする

必要なパッケージのインストールと設定

dhcp-helper(DHCPリレー)とparprouted(Proxy ARPブリッジ)のインストール

$ sudo apt install dhcp-helper parprouted

dhcp-helperの設定

wlan0を使用してDHCP Requestをリレーするように設定する

$ sudo vim /etc/default/dhcp-helper
/etc/default/dhcp-helper
# Option flags used to start dhcp-helper.
#
# You will need at least "-s <DHCP server>" or
# "-b <interface> so that dhcp-helper knows where 
# to relay DHCP requests. 
#
# See "man 8 dhcp-helper" for more details.  

DHCPHELPER_OPTS="-b wlan0"

自動起動するようにsystemctlで設定

$ sudo systemctl enable dhcp-helper

IPフォワードの設定

IPフォワードを有効化する

$ sudo vim /etc/sysctl.conf

28行目あたりに以下の設定があるのでコメントアウトを解除する

/etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

これで設定は完了したので、適当なIPアドレスをeth0に設定してparprouted wlan0 eth0を実行すれば一応Wifi-Ethernetの中継を行なってくれる

メインの中継機の状態に応じて自動起動する設定

メインの中継機の状態に応じて中継機能のオンオフを行なうスクリプトの作成

/usr/local/binbackupRepeater.shを作成して以下の内容を書き込んだ

/usr/local/bin/backupRepeater.sh
#!/bin/sh

#   Main Repeater IP Address
RPTR_ADDR="192.168.0.253"

#   Ping Check
ping $RPTR_ADDR -c 1 >> /dev/null
if [ $? != 0 ]; then
    ip addr flush dev eth0
    ip addr add ${RPTR_ADDR}/32 dev eth0
    ip link set dev eth0 up
    ip link set wlan0 promisc on

    parprouted wlan0 eth0

    echo "Backup Repeater UP"
else
    ip link set wlan0 promisc off
    ip link set dev eth0 down
    ip addr flush dev eth0

    echo "Backup Repeater DOWN"
fi

やっていることとしては以下の通り

  1. 中継機のIPアドレスに対してpingを飛ばす
  2. pingの標準出力が0以外(疎通しなかった)の場合
    1. eth0に設定されているアドレスを全削除
    2. wlan0に設定したIPアドレス(ここでは192.168.0.252)でサブネットマスクが32bitのアドレスをeth0に設定
    3. eth0をリンクアップ
    4. wlan0をプロミスキャスモードに設定
    5. proxy ARPブリッジの起動
  3. pingの標準出力が0(疎通した)の場合
    1. wlan0のプロミスキャスモードを解除
    2. eth0のリンクダウン
    3. eth0に設定されているアドレスを全削除

crontabで1分に1回実行

$ sudo vim /etc/crontab

/etc/crontabに以下の内容を追記した

/etc/crontab
# backup repeater
*  *	* * *	root	sh /usr/local/bin/backupRepeater.sh

crontabの再起動

$ sudo systemctl restart cron

動作確認

適当に中継機の電源引っこ抜いて動作確認した結果1分以内にインターネットへの接続がもどってきてるのでヨシ!!
ただ、メインの中継機が戻ってきたとき、起動してから中継機としての機能が使用可能になるのにちょっと時間がかかるのでこっちは若干遅い

あとがき

  • 未だ外から家のPCにアクセスしようとして接続できなかったことはないが、今後も無いとは言い切れないのでバックアップができて安心した
  • crontabで1分に1回ping飛ばして確認するのはあんまり賢い感じがしないので、いい感じの方法あったら教えて偉い人
  • 書き終わって一通り読み返して思った「ケーブルで引っ張ってくるかメッシュwifi使うか強い中継機買えばよくね?」

参考文献

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?