🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

IPv4

IPv4(Internet Protocol version 4)は、インターネットプロトコルの一つ。インターネットに繋がったコンピューターや機器を識別するためのIPアドレスを32ビット表記で表わします。しかしIPv4は、限界があるため、IPv6が次世代プロトコルとして注目されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

3回答

3519閲覧

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

ka-zoo

総合スコア6

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

IPv4

IPv4(Internet Protocol version 4)は、インターネットプロトコルの一つ。インターネットに繋がったコンピューターや機器を識別するためのIPアドレスを32ビット表記で表わします。しかしIPv4は、限界があるため、IPv6が次世代プロトコルとして注目されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/09/26 01:06

前提・実現したいこと

ラズパイを使用した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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/09/26 01:11

えーと、しつもんはなんでしょうか
y_waiwai

2019/09/26 01:13

> 要はpcからのwifiを持っていないLinuxボードに対して無線で接続したいのですが Wifiもってないボードに無線で接続するって意味不明ですぜ
ka-zoo

2019/09/26 01:17

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

2019/09/26 04:16

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

2019/10/01 02:15

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

回答3

0

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/09/26 06:53

編集2019/09/26 07:01
mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ka-zoo

2019/10/01 00:50

DHCPサーバーは構成上に追加したく無いのですよね。。。 完全ローカルのネットワークで行いたいのですが、何か案はありませんかね。
mt08

2019/10/01 01:28 編集

個々にIPを設定すれば、DHCPサーバがなくても動きましたよ。
mt08

2019/10/01 02:06

ところで、ラズパイのWifiと、PCのWifiは、どのように接続してますか?
ka-zoo

2019/10/01 02:17

いろいろと詰まっていて試行錯誤しているのですが上手くいきません。 ラズパイのWiFiをアクセスポイントにしてPCと接続。PCからのパケットを固定IPのLinuxボードにトンネルというのがしたいのですがブリッジ機能と固定IPが併用出来ないのでしょうか。
ka-zoo

2019/10/01 02:26

ラズパイのWifiをアクセスポイント化し、ethとのブリッジまでは実装できたのですが、eth側を固定IPにするとeth0が認識されなくなります。
mt08

2019/10/01 02:54

いま、機材がないので、こちらで試せませんが、ラズパイのWiFiをアクセスポイントなら、 "Raspberry Pi 3で、WiFi-EthブリッジAP"(https://qiita.com/mt08/items/8eca5e2535abce9297a4)をベースにして、 eth0とwlan0をひっくり返して、wlan0をIP固定、/usr/sbin/dhcp-helper を使用しない、という感じでいけませんか?
ka-zoo

2019/10/01 03:08

>eth0とwlan0をひっくり返して これはどういった理由で行うのでしょうか。 PC---[wlan0]raspi[eth0]---Linuxボードという構成を固定IPで行いたいのですが、、、 理解力が低く申し訳ございません。
mt08

2019/10/01 15:34 編集

確認ですが、PC側でWifi-APをやる(Windows10のMobile Hotspotような機能)のではなく、 ラズパイにhostapdを入れる、ということですかね? (回答は、前者を仮定してます。)
ka-zoo

2019/10/01 23:56

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

2019/10/01 23:57

今晩、確認してみます。
ka-zoo

2019/10/02 00:10 編集

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

0

ベストアンサー

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/02 06:24

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ka-zoo

2019/10/07 02:19

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

0

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

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

投稿2019/09/26 01:39

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ka-zoo

2019/10/01 00:47

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問