IBM Cloud: （小ネタ）VPC上のVSIでIP aliasを恒久的に設定する方法

# はじめに

IBM CloudのVPC上のVSIでIP aliasを恒久的に設定したいが、どうやって設定するのが良いかを調べてみた。


# ifcfg-eth0には書いてはいけない

最近ではifcfg-eth0に書くことを薦めている記事が多いのだが、そもそもifcfg-eth0には以下のようなコメントが書かれてある。

```txt:
[root@keepalived-1 ~]# head -1 /etc/sysconfig/network-scripts/ifcfg-eth0
# Created by cloud-init on instance boot automatically, do not edit.
```

仮に、間違ってifcfg-eth0を削除してしまっても

```txt:絶対にやらないでください！
[root@keepalived-1 ~]# rm -rf /etc/sysconfig/network-scripts/ifcfg-eth0
[root@keepalived-1 ~]# reboot
```

これでも通信はできてしまう。つまり、ifcfg-eth0は実質上使われておらず、DHCPで構成されているので、こちらの設定ファイルに変更を入れても意味がない。

```
[root@keepalived-1 ~]# 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 pfifo_fast state UP group default qlen 1000
    link/ether 02:00:18:02:70:58 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 297sec preferred_lft 297sec
    inet6 fe80::18ff:fe02:7058/64 scope link
       valid_lft forever preferred_lft forever

[root@keepalived-1 ~]# cat /var/lib/dhclient/dhclient--eth0.lease
（途中省略）
lease {
  interface "eth0";
  fixed-address 10.0.0.100;
  option subnet-mask 255.255.255.0;
  option routers 10.0.0.1;
  option dhcp-lease-time 300;
  option dhcp-message-type 5;
  option dhcp-server-identifier 10.0.0.1;
  option domain-name-servers 161.26.0.10,161.26.0.11;
  renew 3 2020/11/25 08:11:20;
  rebind 3 2020/11/25 08:13:39;
  expire 3 2020/11/25 08:14:17;
}
```

# 解決方法1

DHCPを使っているので、こちらの方がスマートのように思える。

```txt:/etc/dhcp/dhclient.conf
alias {
  interface "eth0";
  fixed-address 192.168.10.10;
  option subnet-mask 255.255.255.255;
}
```
```
[root@keepalived-1 ~]# dhclient -r eth0;dhclient eth0

[root@keepalived-1 ~]# 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 pfifo_fast state UP group default qlen 1000
    link/ether 02:00:18:02:70:58 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 283sec preferred_lft 283sec
    inet 192.168.10.10/32 brd 192.168.10.10 scope global eth0:0
       valid_lft forever preferred_lft forever
    inet6 fe80::18ff:fe02:7058/64 scope link
       valid_lft forever preferred_lft forever

```


# 解決方法2

以下のようなファイルを作成する。

```txt:/etc/sysconfig/network-scripts/ifcfg-eth0_alias
BOOTPROTO=static
DEVICE=eth0:0
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPADDR1=192.168.10.10
NETMASK1=255.255.255.255
```

ネットワークを再起動する。

```
[root@keepalived-1 ~]# systemctl restart network
[root@keepalived-1 ~]# 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 pfifo_fast state UP group default qlen 1000
    link/ether 02:00:18:02:70:58 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 299sec preferred_lft 299sec
    inet 192.168.10.10/32 brd 192.168.10.10 scope global eth0:0
       valid_lft forever preferred_lft forever
    inet6 fe80::18ff:fe02:7058/64 scope link
       valid_lft forever preferred_lft forever
```