質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.37%

ラズパイ上での固定ipのeth-wifiブリッジ機能

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 4,538

score 6

前提・実現したいこと

ラズパイを使用したeth-wifiのブリッジ機能を実現させたい。

ここに質問の内容を詳しく書いてください。
以下のような構成の物を作成したいと考えています。

Linuxボード--eth--ラズパイ--wifi--pc

Linuxのipアドレスは固定としています。
要はpcからのwifiを持っていないLinuxボードに対して無線で接続したいのですが
ラズパイ上でブリッジ機能を実現すればいいのでしょうか。

また、ラズパイ上のインターフェイスのipアドレスはどのような設定にすればいいのでしょうか。

現在は

DHCPサーバー--eth--ラズパイ--wifi--pc

この様な構成ではpcからネットワークに出ることは確認できています。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Linux
Raspbian Jessie Lite

試したこと

eth側を固定ipに設定することは必須だと思っていますので、
固定ipに設定しました。Linuxボードとのpingは確認できています。

補足情報(FW/ツールのバージョンなど)

Raspbian Jessie Lite

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ka-zoo

    2019/09/26 10:17

    質問が伝わり辛く申し訳ございません。
    Linuxボード--有線--ラズパイ--無線--pc
    この様な構成をしたいため、間にラズパイを入れてブリッジ機能を実現したいのです。

    キャンセル

  • t_obara

    2019/09/26 13:16

    ブリッジだと、同一ネットワークになるのですが、それが許容されるのでしょうか?基本的に単なるHubなのでラズパイにIPは保持されません。
    無線側の設定を固定IPに合わせて設定する必要があります。Linuxボード側を固定にする必要があるのでしょうか。

    キャンセル

  • ka-zoo

    2019/10/01 11:15

    遅くなり申し訳ございません。
    Linuxボードを固定IPで運用しています。ラズパイのIPアドレスに関しては特に規定はありません。
    同一ネットワークで問題ありません。

    キャンセル

回答 3

+2

ka-zooさん、

以下の環境、手順で動きました。
eth0につなげるクライアントPCでdhcp取得でIP取れます。(ブリッジされたどこかにDHCPでIPを配るルータなどがあれば)

こんな感じです

  • インターネット --- DHCPサーバ /Wifi-AP---  [wlan0 ラズパイ eth0] --- PC

環境

  • Raspberry Pi 3B+
  • Raspbian: 2019-07-10-raspbian-buster-lite (いま、これしかないので. あと、3B+は、Jessie未対応ですよね..)
  • wlan0側がAPに接続されて、インターネット側
  • eth0がPCなどクライアントに接続。
  • クライアントは、Windows10にて。DHCP、固定IPどちらも動作OKでした。

手順

a. パッケージ更新、必要なパッケージインストール、再起動
sudo sh -c 'apt update && apt upgrade -y && apt install -y  parprouted dhcp-helper bcrelay iproute2 && reboot'

b. sudo raspi-config でパスワードとホスト名あたりを変更、Wifiへ接続をする

     1 Change User Password 
     2 Network Options 
       N1 Hostname
       N2 Wi-fi


