前提・実現したいこと
ラズパイを使用した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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/26 01:13
2019/09/26 01:17
2019/09/26 04:16
2019/10/01 02:15
回答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総合スコア1825
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/01 00:50
2019/10/01 01:28 編集
2019/10/01 02:06
2019/10/01 02:17
2019/10/01 02:26
2019/10/01 02:54
2019/10/01 03:08
2019/10/01 15:34 編集
2019/10/01 23:56
2019/10/01 23:57
2019/10/02 00:10 編集
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
実行
- 優先LANを接続して、ラズパイ2B/3B起動。
- Windowsから、Wifi-APのSSID = raspberry、 Password = passw0rd で接続
- pingを飛ばしてみる。初回はタイムアウトしたりする
投稿2019/10/02 06:24
総合スコア1825
0
brctl でLinuxマシンをHUBにする
ここらへんのかなしかな。。
#「linux ブリッジ接続」でぐぐるといろいろ出てきますねー
投稿2019/09/26 01:39
総合スコア88038
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。