OrangePi-PCを使ってみる

固定IPアドレスの設定とホスト名の変更


armbianはNetwork ManagerでIPアドレスを管理しています。
Network Managerにはいくつかのクライアントツールが存在しますが、GUIツール(nmtui)が直感的で使いやすいです。
スーパーユーザモードでnmtuiを起動します。




















再起動するとeth0のアドレスが変わります。


nmtuiで設定した内容はNetwork Managerの情報として保存されます。
$ nmcli d
DEVICE  TYPE      STATE     CONNECTION
eth0    ethernet  接続済み  Wired connection 1 --> ここ
lo      loopback  管理無し  --

Network Managerの情報はdeviceの情報(コマンドの引数はDEVICE)とconnection(コマンドの引数はCONNECTION)の情報に分 かれています。
以下のコマンドで確認することができます。
$ nmcli device show eth0
GENERAL.DEVICE:                         eth0
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         02:07:5D:D4:84:73
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (接続済み)
GENERAL.CONNECTION:                     Wired connection 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               オン
IP4.ADDRESS[1]:                         192.168.10.13/24
IP4.GATEWAY:                            192.168.10.1
IP4.ROUTE[1]:                           dst = 192.168.10.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 192.168.10.1, mt = 100
IP4.DNS[1]:                             192.168.10.1
IP6.ADDRESS[1]:                         fe80::e6ef:abf0:8b5d:dbc8/64
IP6.GATEWAY:                            fe80::fab7:97ff:fe36:de50
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100
IP6.ROUTE[2]:                           dst = ::/0, nh = fe80::fab7:97ff:fe36:de50, mt = 100

$ sudo nmcli connection show "Wired connection 1"
connection.id:                          Wired connection 1
connection.uuid:                        6c8ee46f-61cd-3e0c-9183-deec97ced79b
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              eth0
connection.autoconnect:                 はい
connection.autoconnect-priority:        -999
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1738873124
connection.read-only:                   いいえ
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     不明
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
connection.wait-device-timeout:         -1
802-3-ethernet.port:                    --
802-3-ethernet.speed:                   0
802-3-ethernet.duplex:                  --
802-3-ethernet.auto-negotiate:          いいえ
802-3-ethernet.mac-address:             --
802-3-ethernet.cloned-mac-address:      --
802-3-ethernet.generate-mac-address-mask:--
802-3-ethernet.mac-address-blacklist:   --
802-3-ethernet.mtu:                     自動
802-3-ethernet.s390-subchannels:        --
802-3-ethernet.s390-nettype:            --
802-3-ethernet.s390-options:            --
802-3-ethernet.wake-on-lan:             default
802-3-ethernet.wake-on-lan-password:    --
ipv4.method:                            manual
ipv4.dns:                               --
ipv4.dns-search:                        --
ipv4.dns-options:                       --
ipv4.dns-priority:                      0
ipv4.addresses:                         192.168.10.13/24
ipv4.gateway:                           192.168.10.1
ipv4.routes:                            --
ipv4.route-metric:                      -1
ipv4.route-table:                       0 (unspec)
ipv4.routing-rules:                     --
ipv4.ignore-auto-routes:                いいえ
ipv4.ignore-auto-dns:                   いいえ
ipv4.dhcp-client-id:                    --
ipv4.dhcp-iaid:                         --
ipv4.dhcp-timeout:                      0 (default)
ipv4.dhcp-send-hostname:                はい
ipv4.dhcp-hostname:                     --
ipv4.dhcp-fqdn:                         --
ipv4.dhcp-hostname-flags:               0x0 (none)
ipv4.never-default:                     いいえ
ipv4.may-fail:                          はい
ipv4.dad-timeout:                       -1 (default)
ipv4.dhcp-vendor-class-identifier:      --
ipv4.dhcp-reject-servers:               --
ipv6.method:                            auto
ipv6.dns:                               --
ipv6.dns-search:                        --
ipv6.dns-options:                       --
ipv6.dns-priority:                      0
ipv6.addresses:                         --
ipv6.gateway:                           --
ipv6.routes:                            --
ipv6.route-metric:                      -1
ipv6.route-table:                       0 (unspec)
ipv6.routing-rules:                     --
ipv6.ignore-auto-routes:                いいえ
ipv6.ignore-auto-dns:                   いいえ
ipv6.never-default:                     いいえ
ipv6.may-fail:                          はい
ipv6.ip6-privacy:                       -1 (unknown)
ipv6.addr-gen-mode:                     stable-privacy
ipv6.ra-timeout:                        0 (default)
ipv6.dhcp-duid:                         --
ipv6.dhcp-iaid:                         --
ipv6.dhcp-timeout:                      0 (default)
ipv6.dhcp-send-hostname:                はい
ipv6.dhcp-hostname:                     --
ipv6.dhcp-hostname-flags:               0x0 (none)
ipv6.token:                             --
proxy.method:                           none
proxy.browser-only:                     いいえ
proxy.pac-url:                          --
proxy.pac-script:                       --
GENERAL.NAME:                           Wired connection 1
GENERAL.UUID:                           6c8ee46f-61cd-3e0c-9183-deec97ced79b
GENERAL.DEVICES:                        eth0
GENERAL.IP-IFACE:                       eth0
GENERAL.STATE:                          アクティベート済み
GENERAL.DEFAULT:                        はい
GENERAL.DEFAULT6:                       はい
GENERAL.SPEC-OBJECT:                    --
GENERAL.VPN:                            いいえ
GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/1
GENERAL.ZONE:                           --
GENERAL.MASTER-PATH:                    --
IP4.ADDRESS[1]:                         192.168.10.13/24
IP4.GATEWAY:                            192.168.10.1
IP4.ROUTE[1]:                           dst = 192.168.10.0/24, nh = 0.0.0.0, mt = 100
IP4.ROUTE[2]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 192.168.10.1, mt = 100
IP6.ADDRESS[1]:                         fe80::6ec3:b091:5dd4:9558/64
IP6.GATEWAY:                            fe80::fab7:97ff:fe36:de50
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 100
IP6.ROUTE[2]:                           dst = ::/0, nh = fe80::fab7:97ff:fe36:de50, mt = 100

