イーサネットポートを介してPiのWiFi接続を共有する


28

raspbianの最新リリースを実行しているpiがあり、ワイヤレスUSBドングルを使用してインターネットに接続しています。LANケーブルを使用してpiに接続されたすべてのコンピューターがインターネットを受信できるように、piのwifi接続を共有することです。インターネットを見て回ったが、関連性のあるものを見つけることができないようだ。私はWindowsとMac OS Xでこのプロセスに精通していますが、piでこれを行うと困惑しました。

編集:これが誰かに役立つかどうかわかりませんが、私はpiでwlan0経由でインターネットに接続していますが、eth0経由でそのインターネット接続を共有したいと思います。


PiでWiFi接続とイーサネット接続をブリッジし、ルーターに接続する方が簡単です。これはアプリケーションで可能ですか?
tlhIngan

@tlhIngan残念ながら、イーサネットソケットにアクセスできず、PXEからラップトップを起動する必要があります。これはイーサネットで行う必要があります。また、Linuxについてもっと学びたいと思っています。このプロジェクトを構築することで、Linuxに少し自信が持てると思いました。私のルーターは私の家の向こう側にあるので、これは簡単な解決策だと思いました:/とにかく、返信ありがとうございます。

このチュートリアルビデオは、まさにあなたが必要とするものを見つけました:youtu.be/IAa4tI4JrgI Raspberry PIは、wifiからイーサネットポートまでのインターネットを共有します。
Mia19

@tlhIngan-詳しく説明してもらえますか?ブリッジを作成するにはルーターも必要ですか?ネットワークオーディオレシーバーでPis WiFi over Ethernetを共有し、メインルーターと同じサブネットとDHCPに配置する必要があります。
square_eyes

回答:


40

以下のためのRaspbianジェシー

このドキュメントから:

dnsmasqこの目的のためにパッケージを使用するのは、DHCPサーバーとDNSサーバーが組み合わされており、構成も簡単だからです。

もう少し「重い」ものが必要な場合は、DHCPとDNSのパッケージisc-dhcp-serverbind9パッケージをそれぞれ使用できますが、ここでの目的のためにはdnsmasqうまくいきます 。

sudo apt-get install dnsmasq

インターフェイスを構成する必要があります。eth0ゲートウェイとして使用される静的IPアドレスを割り当て ます。interfacesファイルを開きます

sudo nano /etc/network/interfaces

次のeth0ようにセクションを編集します。

allow-hotplug eth0  
iface eth0 inet static  
    address 192.168.2.1
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255

次に、を構成しますdnsmasq。出荷されたdnsmasq設定ファイルには、使用方法に関する多くの情報が含まれています。そのため、移動して新しいものを作成することをお勧めします。

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig  
sudo nano /etc/dnsmasq.conf

以下を新しいファイルに貼り付けます

interface=eth0      # Use interface eth0  
listen-address=192.168.2.1 # listen on  
# Bind to the interface to make sure we aren't sending things 
# elsewhere  
bind-interfaces
server=8.8.8.8       # Forward DNS requests to Google DNS  
domain-needed        # Don't forward short names  
# Never forward addresses in the non-routed address spaces.
bogus-priv
# Assign IP addresses between 192.168.2.2 and 192.168.2.100 with a
# 12 hour lease time
dhcp-range=192.168.2.2,192.168.2.100,12h 

/etc/sysctl.confファイルを編集してパケット転送を有効にします

sudo nano /etc/sysctl.conf

これを#含む行の先頭からを 削除すると、net.ipv4.ip_forward=1次の再起動時にパケット転送が有効になります。ただし、再起動せずに今すぐ試してみたい場合は、これを実行してください。

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

また、RPiのインターネット接続をWi-Fiで接続されたデバイスと共有する必要があります。との間eth0で NATを構成しますwlan0

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE  
sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT  

ただし、Piをリブートするたびにこれらのルールを適用する必要があるため、実行 sudo sh -c "iptables-save > /etc/iptables.ipv4.nat" してファイルにルールを保存します/etc/iptables.ipv4.nat。これで、再起動のたびにこれを実行する必要があるので、行のすぐ上で次の行を追加して/etc/rc.localファイルを開きます 。sudo nano /etc/rc.localexit 0

iptables-restore < /etc/iptables.ipv4.nat  

そして、それだけです!RPiを再起動するだけで、インターネットにアクセスできるようになります

sudo reboot

Raspbian Stretch用に更新されました

上記の設定は、Raspbianの新しいバージョンでは機能しません。それで、私はこれのためのスクリプトを作成しました。

このガイドを使用してWiFiネットワークに接続します。

ここからスクリプトをダウンロードします。に置く/home/pi/

/home/pi/.config/lxsession/LXDE-pi/autostartファイルを開く

nano /home/pi/.config/lxsession/LXDE-pi/autostart

最後の行を追加します。

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
sudo bash /home/pi/wifi-to-eth-route.sh

ファイルへのフルパスを指定したことを確認してください。これで完了です。次に、再起動して変更を確認します

sudo reboot

1
どうもありがとうございました。私のpiでこれを試したところ、接続は正常でした!もう一度お時間をいただきありがとうございます。それは有り難いです。

1
これは、ワイヤレスデバイスとインターネット接続を共有するのに最適です。ただし、ネットワーク内の別のラップトップからデバイスにアクセスしたいのですが、うまくいきません。サブネットが異なるためだと思いますか?それを回避するためのヒントはありますか?
ビョルンアンダーソン

