我如何(从 CLI)为一个接口分配多个 IP 地址?

gun*_*ert 46 command-line networking ip-address

在我的服务器上,我想为一个 NIC 分配多个 IP 地址,但不使用已弃用ifconfig或过时的“别名”表示法(如eth0:0),/etc/network/interfaces因为在IP 别名(在 www.kernel.org 上)中,您可以阅读

IP 别名是一种过时的方式来管理每个接口的多个 IP 地址/掩码

gun*_*ert 56

  1. 如果您暂时需要一个额外的 IP 地址,您可以将它添加到您机器上的任何接口

     sudo ip address add <ip-address>/<prefix-length> dev <interface>
    
    Run Code Online (Sandbox Code Playgroud)

    例如

     sudo ip address add 172.16.100.17/24 dev eth0
    
    Run Code Online (Sandbox Code Playgroud)

    172.16.100.17使用 24 位网络前缀添加到为您的eth0.

    你可以检查结果

    ip address show eth0
    
    Run Code Online (Sandbox Code Playgroud)

    你可以再次删除这个地址

    sudo ip address del 172.16.100.17/24 dev eth0
    
    Run Code Online (Sandbox Code Playgroud)

    当然,当您重新启动机器时,这些更改将丢失。

  2. 要使附加地址永久化,您可以/etc/network/interfaces通过添加尽可能多的表单节来编辑文件

    iface eth0 static
        address 172.16.100.17/24
    
    Run Code Online (Sandbox Code Playgroud)

    所以它看起来像

    iface eth0 inet dhcp
    
    iface eth0 inet static
        address 172.16.100.17/24
    
    iface eth0 inet static
        address 172.16.24.11/24
    
    Run Code Online (Sandbox Code Playgroud)

    您甚至可以保留dhcp主地址的 。

    要在不重新启动使用激活这些设置ifdown/ifup

    sudo ifdown eth0 && sudo ifup eth0
    
    Run Code Online (Sandbox Code Playgroud)

    这是至关重要的把那两个命令放到一个行,如果你是远程处理到服务器,因为第一个会放弃你的连接!以这种方式,ssh 会话将继续存在。

  • 看起来 ifdown 在较新的 Ubuntu 版本中已被弃用。 (2认同)

cha*_*aos 21

使用新工具包,添加新 ip 地址就像使用旧工具包一样简单:

ip addr add 192.168.1.1/24 dev eth0
Run Code Online (Sandbox Code Playgroud)

当寻找ip addr show再次,你看到分配给该接口的第二个IP地址:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
    inet 192.168.1.1/24 scope global eth0
    inet6 fe80::223:54ff:fe45:f307/64 scope link
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

删除该 IP 地址:

ip addr del 192.168.1.1/24 dev eth0
Run Code Online (Sandbox Code Playgroud)

iproute2 套件:

iproute2套件是内核和用户空间之间通过netlink协议进行进程间通信的通信套件。它应该取代整个标准的网络工具。以下是它们的替代品:

  • ifconfig-->ip addrip link
  • route --> ip route
  • arp --> ip neigh
  • iptunnel --> ip tunnel
  • ipmaddr --> ip maddr
  • netstat --> ss

  • @chaos 我接受我自己的答案而不是你的优秀答案,因为你的答案缺乏我期望在服务器配置上的“永久性”。 (2认同)