Network ManagerのCLIツール(nmcli)を使っても、固定IPアドレスに変更することができます。
$ sudo nmcli connection modify "Wired connection 1" ipv4.method manual ipv4.addresses {IPアドレス}/24 ipv4.gateway {Gatewayアドレス}



WiFiを固定アドレスで使用する場合は以下の手順で固定アドレスに変更することができます。
まずWiFiをDHCPモードで有効化します。
WiFiのネットワーク名(wlx00367635043)は、MACアドレスにより生成されるので、環境により変わります。
$ sudo nmcli d wifi connect aterm-d5a4ee-g password xxxxxxxxx ifname wlx00367635043

次にConnectionをDOWN状態にします。
$ sudo nmcli connection down aterm-d5a4ee-g

$ nmcli connection show
NAME            UUID                                  TYPE      DEVICE
aterm-d5a4ee-g  cdc8edcb-de3e-452f-967f-291a9603802c  wifi      --

以下のコマンドでIPアドレス、ゲートウェイ、DNSを設定します。
$ sudo nmcli connection modify aterm-d5a4ee-g ipv4.addresses "192.168.10.10/24"
$ sudo nmcli connection modify aterm-d5a4ee-g ipv4.gateway "192.168.10.1"
$ sudo nmcli connection modify aterm-d5a4ee-g ipv4.dns "192.168.10.1"
$ sudo nmcli connection modify aterm-d5a4ee-g +ipv4.dns "8.8.8.8"
$ sudo nmcli connection modify aterm-d5a4ee-g +ipv4.dns "8.8.4.4"
$ sudo nmcli connection modify aterm-d5a4ee-g ipv4.method manual

最後にConnectionをUP状態にします。
$ sudo nmcli connection up aterm-d5a4ee-g

