Skip to content

Ubuntu 24.04.1LTS で固定アドレスを設定する簡易スクリプト

以前に Ubuntu 20.10 で固定アドレスを設定する簡易スクリプト というメモを書きました。 内容的には大差無いのですが、「Ubuntu で固定アドレスを設定するスクリプト」の修正版をメモしておきます。 と言っても、あまり真面目に作っていないのですが…

実行例

IP アドレスとゲートウェイを指定する

  • IP アドレスは 10.0.0.1/24
  • ゲートウェイは 10.0.0.254

この場合の実行例は下記です。

chaddr -a 10.0.0.1/24 -g 10.0.0.254

IP アドレス / ゲートウェイ / DNS インターフェイス名を指定する

  • IP アドレスは 10.0.0.1/24
  • ゲートウェイは 10.0.0.254
  • インターフェイス名は ens192
  • DNS は 8.8.8.88.8.4.4

この場合の実行例は下記です。

chaddr -a 10.0.0.1/24 -g 10.0.0.254 -i ens192 -d 8.8.8.8 8.8.4.4

インターフェイス名を省略した場合のデフォルト値は ens160、DNS を領略した場合のデフォルト値は 1.1.1.11.0.0.1 です。

スクリプト

例えば下記のスクリプトを /usr/local/bin/chaddr 等のように保存し、chmod 755 /usr/local/bin/chaddr を実行して実行権限を付与します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env python3
import argparse
import subprocess

DEFAULT_DNS = ["1.1.1.1", "1.0.0.1"]
DEFAULT_INTERFACE = "ens160"

parser = argparse.ArgumentParser()
parser.add_argument("-a", "--address", type=str, required=True)
parser.add_argument("-g", "--gateway", type=str, required=True)
parser.add_argument("-d", "--dns", nargs="*", default=DEFAULT_DNS)
parser.add_argument("-i", "--interface", type=str, default=DEFAULT_INTERFACE)
args = parser.parse_args()

address = args.address
gateway = args.gateway
dns = args.dns
intf = args.interface
hostname = address[0 : address.index("/")].replace(".", "-")
subprocess.call("hostnamectl set-hostname " + hostname, shell=True)

netplan = f"""network:
  version: 2
  ethernets:
    {intf}:
      addresses:
        - {address}
      routes:
        - to: default
          via: {gateway}
      dhcp4: false
      nameservers:
        addresses:
"""
for _ in dns:
    netplan += f"          - {_}\n"
with open("/etc/netplan/99_config.yaml", "w") as f:
    f.write(netplan)

hosts = f"""
127.0.0.1 localhost {hostname}
127.0.1.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet {hostname}
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
"""
with open("/etc/hosts", "w") as f:
    f.write(hosts)