これは、なにをしたくて書いたもの?
Linuxで、一時的にでもIPアドレスを追加できたりしないのかな?と思って調べてみたら、ipコマンドでできそうだったので
試してみました。
環境
今回の環境は、こちらです。Ubuntu Linux 20.04 LTS。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.3 LTS Release: 20.04 Codename: focal $ uname -srvmpio Linux 5.4.0-81-generic #91-Ubuntu SMP Thu Jul 15 19:09:17 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
ip addr add/del
こちらのドキュメントの「Temporary IP Address Assignment」に、そのものの記載があります。
Network - Configuration | Ubuntu
ip addr addでIPアドレスとサブネットマスクを指定することで、一時的な(再起動すると失われる)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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:81:dd:5d brd ff:ff:ff:ff:ff:ff
inet 192.168.121.198/24 brd 192.168.121.255 scope global dynamic eth0
valid_lft 3232sec preferred_lft 3232sec
inet6 fe80::5054:ff:fe81:dd5d/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe22:9a46/64 scope link
valid_lft forever preferred_lft forever
ドキュメントの例に習って、10.102.66.200/24をeth1デバイスに追加してみましょう。
現在のホストから到達できないことを確認しておきます。
$ ping 10.102.66.200 PING 10.102.66.200 (10.102.66.200) 56(84) バイトのデータ ^C --- 10.102.66.200 ping 統計 --- 送信パケット数 43, 受信パケット数 0, パケット損失 100%, 時間 43001ミリ秒
root権限で、ip addr add [IPアドレス/サブネットマスク] dev [ネットワークデバイス名]で、指定した
ネットワークアドレスにIPアドレスを追加します。
$ sudo ip addr add 10.102.66.200/24 dev eth1
確認。
$ 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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:81:dd:5d brd ff:ff:ff:ff:ff:ff
inet 192.168.121.198/24 brd 192.168.121.255 scope global dynamic eth0
valid_lft 2923sec preferred_lft 2923sec
inet6 fe80::5054:ff:fe81:dd5d/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
valid_lft forever preferred_lft forever
inet 10.102.66.200/24 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe22:9a46/64 scope link
valid_lft forever preferred_lft forever
ネットワークデバイスを指定して見てみましょう。指定したIPアドレスが追加されています。
$ ip addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
valid_lft forever preferred_lft forever
inet 10.102.66.200/24 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe22:9a46/64 scope link
valid_lft forever preferred_lft forever
今度はpingも通るようになります。
$ ping 10.102.66.200 PING 10.102.66.200 (10.102.66.200) 56(84) バイトのデータ 64 バイト応答 送信元 10.102.66.200: icmp_seq=1 ttl=64 時間=0.071ミリ秒 64 バイト応答 送信元 10.102.66.200: icmp_seq=2 ttl=64 時間=0.070ミリ秒 64 バイト応答 送信元 10.102.66.200: icmp_seq=3 ttl=64 時間=0.074ミリ秒 64 バイト応答 送信元 10.102.66.200: icmp_seq=4 ttl=64 時間=0.076ミリ秒 64 バイト応答 送信元 10.102.66.200: icmp_seq=5 ttl=64 時間=0.074ミリ秒 64 バイト応答 送信元 10.102.66.200: icmp_seq=6 ttl=64 時間=0.056ミリ秒 64 バイト応答 送信元 10.102.66.200: icmp_seq=7 ttl=64 時間=0.039ミリ秒
OSを再起動してみましょう。
$ sudo reboot
すると、追加した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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:81:dd:5d brd ff:ff:ff:ff:ff:ff
inet 192.168.121.198/24 brd 192.168.121.255 scope global dynamic eth0
valid_lft 3531sec preferred_lft 3531sec
inet6 fe80::5054:ff:fe81:dd5d/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe22:9a46/64 scope link
valid_lft forever preferred_lft forever
また、ネットワークデバイスを停止・起動しても、追加したIPアドレスはやはり失われます。
IPアドレスを追加した状態。
$ ip addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
valid_lft forever preferred_lft forever
inet 10.102.66.200/24 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe22:9a46/64 scope link
valid_lft forever preferred_lft forever
$ sudo ip link set dev eth1 down
確認。
$ ip addr show dev eth1
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
停止したネットワークデバイスを起動。
$ sudo ip link set dev eth1 up
確認。
$ ip addr show dev eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:22:9a:46 brd ff:ff:ff:ff:ff:ff
inet 192.168.33.10/24 brd 192.168.33.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe22:9a46/64 scope link
valid_lft forever preferred_lft forever
やっぱり、追加したIPアドレスがなくなりましたね。
最後にmanをヘルプを見てみましょう。
ip addrコマンドのmanは、man ip-addressで見れます。
$ man ip-address
IPアドレスを追加するコマンドですね。
ip address add - add new protocol address.
ヘルプはこちらで。
$ ip addr help
Usage: ip address {add|change|replace} IFADDR dev IFNAME [ LIFETIME ]
[ CONFFLAG-LIST ]
ip address del IFADDR dev IFNAME [mngtmpaddr]
ip address {save|flush} [ dev IFNAME ] [ scope SCOPE-ID ]
[ to PREFIX ] [ FLAG-LIST ] [ label LABEL ] [up]
ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ master DEVICE ]
[ type TYPE ] [ to PREFIX ] [ FLAG-LIST ]
[ label LABEL ] [up] [ vrf NAME ] ]
ip address {showdump|restore}
IFADDR := PREFIX | ADDR peer PREFIX
[ broadcast ADDR ] [ anycast ADDR ]
[ label IFNAME ] [ scope SCOPE-ID ] [ metric METRIC ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG := [ permanent | dynamic | secondary | primary |
[-]tentative | [-]deprecated | [-]dadfailed | temporary |
CONFFLAG-LIST ]
CONFFLAG-LIST := [ CONFFLAG-LIST ] CONFFLAG
CONFFLAG := [ home | nodad | mngtmpaddr | noprefixroute | autojoin ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := forever | SECONDS
TYPE := { vlan | veth | vcan | vxcan | dummy | ifb | macvlan | macvtap |
bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan | lowpan |
gre | gretap | erspan | ip6gre | ip6gretap | ip6erspan | vti |
nlmon | can | bond_slave | ipvlan | geneve | bridge_slave |
hsr | macsec | netdevsim }