在一个接口上同时使用 DHCP 和静态 IP 地址

sha*_*anu 16 network-manager dhcp static-ip

我们可以在 Linux 中为单个接口使用多个 IP 地址(eg. eth0:0, eth0:1)。但是我们可以同时使用DHCP和静态IP吗?eth0:1应该有一个静态 IP 地址并且eth0:0应该使用 DHCP 进行配置。

我们如何才能做到这两点?

jkt*_*123 14

是的,这是可以做到的。但是,您通常会为此使用 eth0 和 eth0:0 而不是 eth0:0 和 eth0:1。你可以像这样设置你的 /etc/network/interfaces 文件:

auto lo eth0 eth0:0
iface lo inet loopback

iface eth0 inet dhcp

iface eth0:0 inet static
    address ...
    netmask ...
Run Code Online (Sandbox Code Playgroud)

您可能不想在 eth0:0 接口上设置网关,因为这可能与您从 DHCP 获得的网关设置冲突。如果您在 /etc/network/interfaces 中输入手动设置,您需要确保 network-manager 没有尝试管理您的设置。此处涵盖了这一点。


小智 9

在深入寻找同一问题的答案之后,我找到了一个解决方案,让网络管理器继续管理您的连接。首先,使用“编辑连接”>“添加”在网络管理器中正常创建 DHCP 连接。这将在 /etc/NetworkManager/system-connections/ 中创建一个文件。使用超级用户权限在文本编辑器中打开此文件。示例:sudo nano /etc/NetworkManager/system-connections/DHCPEthernet

代码如下所示:

[802-3-ethernet]
duplex=full
mac-address=00:0E:C6:88:31:43

[connection]
id=DHCPEthernet
uuid=26af83f1-c48c-4454-9038-bbb4bec3e3a3
type=802-3-ethernet
timestamp=1405008541

[ipv6]
method=auto

[ipv4]
method=auto
Run Code Online (Sandbox Code Playgroud)

在 ipv4 部分下为您要添加的静态 IP 地址添加一行。我在这个例子中使用 192.168.10.1 没有网关

address1=192.168.10.1/24,0.0.0.0
Run Code Online (Sandbox Code Playgroud)

保存文件,然后使用网络管理器断开连接,然后重新连接到网络。Ping 将确认两个 IP 地址都正常工作。ip addr的输出确认成功。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    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: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 14:10:9f:d7:22:0b brd ff:ff:ff:ff:ff:ff
    inet 172.20.1.71/24 brd 172.20.1.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::1610:9fff:fed7:220b/64 scope link 
       valid_lft forever preferred_lft forever
3: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0e:c6:88:31:43 brd ff:ff:ff:ff:ff:ff
    inet 172.20.1.60/24 brd 172.20.1.255 scope global eth2
       valid_lft forever preferred_lft forever
    inet 192.168.10.1/24 brd 192.168.10.255 scope global eth2
       valid_lft forever preferred_lft forever
    inet6 fe80::20e:c6ff:fe88:3143/64 scope link 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)


小智 5

我检查了一下,发现现在可以使用该nmcli工具创建此配置。事实上,它允许完全控制 NetworkManager。nmcli 的手册页非常详尽且易于理解。参见man nmcliman nm-settings

要设置此问题中的配置,最简单的方法是编辑当前的连接配置文件。从 GUI NetworkManager 工具中找出配置文件的名称,并使用 CLI 编辑器对其进行编辑(此处名称为Ethernet connection):

$ sudo nmcli c 编辑“以太网连接”

===| nmcli 交互式连接编辑器 |===

编辑现有的“802-3-以太网”连接:“以太网连接 1”

输入“帮助”或“?” 以获得可用命令。
输入“describe [.]”以获取详细的属性描述。

您可以编辑以下设置:连接、802-3-以太网(以太网)、802-1x、dcb、ipv4、ipv6
nmcli>转到 ipv4
您可以编辑以下属性:method、dns、dns-search、dns-options、dns-priority、addresses、gateway、routes、route-metric、ignore-auto-routes、ignore-auto-dns、dhcp-hostname、dhcp -send-hostname、从不默认、可能失败、dad-timeout、dhcp-timeout、dhcp-client-id、dhcp-fqdn
nmcli ipv4> set ipv4.addresses {your_address_here}/{your_network_prefix_here}
您是否还想将“ipv4.method”设置为“manual”?[是]:
nmcli ipv4>保存
连接“以太网连接”(87fa8e41-7fe3-435a-a2f2-29a9c8084d2d) 已成功更新。
nmcli ipv4>退出

粗体部分是您的输入,用您的设置替换花括号中的内容。回答no有关保留 DHCP 配置的问题ipv4.method。之后,您需要禁用并重新启用配置,这可以使用 GUI 工具或 nmcli 来完成。

如果需要,也可以从命令行创建新连接:

sudo nmcli -p connection add type ethernet ifname {your_interface_name} con-name MyConnection -- ipv4.addresses {your_address}/{your_prefix_length} ipv4.method auto
Run Code Online (Sandbox Code Playgroud)

再次,用您的设置替换花括号中的内容。

最后,如果您仍然希望编辑配置文件,请记住编辑后重新加载文件:

sudo nmcli connection reload
Run Code Online (Sandbox Code Playgroud)

请注意,以这种方式创建的配置可能会混淆 GUI 工具。充其量,他们不会向您显示静态地址。