ZeroPiをイーサネットコンバーターにする(無線LAN環境の有線化)
2023-06-12ZeroPiを使って、有線LANポートしか対応していないデバイスを、無線LAN環境で使えるようにした。
イーサネットコンバーターとは
今回構築したのは、無線LAN(Wi-Fi)の信号を有線LAN(イーサネット)に変換するもの。無線LANを搭載していないデバイスでも、これを噛ませることによって無線LAN環境で使用可能になる。
+-----------------------+
| Router |
+-----------------------+
|
| Wi-Fi
|
+-----------------------+
| Wi-Fi to Ethernet |
| Converter |
+-----------------------+
|
| Ethernet
|
+-----------------------+
| Device |
+-----------------------+
ZeroPiとは
friendlyelec社が製造しているシングルボードコンピューター。製品ページはこちら。
シングルボードコンピューターなのにGPIOを搭載せず、ギガビット・イーサネットとUSB2.0ポートを搭載する尖った製品だ。 値段も$26.00とお手頃価格。
特にギガビット・イーサネットに対応かつ、この価格帯のシングルボードコンピューターは貴重。というか唯一無二の製品。
目標
作成したイーサネットコンバーターを使って、無線LAN(Wi-Fi)非対応のテレビを無線LAN経由でインターネット接続させる。
+-----------------------+
| Router |
+-----------------------+
|
| Wi-Fi(192.168.1.0/24)
|
+-----------------------+
| Wi-Fi to Ethernet |
| Converter |
+-----------------------+
|
| Ethernet(192.168.2.0/24)
|
+-----------------------+
| Device |
+-----------------------+
必要なもの
- ZeroPi
- Archer T2U Nano(Wi-Fi子機)
- LANケーブル
前提条件
イメージを焼くところとかは割愛。 ssh接続が完了するところまで進めておく。
やること
Archer T2U Nanoドライバーのインストール
- カーネルヘッダーのインストール
$sudo apt install linux-headers-current-sunxi armbian-config
- 必要なソフトウェアのインストール
$sudo apt install iw dkms git
- ドライバーのインストール ( ドライバー本体はここ )
$git clone -b v5.6.4.2 https://github.com/aircrack-ng/rtl8812au.git $cd cd rtl* $sudo make dkms_install
- リブート
$sudo reboot
- armbian-configでアクセスポイントを選択
Network -> WiFi$sudo armbian-config
eth0のIPアドレスを固定する
-
/etc/network/interfacesの修正
$sudo nano /etc/network/interfaces
# Interface eth0 auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.2.1
eth0のIPアドレスを102.168.2.1に設定する
※armbian-config等で固定しないこと。競合するようでうまくいかない。
DHCPサーバーの構成
-
isc-dhcp-serverのインストール
$sudo apt-get install isc-dhcp-server
-
/etc/default/isc-dhcp-serverの編集
$sudo nano /etc/default/isc-dhcp-server
INTERFACESv4="eth0"
-
動作確認
$sudo service isc-dhcp-server start
Active: active (running)となっていれば問題なし。
/etc/dhcp/dhcpd.confの修正
-
dhcpcd5のインストール
$sudo apt install dhcpcd5
-
/etc/dhcp/dhcpd.confの修正
$sudo nano /etc/dhcp/dhcpd.conf
authoritative; subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.2 192.168.2.250; option broadcast-address 192.168.2.255; option routers 192.168.2.1; default-lease-time 600; max-lease-time 7200; option domain-name "local-network"; option domain-name-servers 8.8.8.8, 8.8.4.4; }
IPフォワード設定
-
下記コマンドを実行する
$sudo iptables -t nat -A POSTROUTING -o wlxc006c3036204 -j MASQUERADE $sudo iptables -A FORWARD -i wlxc006c3036204 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT $sudo iptables -A FORWARD -i eth0 -o wlxc006c3036204 -j ACCEPT
コマンド中の「wlxc006c3036204」はWiFiドングル名。
-
/etc/sysctl.confの修正
$sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
ネットワークのメインルートをWi-Fiに設定する
- 下記コードをシェルスクリプト(.sh)として保存、実行する
DEFAULT_IFACE=`route -n | grep -E "^0.0.0.0 .+UG" | awk '{print $8}'` if [ "$DEFAULT_IFACE" != "wlxc006c3036204" ] then GW=`route -n | grep -E "^0.0.0.0 .+UG .+wlxc006c3036204$" | awk '{print $2}'` echo Setting default route to wlxc006c3036204 via $GW route add default gw $GW wlxc006c3036204 fi
ここまで実施すれば、eth0に接続したデバイスがWi-Fiを介してインターネットに出ていけるはずだ。
ZeroPi起動時に上記の設定を自動実行させる
-
~/router.shを作成する
$nano ./router.sh
service isc-dhcp-server start iptables -t nat -A POSTROUTING -o wlxc006c3036204 -j MASQUERADE iptables -A FORWARD -i wlxc006c3036204 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0 -o wlxc006c3036204 -j ACCEPT DEFAULT_IFACE=`route -n | grep -E "^0.0.0.0 .+UG" | awk '{print $8}'` if [ "$DEFAULT_IFACE" != "wlxc006c3036204" ] then GW=`route -n | grep -E "^0.0.0.0 .+UG .+wlxc006c3036204$" | awk '{print $2}'` route add default gw $GW wlxc006c3036204 fi
-
実行可能にする
$chmod +x ~/router.sh
-
rebootしたときに実行されるようにする
$sudo crontab -e
@reboot sudo /home/pi/router
動作確認
手元にあるNanoPi Neoを繋いで試してみる。 ネットワーク図はこんな感じ。
+-----------------------+
| Router |
+-----------------------+
| Wi-Fi(192.168.1.1/24)
|
| Wi-Fi(192.168.1.249/24(Static))
+-----------------------+
| ZeroPi |
+-----------------------+
| Ethernet(192.168.2.1/24(Static))
|
| Ethernet(192.168.2.7/24(DHCP))
+-----------------------+
| NanoPi NEO |
+-----------------------+
192.168.2.0/24へのアクセスはZeroPiへ飛ばすようルール設定済み。これがないと192.168.1.0/24側からアクセスできない。
とりあえず192.168.1.0/24のネットワークにあるPCからsshしてみる
$ ssh [email protected]
[email protected]'s password:
_ _ ____ _ _ _
| \ | | _ \(_) | \ | | ___ ___
| \| | |_) | | | \| |/ _ \/ _ \
| |\ | __/| | | |\ | __/ (_) |
|_| \_|_| |_| |_| \_|\___|\___/
Welcome to Armbian 23.02.2 Jammy with Linux 5.15.93-sunxi
System load: 25% Up time: 1 min
Memory usage: 12% of 491M IP: 192.168.2.7
CPU temp: 27°C Usage of /: 2% of 227G
~~略~~
できてる
インターネット側に出ていけるか試してみる
nanopi@nanopineo:~$ ping google.co.jp -c 10
PING google.co.jp (142.250.198.3) 56(84) bytes of data.
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=1 ttl=55 time=12.3 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=2 ttl=55 time=12.1 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=3 ttl=55 time=10.7 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=4 ttl=55 time=13.0 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=5 ttl=55 time=11.6 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=6 ttl=55 time=9.79 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=7 ttl=55 time=10.8 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=8 ttl=55 time=11.6 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=9 ttl=55 time=10.3 ms
64 bytes from nrt12s58-in-f3.1e100.net (142.250.198.3): icmp_seq=10 ttl=55 time=10.8 ms
--- google.co.jp ping statistics ---
10 packets transmitted, 10 received, 0% packet loss, time 9013ms
rtt min/avg/max/mdev = 9.788/11.299/12.975/0.937 ms
よさそう。
パフォーマンス測定
回線速度がどれくらい落ちるのか気になるので測定する。
測定にはSpeedtest® CLIを使用する。
Download | Upload | Idle Latency | |
---|---|---|---|
ZeroPi経由 | 94.45 Mbps | 83.07 Mbps | 11.52 ms |
ルーター直差し | 94.98 Mbps | 94.78 Mbps | 10.67 ms |
ちなみにNanoPi NEOはギガビットイーサネット対応ではないので注意。
アップロード速度が微妙に遅くなっている位で他は誤差程度の差だ。
まとめ
テレビにつなぎ、DHCPがしっかり動作できていることを確認できた。 ZeroPiはいいぞ。