動機
サーバを再起動するとIPアドレスが変わることがあり、クライアントのWindowsからSSH接続するときに.ssh\config
に記載したホスト名で接続できない。
環境
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
方法
まずネットワークの設定ファイルを確認する。
$ ls /etc/netplan
00-installer-config.yaml
$ sudo cat /etc/netplan/00-installer-config.yaml
# This is the network config written by 'subiquity'
network:
ethernets:
enp3s0:
dhcp4: true
version: 2
このようにネットワークの設定ファイルは/etc/netplan
配下に格納されている。
辞書順で/etc/netplan
配下の.yaml
ファイルをすべて参照し、最後に参照したものを採用する方式である。
今回は01-network-manager.yaml
というファイルを作成する。
$ sudo cat /etc/netplan/01-network-manager.yaml
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
addresses: [xxx.xxx.xxx.xxx/xx]
routes:
- to: default
via: xxx.xxx.xxx.xxx
nameservers:
addresses: [8.8.8.8,8.8.4.4]
ポイント
-
enp3s0
の行は環境によって異なる。ip a
コマンドを実行し、マシンが接続しているネットワークデバイス名を採用する。 -
dhcp4: no
とすることでdhcp機能(自動でIPアドレスを割り当てるなど)を無効化できる。 -
addresses
にはその環境で利用できる他マシンと重複しないアドレスを設定する。
例えば、ip a
コマンドで確認できるinetの値が192.168.1.xxx/24
であったら、おそらく重複しないであろう192.168.1.50/24
などを設定する。 -
via
の行はデフォルトゲートウェイを設定する。現在使用しているものをroute -n
で確認できる。 - 最後の
addresses
にはDNSサーバのアドレスを設定する。特に要件がなければGoogleが提供するパブリックDNSサーバである8.8.8.8
と代替DNSサーバの8.8.4.4
を設定する。 -
yaml
はインデントが意味を持つので注意して入力する。
ファイルを作成出来たら下記のコマンドで設定を有効化する。
sudo netplan try --timeout 10
サーバの再起動は不要で、更新後のIPアドレスでSSH接続できれば完了。