ラズパイゼロをUSBドングルにしてインターネット接続
前回セットアップしたラズパイゼロ (Raspberry Pi Zero WH)をUSBドングル替わりにしてパソコンをインターネットに接続する方法です。 今回は、以下のような感じでインターネットへ出ることを想定しています:
[PC] <==USBケーブル==> [ラズパイ] <--Wi-Fi--> [ルーター] --- インターネット
| | PC | ラズパイ | ルーター (SSID: MyRouter) | |--|----|----------|---------| | IP | 192.168.2.2 |usb0: 192.168.2.1 /wlan0: 192.168.179.x | 192.168.179.1 / グローバルIP |
目次
前提
- セットアップ対象のラズパイはRaspberry Pi Zero WH(OSは Raspbian Stretch Lite版)
- 今回もラズパイのモニター無し、キーボード無し、そしてLANケーブルも無しでセットアップ (ただしOTG接続のためにUSBケーブルは使います)
- ラズパイは既にインターネットには接続できている状態
- ラズパイに接続する外部パソコンはLinux
では、はじめましょう。 まずはパソコンとラズパイをUSB OTG接続し、SSHログインしてください:
$ ssh -i .ssh/rpi/id_rsa pi@raspberrypi.local
ラズパイ・ルーター間のIPアドレスを動的割当に変更 (オプション)
前回ラズパイのルーター側のIPアドレスを固定しましたが、今回はそれをコメントアウトします。これはWi-FiルーターからIPアドレスを動的にもらうためです。(これは特に必須というわけではありません。)
ラズパイのDHCPクライアントデーモンの設定をコメントアウト:
/etc/dhcpcd.conf
...
## コメントアウト!
#interface wlan0
#static ip_address=192.168.179.10/24
#static routers=192.168.179.1
#static domain_name_servers=192.168.179.1
ラズパイ側のネットワーク設定
インターフェース設定を変更
interfaces
ファイルにwlan0(Wi-Fi側) とusb0(パソコン側) のインターフェースをそれぞれ設定します。
/etc/network/interfaces
...
# ルーター側IF(Wi-Fi):
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# パソコン側IF(USB):
allow-hotplug usb0
iface usb0 inet static
address 192.168.2.1
netmask 255.255.255.0
dns-nameservers 192.168.2.1 8.8.8.8
Wi-Fiルーターからインターネットへの接続情報が書かれているwpa_supplicant.conf
は前回のままでOKです。(ラズパイがちゃんとインターネットに繋がっているか予め確認しておいてください)
ルーティングとマスカレードの設定
sysctl.conf
のnet.ipv4.ip_forward
を有効化:
/etc/sysctl.conf
...
# コメントを外す!
net.ipv4.ip_forward=1
...
iptablesルールを設定&保存:
pi@raspberrypi:~ $ sudo iptables -t nat -A POSTROUTING -s 192.168.2.0/24 ! -d 192.168.2.0/24 -j MASQUERADE
pi@raspberrypi:~ $ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
rc.local
のexit 0
の直前に先ほど保存したiptablesルールの読込処理を追加:
/etc/rc.local
...
# 追加!
iptables-restore < /etc/iptables.ipv4.nat
exit0
ラズパイを再起動:
pi@raspberrypi:~ $ sudo reboot
パソコン側のネットワーク設定
ラズパイがUSBでPCと接続されていることを確認後、パソコン上でifconfig
を実行し、ラズパイがUSB接続されているインターフェース名を探します。このインターフェース名は大概en
から始まります:
$ ifconfig
...
## 発見!
enp0s20f0u1 Link encap:イーサネット ハードウェアアドレス 62:2b:ed:4f:40:df
...
TIP: USBインターフェースがifconfigに現れない?
USBを接続してもインターフェース名が見つからない場合、ラズパイを$ sudo reboot
とかせずにUSBケーブルを抜き差しで強制的に電源を落としてから起動すると、どういうわけか出現することがあります。
インターフェース名が見つかったらNetworkManagerで以下のように接続設定し、接続してください:
- 接続名:rpi0-usb(ここは各自ご自由に)
- デバイス:enp0s20f0u1(見つけたインターフェース名)
- IPv4設定
- 方式:手動
- アドレス:192.168.2.2(このパソコンに割り振るIPアドレス)
- ネットマスク:24(255.255.255.0)
- ゲートウェイ:192.168.2.1(ラズパイ)
- DNS サーバー:8.8.8.8(Googleの無料パブリックDNS)
上記をコマンドラインで設定するなら以下を実行するだけでOK:
# 接続設定を新規作成:
$ nmcli con add type ethernet con-name "rpi0-usb" ifname "enp0s20f0u1"
# 接続設定を編集:
$ nmcli con modify rpi0-usb ipv4.addresses "192.168.2.2/24" ipv4.method "manual" ipv4.gateway "192.168.2.1" ipv4.dns "8.8.8.8"
# 再接続:
$ nmcli con down "rpi0-usb"; nmcli con up "rpi0-usb"
設定は以上です!
これで、パソコンからラズパイをUSBドングルとして経由し、インターネットへ接続できるようになります。(もちろんラズパイ自身がちゃんとインターネットに繋がっている必要があります)
実際にUSB以外の全てのネットワークを切断した上で、パソコンから外へpingを打ってみましょう:
$ ping www.google.com
PING www.google.com (216.58.197.4) 56(84) bytes of data.
64 bytes from kix06s02-in-f4.1e100.net (216.58.197.4): icmp_seq=1 ttl=51 time=71.4 ms
...
大成功!
ひとこと
今どきWi-Fi受信デバイスの付いていないPCを使っている人はなかなかいないと思いますので、今回の事例はあまり利用価値はないかもしれませんが、今回の設定例を応用すればラズパイのWi-Fi中継アクセスポイント化も可能かと思います。 そんなわけで、前回からワンクッション置いてしまいましたが、次回こそラズパイのWi-Fi中継アクセスポイント化に挑戦したいと思います。