技術メモ

プログラミングとか電子工作とか

NanoPi R2Sのリモートセットアップ(たぶんRaspberry Piとかでもいける)

所用でVPNブリッジのマシンを選定しておりまして、NanoPi R2Sである程度パフォーマンスが出ると導入しやすいし嬉しいなぁと言うことでNanoPi R2Sを複数台調達しました。
とりあえず現段階でのセットアップ方法をメモしておきます。
VPNブリッジにする記事は気が向いたら書きます。

なんでリモートでセットアップ?

NanoPi R2Sにはディスプレイ接続できないからです。
Raspberry Piもセットアップの時にディスプレイじゃまくさくないですか?

必要なもの

f:id:ysmn_deus:20200817135236j:plain

  • NanoPi R2S本体
    自分はFRIENDLY ELECから直接購入しました。
    NanoPi R2S
    1個だけ購入するなら本体代22 usd + 送料(8.9 usd ~ 27 usd、オススメはSF-Express)なので、1個だけにしろ基本的に公式から買うのが安いです。
    一応Amazonにも何種類かありますが、何故かケースありの方ケース無しより安かったのでそちらがオススメです。

  • ACアダプタ(USB電源でも可)
    よくラズパイとかとセットになっている、USB-microのACアダプタが妥当です。
    専用に購入するならこんなやつ
    こういうスマホを充電するUSB-ACアダプタでも問題無いかと思いますが、1ポートあたり2Aは確実に流せるものを準備しましょう。

  • SDカード
    今回は公式で用意されているイメージを利用しますので、少なくとも8GBぐらいは必要です。
    たぶん8GBだと詰むのでミニマム16GBのものとかでしょうか。(自分はよく32GBを利用します)
    SDカードは意外と破損しやすいので謎メーカーを避けるとして、SanDiskのもので十分かと思います。
    ちょっと心配な人なら東芝製とかがオススメです。(どっちも使ってて壊れたことないですが)

  • LANケーブル これは適宜。VPNブリッジとして利用するので少なくとも2本ぐらいはいると思います。

SDカードにイメージを書き込む

NanoPiの公式サイトから専用のイメージをダウンロードしてきます。
図の「download link」というところから保存できます。

f:id:ysmn_deus:20200817140215p:plain

BaiduとGoogle Driveの2択ありますが、無難にGoogle Driveで良いと思います。(Baidoはパスワード入力などが必要)

f:id:ysmn_deus:20200817232940p:plain

f:id:ysmn_deus:20200817232952p:plain

zipファイルが保存されるので、解凍して「rk3328-sd-friendlycore-bionic-5.4-arm64-20200707.img」を準備します。
通常のRaspberry PiであればRaspbianなどで良いと思います。 Linuxならマウントしてddコマンドでいいですが、Windowsの場合は

  • フォーマット
  • ファイルコピー

が必要になります。

フォーマット

無難にSDメモリカードフォーマッターを利用してフォーマットするのが良いと思いますが、たぶんWindowsの標準機能でフォーマットしてもいいんじゃないかと思います。

www.sdcard.org

利用方法などは上記ウェブサイトのユーザーマニュアルなどを参考にして下さい。

ファイルコピー

結構「Win32 Disk Imager」を利用している例が多かった(公式もそう)のですが、Windows10でうまく動かなかったのでUSBWriterを利用しました。

www.gigafree.net

たぶん使い方は起動すれば分かると思います。

f:id:ysmn_deus:20200817233655p:plain

上記2項目を行えば、SDカードの準備は完了です。

初期設定

とりあえず上記までで事前準備は完了なので、SDカードを挿してWAN側にLANケーブルを挿し、ルーターなどに接続します。
基本的にここまで行けばあとは全てSSH経由で行うので、電源が入っていれば手の届かない所にあっても良いと思います。

IPの確認

基本的にNanoPi R2SはDHCPでIPが割り当てられる環境にいるとします。
(普通にルーターを使っている環境であれば、どっかのポートに挿せばIPが割り当てられます)
NanoPi R2Sにはディスプレイポートなどはないので、IPはルーター側のIPリリース情報から取得します。
これは、ルーターによって異なるので割愛しますが、たぶん管理画面の「DHCP」の設定項目みたいな箇所で確認できます。
(もしくはログ?)

SSHでログイン

ちょっとここで躓きました。公式サイトには「rootでログイン」と書かれており、実際/etc/ssh/sshd_configにも

...
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
...

