如何在Ubuntu中设置静态IP?

我对Linux还很陌生,有多年的Windows服务器/桌面经验,现在在设置静态IP时遇到了问题。我正在使用之前版本的Ubuntu上使用的方法,在16.04上似乎不起作用。

我已经使用了命令sudo nano /etc/network/interface并添加了以下内容。

iface enp0s25 inet static
address 10.10.8.2
netmask 255.255.0.0
gateway 10.10.1.1
dns-nameservers 8.8.8.8 8.8.4.4

我已经重新启动了系统,以太网基本上是坏的,ping根本不工作。我尝试修改了/etc/NetworkManager/NetworkManager.conf并进行了以下更改。
#dns=dnsmasq (comment out the dnsmasq)
[ifupdown]
managed=true (changed from false)

通过这种方法,我可以偶尔让以太网工作,但最终它会失败。
我已经在另外两台机器上以及一台虚拟机上尝试了这个配置,结果都是一样的。当我在任何这些机器上安装Windows时,我可以确认这些设置都能正常工作。 而且,当我让DHCP自动配置时,一切都正常,没有问题。
我觉得我在这里漏掉了什么,设置静态IP应该不难的。

我注意到的唯一一件事,可能只是一个打字错误,但我会将Dns-nameservers改为dns-nameservers。这可能不会解决问题,但可以避免其他问题的发生。 - John Orion
1dns-nameservers在语法上是可接受的,所以这不应该是一个问题。当它与DHCP一起工作时,您是否运行了ifconfig来检查接口名称,还是假设它是enp0s25?此外,您的配置文件顶部是否有auto enp0s25?如果没有,可能是因为接口在启动时没有启动。 - Andrew
请编辑您的问题并发布 /etc/network/interfaces 文件的确切内容。在编辑消息时,请突出显示此文件的文本,然后单击消息编辑器顶部的 {} 代码链接,以便它能正确格式化文本,使我们更容易阅读内容。同时执行以下命令 ip address,并对输出结果进行相同步骤的 {}(代码格式化)。 - L. D. James
9个回答

我遇到了同样的问题,这是我的解决方案:
sudo nano /etc/network/interfaces

将此内容(根据您的网络进行修改)复制并粘贴到# The primary network interface下方。
auto enp0s25
iface enp0s25 inet static
address 192.168.0.16
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 8.8.4.4 8.8.8.8

你可以在Ubuntu 16.04上使用终端命令ifconfig -a或在18.04+上使用ip address来获取正确的接口名称。
关闭你的虚拟机,然后!!! 进入网络设置,点击刷新MAC地址按钮几次 :)

enter image description here

然后启动您的虚拟机,您应该能够获得互联网连接!

更新于2019年2月20日

对于Ubuntu 18.04+,您需要编辑此文件。

/etc/netplan/50-cloud-init.yaml

network:
    ethernets:
        enp0s3:
            addresses: [192.168.0.55/24]
            gateway4: 192.168.0.1
            dhcp4: no
            nameservers:
              addresses: [1.1.1.1,8.8.8.8]
            optional: true
    version: 2

2非常感谢,我很欣赏。现在看起来运行正常,没有任何问题。它现在非常稳定! - TeeStar
除了dns-nameservers修复外,我还必须使用这个修复方法:http://askubuntu.com/questions/574569/apt-get-stuck-at-0-connecting-to-us-archive-ubuntu-com/575130#575130。我的ISP是monkeybrains.net。 - BSalita
在我的VMWare Player上无法运行,使用的是Ubuntu 16.04。 - ZhaoGang
我猜你在VM-Ware Player中没有正确配置网络...但是你更大的问题是:为什么还在使用Ubuntu 16.04...支持已经"终止"了... - lewis4u

在这里接受的答案中,按照上述设置静态IP地址是有效的,但是必须清除旧的IP地址设置,然后重新启动networking.service。
sudo ip addr flush enp0s25
sudo systemctl restart networking.service

然后验证它是否正确:
ip add

2刷新是为了避免旧地址在接口上显示(基于ip addr)。systemctl重启也可以,但是通过接口上的ifdownifup更具选择性。 - RichVel
2谢谢,Grant。加上flush让这个工作起来了。 - Paweł Madej
3在Ubuntu 16.04及更高版本中,刷新是必要的! - Diego Duarte

# interfaces(5) file used by ifup(8) and ifdown(8)
# auto lo
# iface lo inet loopback
auto enp2s0 
iface enp2s0 inet static
    address 172.16.9.124
    netmask 255.255.240.0
    gateway 172.16.0.9
dns-nameservers 8.8.8.8

1第5行应该将ifcace更正为iface。 - twoleggedhorse
@twoleggedhorse:修复了答案中的拼写错误,但我不得不在第一行添加了几个,因为您不能进行编辑,除非至少更改6个不是空格的字符。 - Andrei Rînea

sudo vim /etc/network/interfaces
    auto lo
    iface lo inet loopback
    auto eth0
    iface eth0 inet static
    address 192.168.1.10
    gateway 192.168.1.1
    netmask 255.255.255.0
    dns-nameservers 8.8.8.8

sudo ifdown eth0 && sudo ifup eth0

10嗨 @lanni654321,也许你应该编辑一下你的回答,加上几句话简要解释你在做什么以及为什么这么做?我觉得那样会让你的回答更有帮助,你觉得呢? - Tshilidzi Mudau

我曾经遇到过同样的问题,而解决方法对我来说就是...至少对我来说是这样的。
auto ens160
iface ens160 inet static
address 172.31.0.164/22
netmask 255.255.252.0
gateway 172.31.0.2
network 172.31.0.0
broadcast 172.31.3.255
dns-nameservers 172.31.0.21 172.31.0.18

#Add internal route
up route add -net 172.16.168.0/21 gw 172.31.0.20 dev ens160

在这里,创建一个以网络接口名称命名的空文件。
~$ touch /etc/network/interfaces.d/ens160

它有效...

我曾经遇到过同样的问题,这是我的解决方案: 删除文件/etc/network/interface末尾的所有空行。

运行这些简单的命令,看看你的网络接口是否设置为在机器启动/重新启动时自动启用。
grep "auto" /etc/network/interfaces

如果没有任何行被打印到标准输出,则使用文本编辑器(vi、nano、sed)打开/etc/network/interfaces,希望您能看到类似下面图片的内容。

A default /etc/network/interfaces file

显然,如果grep没有在终端窗口返回任何行,那么你的/etc/network/interfaces的格式可能根本不相似。:-) 但是,请遵循auto行的格式。
auto lo
(Loopback configuration follows)
.
.
.

auto enp0s3
(primary interface configuration follows)
.
.
.

====================

现在,在你的机器上。
auto yourInteraceNameHere
(your interface configuration follows)
.
.
.

不知道有哪些可用的接口名称?运行这个命令。
ifconfig -a

以下命令将仅返回网络接口的名称。
ifconfig -a | grep encap | awk {'print $1'}

enter image description here


如果您的服务器显示旧的IP和新分配的IP,请简单地重新启动服务器。它将自动清除旧的IP并保留新的IP。
如果您不想重新启动服务器,可以使用以下命令:
sudo ip addr flush

我过去习惯在我的Ubuntu机器上设置静态IP地址,后来我发现我可以通过我的路由器直接分配IP地址。这可能是最简单的解决方案。只需登录到您的路由器,找到连接的设备,并在那里分配IP地址。