LoginSignup
8
8

More than 3 years have passed since last update.

[メモ] Raspberry Pi 4BでWiFi-Ethブリッジして、有線LAN接続機器を使用する

Last updated at Posted at 2020-04-17

こんな感じ

Internet <=> [Router WifiAP] <~~~> [(wlan0) RPi (eth0)] <=> [Wired LAN Device(有線LAN接続機器)]

概要

  • 無線LANしか使えないとこ(部屋)で、有線LAN接続機器をつかいたい
  • Windowsでいうところの、インターネット共有、っぽいけど、ラズパイはDHCPサーバにならないで、大元のDHCPサーバからIPもらいます。Subnet分割もされません。

TL;DR

  1. Raspbian(2020-02-13-raspbian-buster-lite)をmicroSDに焼く。
  2. zipファイル(mt08-rpibridge-20200416-1.zip)をダウンロード、解凍する

    • rpibridge.sh : 設定スクリプト
    • ssh : sshログイン許可する
    • wpa_supplicant.conf : <= SSIDとパスワードを編集する.場所によっては、country=のとこも

      wpa_supplicant.conf
      ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
      update_config=1
      country=JP
      network={
              ssid="---SSID---"
              psk="---password---"
      }
      
  3. microSDのWindowsからファイルが見えるドライブ(FAT32)に↑の3つをコピーする。

  4. ラズパイに挿して起動。(設定ファイルにより、Wifiに接続するはず)

  5. sshにてログイン (デフォルトパスワードは、raspberry)
    ssh pi@raspberrypi.local

  6. ↓を実行すると必要なものをダウンロード、設定して、再起動する
    sudo /boot/rpibridge.sh

  7. 以上

環境

  • Raspberry Pi 4B
    (3B/3B+/2BにUSB Wifiドングル などでも動くと思いますが、パフォーマンスがよろしくないかと。)
  • Raspbian: 2020-02-13-raspbian-buster-lite

  • ネット環境
    • DHCPサーバは、RPiでない (例: 無線APルータがDHCPサービスを提供)
    • RPi Wifi(wlan0)
      • 無線APに接続、DHCPでIPを取得している(例:192.168.1.5/24)
    • RPi Ethernet(eth0)
      • IPは、wlan0に割り当てられたものと同じ、ネットマスク /32(例: 192.168.1.5/32)で設定される

関連

その他

  • 必要にせまられたら
    • (TODO) iperfでのパフォーマンス測定を書く
    • (TODO) 説明を書く
    • (TODO) 写真とか?

スクリプトの中身

rpibridge.sh
#!/usr/bin/env bash

set -e
[ $(id -u) -ne 0 ] && echo "try: sudo $0" >&2 && exit 1


apt-get update && apt-get install -y parprouted dhcp-helper
grep '^denyinterfaces eth0' /etc/dhcpcd.conf || echo denyinterfaces eth0 | tee -a /etc/dhcpcd.conf 
sed -i -e 's/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf

systemctl stop dhcp-helper
systemctl enable dhcp-helper
echo DHCPHELPER_OPTS=\"-b wlan0\" | tee /etc/default/dhcp-helper

# Avahi: enable-reflector=yes
sed -i -e 's/^#enable-reflector=no/enable-reflector=yes/' /etc/avahi/avahi-daemon.conf

cat <<'EOF' >/etc/systemd/system/parprouted.service
[Unit]
Description=proxy arp routing service
Documentation=https://qiita.com/mt08/items/00102a6d513194ea5a92
After=dhcpcd.service

[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
ExecStartPre=/bin/echo 'parprouted: wlan0 is online'
# clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
ExecStartPre=/sbin/ip addr flush dev eth0
ExecStartPre=/bin/bash -c '/sbin/ip addr add $(/sbin/ip -4 addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+\/")32 dev eth0'
ExecStartPre=/sbin/ip link set dev eth0 up
ExecStartPre=/sbin/ip link set wlan0 promisc on

#         v minus sign
ExecStart=-/usr/sbin/parprouted eth0 wlan0

ExecStopPost=/sbin/ip link set wlan0 promisc off
ExecStopPost=/sbin/ip link set dev eth0 down
ExecStopPost=/sbin/ip addr flush dev eth0

[Install]
WantedBy=multi-user.target
EOF
systemctl enable parprouted.service

systemctl daemon-reload
reboot
8
8
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
8
8