となっているのでrootでログインできそうなもんですが、どうもうまくいきません。
(ブラウザからのアクセスもうまくいきませんでした)
とりあえず

  • ユーザー名: pi
  • パスワード: pi(通常のRaspberry Piの場合はraspberry)

でいけたので、これでSSHでログインします。
(Friendly Elecで販売されている「NanoPi」シリーズは、大体ユーザー名がpiでパスワードもpiなので、試してみたらいけました)

ssh pi@[前項目で確認したIPアドレス]

本当はとっととrootにパスワードを付けたい所ですが、念のためIPの固定からやっていきます。

IPの固定

これは色々方法(ルーター側からMACアドレスとIPを紐付けるなど)があると思いますが、とりあえず家のネットワークは基本マシン側からIPを固定しているのでNanoPi R2Sの設定で対応します。
中に乗ってるディストリはUbuntuですので、Ubuntuの公式ネットワーク設定に従います。

ネットワークインターフェースの確認

まずどのインターフェースがWANとLANに割り当てられているか見てみます。

pi@NanoPi-R2S:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether ba:88:4f:97:b2:26 brd ff:ff:ff:ff:ff:ff
    inet [前項目で確認したIPアドレス]/24 brd 192.168.x.255 scope global eth0
...

[前項目で確認したIPアドレス]があるインターフェースがWAN側のポートになります。
ここではeth0が該当します。

設定ファイルの作成

/etc/netplan/99_config.yamlを作成して、そこに設定を追記します。

pi@NanoPi-R2S:~$ sudo vi /etc/netplan/99_config.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      addresses: [[前項目で確認したIPアドレス]/24]
      gateway4: 192.168.x.1
      nameservers:
          addresses: [192.168.x.1, 8.8.8.8, 8.8.4.4]

とりあえずGoogle Public DNS(8.8.8.8, 8.8.4.4)も適応しておきます。お好みでCloudflareにしてもいいでしょう。
ファイルを作成できたら

sudo netplan apply

で適応します。
たぶんこれでIPは変わらない筈。

パスワードの変更

とりあえずrootがパス無しなのと、デフォルトユーザーのpiがpiという脆弱極まりない環境が気になるので変更しておきます。

pi@NanoPi-R2S:~$ sudo passwd
Enter new UNIX password:  <- パスワード入力
Retype new UNIX password: <- もう一回入力
passwd: password updated successfully

一応あってるか確認

pi@NanoPi-R2S:~$ su -
Password: <- 先ほど設定したrootのパスワード入力

ユーザーが切り替わればrootのパスワードは変更完了です。
piも変更しておきます。(たぶんこっちをメインに使う事になる)

pi@NanoPi-R2S:~$ passwd
Changing password for pi.
(current) UNIX password: <- 現在のパスワード入力、今は「pi」
Enter new UNIX password: <- 新しいパスワード入力
Retype new UNIX password: <- もう一回入力
passwd: password updated successfully

ログアウトして確認しておくといいでしょう。
(現段階では最悪SSHのrootログインが有効になっているので、パスワードミスって入れなくなった場合はrootでパスワードを変更するとよさげ)

公開鍵認証でログインできるようにする

とりあえずサーバーにパスワードログインのまま放置するのは気持ち悪いので公開鍵認証でログインできるようにしておきます。
鍵の生成や詳しいことに関しては割愛します。(長くなるので)

公開鍵の追記

ログインするユーザーのホームディレクトリに.sshディレクトリを作成してauthorized_keysを追加しておきます。

pi@NanoPi-R2S:~$ mkdir .ssh
pi@NanoPi-R2S:~$ vi .ssh/authorized_keys <- 自分の公開鍵を追記
pi@NanoPi-R2S:~$ sudo chmod 600 .ssh/authorized_keys 
pi@NanoPi-R2S:~$ sudo chmod 700 .ssh/ 

SSHの設定

SSHの設定を変更しておきます。

pi@NanoPi-R2S:~$ sudo vi /etc/ssh/sshd_config

とりあえず個人的に変えておきたい場所だけ記載しておきます。

Protocol 2
Port [22以外の任意のポート]
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
#X11Forwarding yes <- デフォルト値はnoなのでコメントアウト

上記を反映させるためにsshをリスタートします。

pi@NanoPi-R2S:~$ sudo /etc/init.d/ssh restart

とりあえず再起動しなければSSHは繋がりっぱなしになってると思うので、今のうちに別クライアントか別窓で鍵認証でSSHログインできるか確かめます。
もしできない場合は上記の設定をしていたウィンドウで設定画面を確かめて下さい。