PC環境
Server : Ubuntu-22.04.1 server
PC : MacOS
Ubuntu server を LAN 内に設置して MacOS から ssh , remote desktop で接続する.
固定 IP にする理由
IP アドレスは、ルーターがDHCP「Dynamic Host Configuration Protocol(ダイナミック ホスト コンフィギュレーション プロトコル)」の機能を使って勝手にアドレスを与えて重複を防ぐのがヒューマンエラーを防ぐのに都合が良い.
しかし、ルーターはアクセスする度に異なった IP アドレスを与えてしまう可能性があります.
ネットワーク内にあるサーバーをコントロールする場合、IP アドレスでコントロールする必要があるので、コロコロとIPアドレスが変更されるは困るのだ.
固定IPアドレスならば、複数のクライアントからssh 接続や remote desktop とかも確実に接続可能だ.
大きなネットワークではコンピューター名で名前解決してコンピューター名でアクセスする方法もあるが、小さなネットワークでは、設定がめんどくさい.
したがって、Ubuntuサーバーに固定 IP アドレスを追加する方法を記しておく。
ネットワーク設定の確認
$ 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: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether ……………………..
altname ……………………
inet 192.168.xxx.xxx/24 metric 100 brd 192.168.aaa.aaa scope global dynamic eno2
valid_lft 6818sec preferred_lft 6818sec
inet6 ……………………………….
サーバーによって表示が異なると思いますが、チェックする事柄は
eno2
inet 192.168.xxx.xxx/24
このアドレスはルーターがDHCP で割り振ったアドレス
/24 は サブネットマスク 255.255.255.0 と同じ意味です.
Ubuntu IP アドレス 設定ファイル
ネットワークの設定ファイルは
/etc/netplan/
の中のファイルに記入されています.
$ cd /etc/netplan/
/etc/netplan$ ls 00-installer-config.yaml
インストール時に設定したネットワークファイル
00-installer-config.yaml
/etc/netplan$ less 00-installer-config.yaml
DHCP を使った設定になっていました。
# This is the network config written by ‘subiquity’
network:
ethernets:
eno2:
dhcp4: true
version: 2
00-installer-config.yaml (END)
netplan を使った設定は、ここのサイトに書かれています.
YAML とは?
YAML とは? YAML (YAML Ain’t Markup Language) とは、わかりやすいデータ シリアライズ (serialize) 言語です。 設定ファイルの記述に使用されることが多く、あらゆるプログラミング言語に対応しています。
YAMLはスカラー、シーケンス、マッピングといったデータ形式をインデントで表現するのを基本としている点です。
インデントとは、文章の行頭に空白を挿入して、先頭の文字を右に押しやることです。空白は半角スペースのみOK で tab はダメです。
固定IP の設定ファイルの書き方
To instead set a static IP address, use the addresses key, which takes a list of (IPv4 or IPv6), addresses along with the subnet prefix length (e.g. /24). DNS information can be provided as well, and the gateway can be defined via a default route:
代わりに静的 IP アドレスを設定するには、アドレス キーを使用します。このキーは、アドレス (IPv4 または IPv6) とサブネット プレフィックス長 (/24 など) のリストを受け取ります。 DNS 情報も提供でき、デフォルト ルート経由でゲートウェイを定義できます。
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.10.10.2/24
nameservers:
search: [mydomain, otherdomain]
addresses: [10.10.10.1, 1.1.1.1]
routes:
- to: default
via: 10.10.10.1
※ renderer: networkd は自分のサイトではエラーが出たのであっさりと削除
固定IP設定ファイル作成
元々合った設定ファイルを最初の番号よりも大きい番号でコピーする.
00-inst………… –>> 01-inst……………
のような名前にする.
参照順序は、番号、アルファベット順で、ネットワーク設定を上書きしていくようです.
要するに、最初の設定ファイルを読み込み、次の設定ファイルを読み込むと何が良いかというと、後の設定ファイルが間違っていた場合は、先の設定ファイルでネットワークが設定されるので、よりセーフティーにできるからだろうと思っていました.
実は、ネットワーク設定を複数設定できるようです.
/etc/netplan$ sudo cp 00-installer-config.yaml 01-installer-config.yaml
コピーした設定ファイルを netplan のサイトを参照して書き換えます.
/etc/netplan$ sudo vi 01-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
eno2:
addresses:
– 192.168.xxx.xxx/24
nameservers:
search:
addresses: [192.168.zzz.zzz] ルーターのネームサーバーのアドレス
routes:
– to: default
via: 192.168.yyy.yyy ルーターのアドレスでも良さそう
例)
network:
version: 2
ethernets:
eno2:
addresses:
- 192.168.0.30/24
nameservers:
addresses: [8.8.8.8, 192.168.1.1]
routes:
- to: default
via: 192.168.0.1
192.168.xxx.xxx/24
サーバーのアドレスはDHCPが自動で割り振るアドレス領域とルーターや他の機材等が使用していないアドレスならば、ユーザーが適当に決めて良い.(実験している環境は、自宅LAN内なので問題は少ないが)
192.168.zzz.zzz
サーバーがつながっているルーターのネームサーバーのアドレス
via: 192.168.yyy.yyy
デフォルトルート、繋がっているルーターのアドレスで良さそう.
設定の反映は、下のコマンドでできます.( サーバー本体の再起動は不要のようです )
設定を反映
ローカルで設定を反映
ローカルで設定ファイルを弄るのであれば、そのまま apply すれば良いと思います。
$ sudo netplan apply
リモートで一定時間、設定を反映
設定にエラーがあった場合、リモートでネットワークの設定反映をするとネットワークが切断されます。
sshで接続して設定ファイルを書き直した時は、try オプションを使うのをお勧めします。
netplan try は、一定時間だけ設定を反映して元に戻ります。
–timeout 120
は、120秒間だけ一時的に設定を反映させます。
$ sudo netplan try --timeout 120
確かめてから、結果が良ければ、netplan apply しよう。
/etc/netplan/
新たに作った設定ファイルをプラスしたので、2つの設定ファイルがあることになった
この場合、2つのIPアドレスでアクセスできることになりました.
つまり、インストール時にDHCP で割り振られた IP と 新たに作った固定IPの2つのIPアドレスで通信が可能になりました.
不必要ならば、一方のファイル名の拡張子を変更して適応すれば良いかな.