概要
ラズパイ3にNervesをインストールして、このようなネットワーク構成を作りました。
NervesのAdvent Calendar差し替えようかなぁー(笑)
#NervesJP Advent Calendar 2019 9日目
ElixirでラズパイのLEDをチカ〜RaspbianOSインストールから〜
Mac OSX:
- 有線LAN→メンテナンス用、固定IPアドレス(192.168.88.1/24)
ラズパイ:
- 有線LAN(eth0)→メンテナンス用、固定IPアドレス(192.168.88.2/24)
- 無線LAN(wlan0)→インターネット接続用、DHCP
#追記(2020.01.21)
ネットワークやSSHの設定はconfig
ディレクトリにあるconfig.exs
とtarget.exs
どちらに記述しても問題なさそうです(記述方法も同じ)。今回はconfig/config.exs
に記載することとします。
config/
config.exs ←今回はこちらに設定を記述
target.exs
環境
- RaspberryPi 3
- Nerves
やったこと
(注意)シェルはFishを使ってます。
~> mix nerves.new hello_nerves
~> cd hello_nerves
~> set -x MIX_TARGET rpi3
mix.exs
に以下の設定を追記します。
targets: @all_targets
がないとMacの環境でも構築しようとしてしまうようでmix deps.get
した時にエラーが出るので注意です。
defp deps do
[
(略)
# 追加
{:nerves_network, "~> 0.5", targets: @all_targets},
]
end
次にconfig/config.exs
に以下の設定を追記します。
#
# ネットワーク設定
#
settings = [
networks: [
[ssid: "ここにSSIDを書く", psk: "ここに共通鍵を書く", key_mgmt: :"WPA-PSK", priority: 0,
ipv4_address_method: :dhcp,
nameservers: ["8.8.8.8", "8.8.4.4"]
]
]
]
config :nerves_network, default: [
wlan0: settings,
eth0: [
ipv4_address_method: :static,
ipv4_address: "192.168.88.2",
ipv4_subnet_mask: "255.255.255.0"
]
]
設定が完了したらSDカードにイメージを焼きます。
~> mix deps.get
~> mix firmware
~> mix firmware.burn
ラズパイにマイクロSDを入れて起動します。
SSHの設定が完了していたらSSHでログインできます。
~> ssh 192.168.88.2
iex> Nerves.NetworkInterface.interfaces()
["lo", "eth0", "wlan0"]
iex> Nerves.NetworkInterface.settings("lo")
{:error, :einval}
iex> Nerves.NetworkInterface.settings("eth0")
{:ok,
%{
ipv4_address: "192.168.88.2",
ipv4_broadcast: "192.168.88.255",
ipv4_gateway: "",
ipv4_subnet_mask: "255.255.255.0",
mac_address: "b8:27:eb:86:17:d4"
}}
iex> Nerves.NetworkInterface.settings("wlan0")
{:ok,
%{
ipv4_address: "192.168.46.18",
ipv4_broadcast: "192.168.46.255",
ipv4_gateway: "192.168.46.1",
ipv4_subnet_mask: "255.255.255.0",
mac_address: "b8:27:eb:d3:42:81"
}}
iex> ping "192.168.88.1"
Press enter to stop
Response from 192.168.88.1 (192.168.88.1): time=0.977ms
Response from 192.168.88.1 (192.168.88.1): time=1.121ms
Response from 192.168.88.1 (192.168.88.1): time=0.942ms
Response from 192.168.88.1 (192.168.88.1): time=1.304ms
iex> ping "192.168.46.1"
Press enter to stop
Response from 192.168.46.1 (192.168.46.1): time=5.279ms
Response from 192.168.46.1 (192.168.46.1): time=4.923ms
Response from 192.168.46.1 (192.168.46.1): time=101.018ms
Response from 192.168.46.1 (192.168.46.1): time=4.867ms
iex> ping "www.yahoo.co.jp"
Press enter to stop
Response from www.yahoo.co.jp (182.22.25.124): time=1088.845ms
Response from www.yahoo.co.jp (182.22.25.124): time=68.058ms
Response from www.yahoo.co.jp (182.22.25.124): time=58.258ms
Response from www.yahoo.co.jp (182.22.25.124): time=65.927ms
iex> ping "www.google.co.jp"
Press enter to stop
Response from www.google.co.jp (172.217.31.131): time=54.336ms
Response from www.google.co.jp (172.217.31.131): time=69.777ms
Response from www.google.co.jp (172.217.31.131): time=61.431ms
Response from www.google.co.jp (172.217.31.131): time=63.747ms
名前引きはできているのに、なぜか"8.8.8.8"にはpingの応答がありませんでした。
iex> ping "8.8.8.8"
Press enter to stop
まとめ
ラズパイにNervesをインストールして、有線LANはメンテナンス用として固定IPアドレスを設定、無線LANは運用系としてDHCPを設定してインターネット接続を確認できました。
実運用とメンテナンス用でネットワークを分けたい場合は参考になるのではないかと思います。
次はこの環境で、mix firmware.gen.script
してできるupload.sh
を使ってSSH経由のファームウェア更新をしてみます。