猫の手なら貸せる

いろいろ共有できたらいいなとおもってます

ラズパイ4の無線LAN伝送速度を改善したかった

(追記)

機器選定成功しておよそ10倍の速さになりました。
nkhnd.hatenablog.jp


RaspberryPi 4をNASとして運用して4ヶ月くらい経ちます。

最近ギガ級の重たいデータをやり取りするようになったのですが、通信速度あまり好ましくありません。

SwitchのDL版の回収に1時間かかないくらいWANの速度は出ているので、純粋にラズパイの内蔵無線LANカードはあまり速くないと思われます。

しかし、USB型の無線LANアダプタは使いたくありません。というのも

  • ドライバ関連が面倒臭い。
  • USBポートを潰したくない。
  • アダプタの熱が怖い。

と、使わない理由が山ほどあるからです。
そこで今回はEthernetを無線化して速度が速くなるか試してみました。

結論から書くと、機器選定ミスし、速度はほとんど変わりませんでした😩

注意

この手順は全くの初期状態からネットワークに接続する手順ではありません。
RaspberryPi 4にすでにSSHで接続できるように、内蔵無線LAN設定済みである前提で記述しています。

事前準備

環境情報

機器:RaspberryPi 4 (RAM 4GB)
内蔵OS:Raspbian buster Lite

詳細(cat /etc/os-release)

$ cat /etc/debian_version 
10.3
~ $ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
NAME="Raspbian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

機材

購入した機材はこちら。

バイス 役割 備考
TP-Link TL-WR902AC コンバータ クライアントモードがEthernetコンバータに該当
エレコム LD-GPY/BU03 LANケーブル 1GbitEtherで長さがなんと30cm(15cmもある)
RJ45→USB変換器 変換器 クライアントPC初期設定に必要。PCにRJポートが付いている場合は不要

届いたLANケーブルは柔らかく、だいぶ取り回しが利くようでよかった。
ちなみにTP-Linkの製品内にもLANケーブル入っていたので、ちょっと長さがあるのが気にならない場合は別途の購入は不要です。

たかがWifiルーターかと思いきや、化粧箱がなかなか素敵でびっくりしました。

f:id:nkhnd:20200411161718j:plain

初期設定

本体のRJポートの横についているトグルが初期設定「Share ETH」(一番左)になっているので、これを「AR/Rng Ext/Client」(一番右)に動かします。

動かしたらUSB電源(5V-2Aで動作)をUSB充電器などに、クライアントPCとルーターのRJポート同士を接続したら、http://192.168.0.1/http://tplinkwifi.netにアクセスします。

アクセスすると以下のページが表示されます。初期設定ではユーザー名adminパスワード adminになっています。

f:id:nkhnd:20200411170337j:plain

ログインすると初期設定が始まるので画面に従って操作します。 動作するモードは「クライアント」にチェックします。

f:id:nkhnd:20200411170415j:plain

APリストが表示されるので、親機を設定します。
キータイプや暗号化は自動入力されるので、パスワードの設定だけで大丈夫です。

OKで次の画面へ進むとネットワーク設定が開きます。LANタイプを静的IPに変更し、親機のIP属するセグメント・親機と異なるアドレスを指定します。

f:id:nkhnd:20200411170450j:plain

私の自宅環境では192.168.3.0/255セグメント、親機が.1を利用しているので、ここでは.2を指定しました。
また、ラズパイに割り当てられるIPアドレスを固定するために、DHCPサーバは無効に設定します。

内容を確認し設定を終了すると、ルーターが自動的に再起動し、設定が完了します。

f:id:nkhnd:20200411170807j:plain

再起動が終わったらGoogleトップが開けるかなど、ネットワークに接続できるかを確認しましょう。

初期設定が終わったら、ルーターの電源は落として大丈夫です。

Ethernetインターフェース使用設定

変更前の状態確認

クライアントPCからルータを外し、ラズパイにRJポートを接続します。ルータの電源をつけると電源ランプが点滅から点灯に変わると無線接続が可能になります。

クライアントPCがルータ親機(192.168.3.1)に接続した状態で、先ほど設定したIPアドレス(192.168.3.2)に無線でアクセスできるかを確認します。

f:id:nkhnd:20200411171419p:plain

※親機がネットワークに接続しDNSサーバと接続しているので、http://tplinkwifi.netでは接続できません。http://192.168.3.2/で接続します。

接続が確認できたら、sshで接続します。

~ % ssh pi@raspberry.local

現在のネットワーク設定を確認してみます。

~ $ ip a
...(省略)...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:70:fb:4a brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.89/24 brd 192.168.3.255 scope global dynamic noprefixroute eth0
       valid_lft 84052sec preferred_lft 73252sec
    inet6 2001:268:c184:8b83:c31b:c419:170c:ac35/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 295sec preferred_lft 295sec
    inet6 fe80::c642:a2c9:8cac:bc6f/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:70:fb:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.11/24 brd 192.168.3.255 scope global dynamic noprefixroute wlan0