$ sudo ifconfig -a wlan0
wlx003676350438: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::66e5:95c:47c3:9822  prefixlen 64  scopeid 0x20<link>
        ether 00:36:76:35:04:38  txqueuelen 1000  (イーサネット)
        RX packets 1454  bytes 251396 (251.3 KB)
        RX errors 0  dropped 346  overruns 0  frame 0
        TX packets 358  bytes 45414 (45.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

現在使用中のGateWayアドレスはrouteコマンドで調べることができます。
以下の様にIPアドレスではなく、aterm.meの様にmDNSホスト名で表示されるときは、pingを飛ばしてIPアドレスを調べることがで きます。
dnsに指定する8.8.8.8と8.8.4.4はGoogleが運営する「Google Public DNS」です。
$ sudo route
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         aterm.me        0.0.0.0         UG    100    0        0 eth0
default         aterm.me        0.0.0.0         UG    600    0        0 wlp12s4
192.168.10.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.10.0    0.0.0.0         255.255.255.0   U     600    0        0 wlp12s4

$ ping aterm.me
PING aterm.me (192.168.10.1) 56(84) bytes of data.



ホスト名の変更は以下のコマンドで行います。
$ hostname
orangepizero

$ hostnamectl
   Static hostname: orangepizero
         Icon name: computer
        Machine ID: fb7fb4122649487d99009cb2d5650a18
           Boot ID: c61393591e7b4e34ba1d83373dd38894
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 4.19.20-sunxi
      Architecture: arm

$ sudo hostnamectl set-hostname opi-zero1

$ hostnamectl
   Static hostname: opi-zero1
         Icon name: computer
        Machine ID: fb7fb4122649487d99009cb2d5650a18
           Boot ID: c61393591e7b4e34ba1d83373dd38894
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 4.19.20-sunxi
      Architecture: arm

$ hostname
opi-zero1



固定IPにしなくても、avahi-daemonをインストールして、mDNSホスト名で名前解決を行うことができます。
さらに、sshのサービスを登録すれば、mDNSホスト名でssh接続することができます。
インストールとサービスの起動は以下の手順です。
$ sudo apt install avahi-daemon

$ sudo vi /etc/avahi/services/ssh.service
以下の内容でssh.serviceを作成
----------------------------------------------------
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
  <name replace-wildcards="yes">%h</name>

  <service>
    <type>_ssh._tcp</type>
    <port>22</port>
  </service>
</service-group>
----------------------------------------------------

$ sudo systemctl enable avahi-daemon.service

$ sudo systemctl start avahi-daemon.service

$ systemctl status avahi-daemon.service
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
     Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2023-10-21 08:21:28 JST; 3 weeks 5 days ago
TriggeredBy: ● avahi-daemon.socket
   Main PID: 631 (avahi-daemon)
     Status: "avahi-daemon 0.8 starting up."
      Tasks: 2 (limit: 1005)
     Memory: 1.4M
        CPU: 28.042s
     CGroup: /system.slice/avahi-daemon.service
             tq631 avahi-daemon: running [mqtt-server.local]
             mq686 avahi-daemon: chroot helper

これで、ホスト名.localで名前を解決することができます。
$ ping orangepizero.local
PING mqtt-server.local (192.168.10.15) 56(84) バイトのデータ
64 バイト応答 送信元 192.168.10.15 (192.168.10.15): icmp_seq=1 ttl=64 時間=2.80ミリ秒
64 バイト応答 送信元 192.168.10.15 (192.168.10.15): icmp_seq=2 ttl=64 時間=3.17ミリ秒

以下のコマンドでローカル ネットワーク上の mDNS/DNS-SD 公開サービスをスキャンすることができます。
$ sudo apt install mdns-scan
$ mdns-scan
+ HP-Pavilion._ssh._tcp.local
+ esp32-server._http._tcp.local
+ orangepizero._ssh._tcp.local

mdns-scanで表示される_sshや_httpはService Typeと呼ばれていて、こちらに定義されています。

続く...