これは、なにをしたくて書いたもの?
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 }