...(省略)...

DHCPを初期設定で無効にしたにもかかわらず、eth0に192.168.3.89が割り当てられています。これは親機のDHCP設定「.81〜.113」を利用しているためです。

dhcpcd.confを設定

RaspberryPi側でeth0に固定アドレスを設定します。

念のため元のアドレス192.168.3.11は消さず、192.168.3.12を登録します。

~ $ sudo vi /etc/dhcpcd.conf
(eth0の内容を追記)

~ $ cat /etc/dhcpcd.conf
...(中略)...
interface eth0
 static ip_address=192.168.3.12/24
 static routers=192.168.3.1

interface wlan0
...(中略)...

ネットワーク関連のサービスを再起動します。

~ $ sudo systemctl restart dhcpcd
~ $ sudo systemctl restart networking

ip aに値が追加されていることを確認します。

~ $ ip a
...(省略)...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:70:fb:4a brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.89/24 brd 192.168.3.255 scope global dynamic noprefixroute eth0
       valid_lft 82340sec preferred_lft 71540sec
    inet 192.168.3.12/24 brd 192.168.3.255 scope global secondary noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 2001:268:c184:8b83:c31b:c419:170c:ac35/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 290sec preferred_lft 290sec
    inet6 fe80::c642:a2c9:8cac:bc6f/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:70:fb:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.11/24 brd 192.168.3.255 scope global dynamic noprefixroute wlan0
...(省略)...

ラズパイを再起動し再度ssh pi@raspberrypi.localに接続すると、ip aの中から親機で設定されたdhcpのアドレスがなくなります。

~ $ sudo reboot
...(再起動後)...

~ $ ip a
...(省略)...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether dc:a6:32:70:fb:4a brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.12/24 brd 192.168.3.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 2001:268:c184:8b83:c31b:c419:170c:ac35/64 scope global tentative dynamic mngtmpaddr noprefixroute 
       valid_lft 291sec preferred_lft 291sec
    inet6 fe80::c642:a2c9:8cac:bc6f/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:70:fb:4b brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.11/24 brd 192.168.3.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 2001:268:c184:8b83:9764:d5a6:4fc8:2c77/64 scope global tentative dynamic mngtmpaddr noprefixroute 
       valid_lft 291sec preferred_lft 291sec
    inet6 fe80::5b6e:7c4f:f071:edc8/64 scope link 
       valid_lft forever preferred_lft forever

これで設定は完了です。pi@192.168.3.12にアクセスすることで利用することが可能です。

参考:
kinakomochi-tank.hatenablog.com

内蔵無線LANインターフェースの停止

内蔵無線LANインターフェースを停止します。必須ではありません。

電力の問題もありますが、mDNSサービス(raspberrypi.localにDNS解決してくれるサービス)がイーサーインターフェースより内蔵無線LANの方を優先してしまうためです。 内蔵無線LANインターフェースの無効化は次のコマンドで行えます。

~ $ sudo iwconfig wlan0 txpower off

このコマンドを入力ししばらくすると、イーサーインターフェースを使ってraspberrypi.localに接続できるようになります。

お疲れ様でした。

参考: qiita.com

動作の確認

この記事を書いている最中に始まったTimeMachineの自動バックアップの処理速度は体感ですが上がっているように見えます。

f:id:nkhnd:20200411202522p:plain せっかくなので軽くファイルの移動にかかる時間の変化を測定してみました。

~ % dd if=/dev/zero of=./1GB bs=10m count=100
~ % stat -x 1GB
  File: "1GB"
  Size: 1048576000   FileType: Regular File

次のコマンドを一気に実行して時間を計測してみます。(osxfuseにNASをマウント済み、SharedディレクトリはRAID内の領域)

startupT=`date +%s`
cp ./1GB ../osxfuse/Shared/
finishedT=`date +%s`
echo `expr $finishedT - $startupT `s
rm -f ../osxfuse/Shared/1Gb
ファイルサイズ Ethernet 内蔵無線LAN
1GB 308s(5m) 406s(6.7m)
MB/s換算 3.2MB/s 2.4MB/s
bps換算 25.97Mbps 19.70Mbps

もっと速くなっていると思っていたのですが、そこまででもなかった。

反省

よく見たら

www.tp-link.com

あー。。。

f:id:nkhnd:20200412161214p:plain

そもそも100Mbpsで頭打ちでした。もっと調べるべきだった。

これを見て気づきました。

www.cleartex.net

まあ、しかし無線の時点でそもそも100Mbps出てないんで。。。
アンテナ数。。。ですかね?ネットワーク難しくてわかんねえです。

もっと良さげなのに買い換えます。