c. sshで作業している場合、Wifi接続後はwlan0経由で行うこと。
eth0はIPを取らなくなります。eth0に接続していたケーブルは、クライアントPCに接続する(LEDが点滅するかな?
d. 再起動(sudo reboot)
e. 設定変更

# eth0はdhcpcdで管理しない.
grep '^denyinterfaces eth0' /etc/dhcpcd.conf || echo denyinterfaces eth0 | sudo tee -a /etc/dhcpcd.conf
#ip_forwardを有効に
sudo sed -i -e 's/^#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
#設定反映
sudo sh -c 'sysctl -p && systemctl daemon-reload && systemctl restart dhcpcd'

f. 再起動(sudo reboot)...念の為
g. スクリプト(/home/pi/bridge.sh)作成.. 以下コピペ.

cat << 'EOF' > /home/pi/bridge.sh
!#/bin/sh
DHCP_SERVER=$(grep -R "offered" /var/log/* 2>/dev/null | tail -n1 | awk '{print $(NF)}') 
#
true ${IP_ADDR_WLAN:=$(/sbin/ip -4 -br addr show wlan0| /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")}
true ${INTERFACE_WLAN:=wlan0}
true ${INTERFACE_ETH:=eth0}
#
ip addr flush dev ${INTERFACE_ETH}
ip addr add ${IP_ADDR_WLAN}/32 dev ${INTERFACE_ETH}
ip link set ${INTERFACE_ETH} up
#
/sbin/ip link set ${INTERFACE_ETH} promisc on
/sbin/ip link set ${INTERFACE_WLAN} promisc on
#
/usr/sbin/parprouted -d ${INTERFACE_WLAN} ${INTERFACE_ETH} &
/usr/sbin/bcrelay -d -i ${INTERFACE_WLAN} -o ${INTERFACE_ETH}
/usr/sbin/dhcp-helper -s ${DHCP_SERVER} -b ${INTERFACE_WLAN}
EOF

#実行属性
chmod a+x /home/pi/bridge.sh

h. /etc/rc.local編集(exit 0の前にスクリプトを呼び出す)

...
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# bridge.sh呼び出し. 
/home/pi/bridge.sh

exit 0

i. 再起動(sudo reboot)


  • Raspberry Pi 3で、WiFi-EthブリッジAPから、hostapdをとって、wlan0とeth0を逆にしたようなものです。
  • クライアントを固定IPにする場合は、IPアドレス、ネットマスク、ゲートウェイ、DNSサーバの設定などちゃんとしないと、インターネットにうまくつながらないかもです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/02 08:56

    伝わっておらず申し訳ございません。後者を考えていました。

    キャンセル

  • 2019/10/02 08:57

    今晩、確認してみます。

    キャンセル

  • 2019/10/02 09:09 編集

    すみません。お手数をおかけします。
    私が今試しているところまでを以下に記載しておきます。
    "https://azriton.github.io/2017/03/22/Raspberry-Pi-3-を-WiFi-アクセス・ポイント化する/”Raspberry Pi 3 を WiFi アクセス・ポイント化する
    を参考に試しており、eth0の先がDHCPサーバー(WANの口)である時にはPCがネットワークに接続できています。eth0の先を固定IPに設定した時に動作せずに困っている状態です

    キャンセル

checkベストアンサー

+1

ka-zooさん、

別回答として書きます。以下の実機で確認しました。

環境

  • Windows 10 PC (WiFi で RPi 3Bに接続 / IP:192.168.123.222)

  • Raspberry Pi 3B (eth0/wlan0でブリッジする / eth0=wlan0-IP:192.168.123.123)

  • Raspberry Pi 2B (Linuxボード / eth0=IP:192.168.123.10)

  • Raspbian: 2019-07-10-raspbian-buster ベース (2B/3Bとも)

設定

Windows 

  • Wifiのアダプタの設定を開いて、IPv4のIPを設定(192.168.123.123)

Raspberry Pi 2B (Linuxボード / eth0=IP:192.168.123.10)

  • /etc/dhcpcd.conf 
...
# eth0: IP固定
interface eth0
static ip_address=192.168.123.10/24

Raspberry Pi 3B (eth0/wlan0でブリッジする / eth0=wlan0-IP:192.168.123.123)

  • 必要なパッケージ導入
sudo apt-get update && sudo apt-get install -y parprouted  hostapd bcrelay iproute2
  • /etc/dhcpcd.conf 
...
# wlan0: dhcpcd管理から外す
denyinterfaces wlan0
# eth0: IP固定
interface eth0
static ip_address=192.168.123.123/24
  • /etc/sysctl.conf #コメントを外して、ip_forwatdを有効にする
...
net.ipv4.ip_forward=1
...
  • /home/pi/bridge_hostapd.sh として、以下のスクリプトを保存. 実行属性をつけるchmod a+x /home/pi/bridge_hostapd.sh
#!/bin/bash

# Check if running in privileged mode
if [ ! -w "/sys" ] ; then
    echo "[Error] Not running in privileged mode."
    exit 1
fi

# Default values
true ${IP_ADDR_ETH:=$(/sbin/ip -4 -br addr show eth0| /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")}
true ${SSID:=raspberry}
true ${CHANNEL:=11}
true ${WPA_PASSPHRASE:=passw0rd}
true ${HW_MODE:=g}

true ${INTERFACE_WLAN:=wlan0}
true ${INTERFACE_ETH:=eth0}


if [ ! -f "/etc/hostapd.conf" ] ; then
    cat > "/etc/hostapd.conf" <<EOF
interface=${INTERFACE_WLAN}
${DRIVER+"driver=${DRIVER}"}
ssid=${SSID}
hw_mode=${HW_MODE}
channel=${CHANNEL}
wpa=2
wpa_passphrase=${WPA_PASSPHRASE}
wpa_key_mgmt=WPA-PSK
# TKIP is no secure anymore
#wpa_pairwise=TKIP CCMP
wpa_pairwise=CCMP
rsn_pairwise=CCMP
wpa_ptk_rekey=600
wmm_enabled=1

# Activate channel selection for HT High Througput (802.11an)

${HT_ENABLED+"ieee80211n=1"}
${HT_CAPAB+"ht_capab=${HT_CAPAB}"}

# Activate channel selection for VHT Very High Througput (802.11ac)

${VHT_ENABLED+"ieee80211ac=1"}
${VHT_CAPAB+"vht_capab=${VHT_CAPAB}"}
EOF

fi

# 
echo "set ip_forward to 1"
echo "1" > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward

# Setup interface and restart DHCP service
ip addr flush dev ${INTERFACE_WLAN}
ip addr add ${IP_ADDR_ETH}/32 dev ${INTERFACE_WLAN}
ip link set ${INTERFACE_WLAN} up

sudo /sbin/ip link set ${INTERFACE_WLAN} promisc on
sudo /sbin/ip link set ${INTERFACE_ETH} promisc on

/usr/sbin/parprouted ${INTERFACE_ETH} ${INTERFACE_WLAN} &
/usr/sbin/bcrelay -d -i ${INTERFACE_ETH} -o  ${INTERFACE_WLAN}

echo "Starting HostAP daemon ..."
/usr/sbin/hostapd /etc/hostapd.conf &
  • /etc/rc.local : exit 0の前あたりで、スクリプトを呼び出す。
/home/pi/bridge_hostapd.sh
exit 0

実行

  1. 優先LANを接続して、ラズパイ2B/3B起動。
  2. Windowsから、Wifi-APのSSID = raspberry、 Password = passw0rd で接続
  3. pingを飛ばしてみる。初回はタイムアウトしたりする

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/07 11:19

    ありがとうございます!
    こちらで実現出来ました!

    キャンセル

+1

brctl でLinuxマシンをHUBにする
ここらへんのかなしかな。。

#「linux ブリッジ接続」でぐぐるといろいろ出てきますねー

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/01 09:47

    wlan0をbrctlに追加した際にエラーが発生します。どうやらwlan0はサポートされていないようです

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る