1
Raspbianストレッチの下で、私は手動での/ etc /ネットワーク/インターフェースに無線LANの設定を含める必要があったが、それは、完全に働い
XFX

1
@ xfx、WiFi設定用に追加したコードを見せていただけますか?
karl71

1
あなたの投稿とリンクを注意深くフォローしました。私のPi(OSの新規インストール)で、「静的」という言葉を追加すると、Wi
...-karl71

6

LANデバイスへのインターネットアクセスを提供することを目的とする場合、二重の「NAT」は大きな問題ではないと想定します。
この構成では、インターネットアクセスの恩恵を受ける非WiFiデバイスへのワイヤレスアクセスを提供します。
図

前提条件

Wi-Fiが適切に構成され動作していることを確認してください。何かがうまくeth0いかない場合、デバイスへのアクセスが制限されるか、存在しなくなります。

セットアップ

開始するにはいくつかのパッケージが必要です。

apt-get update
apt-get install network-manager isc-dhcp-server

インターフェース

/etc/network/interfaces以下と一致するようにファイルを編集します。これにより、eth0が修正IPアドレス(10.10.10.1)に設定され、再作成されresolv.confます。

auto lo
iface lo inet loopback

iface default inet dhcp

allow-hotplug eth0
iface eth0 inet static
  address 10.10.10.1
  network 10.10.10.0
  netmask 255.255.255.0
  broadcast 10.10.10.255
  gateway 10.10.10.1

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
  up cat /etc/resolv.conf | sed 's/ver /ver 127.0.0.1,/g' > /etc/resolv_local.conf
  up cat /etc/resolv.conf | sed 's/ver /ver 127.0.0.1,/g' > /etc/resolv.conf

DHCP

デフォルトのdhcp構成を変更して信頼できるようにし、LANネットワーク(10.10.10。*)を/etc/dhcp/dhcpd.conf追加し、ファイルを編集し、次のコンテンツを追加します。

# configuration for the bridge internal subnet.
subnet 10.10.10.0 netmask 255.255.255.0 {
  range 10.10.10.101 10.10.10.119;
  option domain-name-servers 8.8.8.8;
  option domain-name "domain.local";
  option routers 10.10.1.1;
  default-lease-time 600;
  max-lease-time 7200;
}

IPTABLES

次のスクリプトを作成して、再起動のたびにネットワークをセットアップして開始します。スクリプトは、いくつかの「IPTABLES」ルールを動的に作成します。名前を付けてください/root/bridge.sh

#!/bin/bash
LOCAL_IFACE=eth0
INET_IFACE=wlan0

# this is where the dhcp info comes in. We need the default gateway
# /var/lib/dhcp/dhclient.wlan0.leases
f=/var/lib/dhcp/dhclient.$INET_IFACE.leases
GATEWAY=$(cat $f| grep "option route" | tail -1 |awk '{print $3}'| sed 's/;//')

IPT=$(which iptables)
# get the wlan address
INET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print $2}' |awk -F$

# Flush the tables
$IPT -F INPUT
$IPT -F OUTPUT
$IPT -F FORWARD
$IPT -t nat -F

$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT

# Allow forwarding packets:
$IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT
$IPT -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

# Packet masquerading
$IPT -t nat -A POSTROUTING -o $INET_IFACE  -j SNAT --to-source $INET_ADDRESS
$IPT -t nat -A POSTROUTING -o $LOCAL_IFACE -j MASQUERADE

# save the created tables 
iptables-save > /etc/network/iptables

#cat /proc/sys/net/ipv4/ip_forward
# make sure we are forwarding packets
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl --system > /dev/nul

#remove the default route, usually on eth0 interface
route del default
#ifdown $INET_IFACE  && ifup $INET_IFACE
#ensure is $INET_IFACE now...
route add default gw $GATEWAY $INET_IFACE
gw=$(route -n -A inet | grep '^0.0.0.0' |awk '{ print $2 }')
echo "default route is now " $gw

最後に

最後に、再起動するたびにスクリプトを実行する必要がありexit 0ます。ファイル/etc/rc.localの前に次の2行を追加して、前に作成したスクリプトを実行します。

# will run the bridge on startup
sudo ./root/bridge.sh

ここで、デバイスを再起動するだけで、ブリッジが機能します。

pd:sudo簡潔にするために省略されました。sudo -iEとしてセッションを使用するroot


うわー!このような詳細な回答をありがとうございます!こんなに複雑だとは思いもしませんでしたが、取り組むことができると思います。再度感謝します、私は数時間でそれを試してみて、それがうまくいくならば、私は答えとしてあなたをマークします。

@GrowlingSolidそれはそれほど複雑であってはなりません。答えは、Raspbianのデフォルトnetwork-managerであると互換性のないネットワークの管理に使用しdhcpcdます。代替マネージャーを使用しても何も問題はありませんが、無効にする必要がありますdhcpcd(答えは、停止dhcpするようdhcpcdに間接的に行います)。また、GUIでのWiFiサポートが機能しなくなります。
ミリウェイズ

1
私は自分自身に通知し、あなたの代わりにこの正しい行に来ました:INET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print $2}' | awk -F ":" '/1/ {print $2}')あなたの「偽」バージョンは次のINET_ADDRESS=$(ifconfig $INET_IFACE |grep "inet addr" |awk '{print $2}' |awk -F$
とおり
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.