给Ubuntu Server 14.04 LTS分配静态IP

我在我的机器上安装了Ubuntu 14.04 LTS服务器,它位于与我的Windows 7安装分开的硬盘上。Windows操作系统通过以太网具有完全的网络连接和互联网访问,但是Ubuntu安装没有。
我有一种直觉,这可能是因为我的路由器看到两个具有相同MAC地址的计算机,并且DHCP不起作用。我应该如何为机器分配一个共同的静态IP,以便两个分区都可以使用我的网络?我对Ubuntu还不熟悉,我无法找出要编辑哪个文件以便我可以分配静态IP。

1嗨,欢迎来到AU。当你提到在不同分区上安装Windows和Ubuntu时,我有些困惑。因为要么是双系统启动,它们会独立运行,要么就是虚拟机(VM)。你能详细说明一下这两个操作系统的运行方式和配置吗?:) - AzkerM
1如果两台同时连接的机器具有相同的MAC地址,那么你肯定会遇到问题。但是,如果它们在不同的时间运行,就不会出现这个问题。所以,如果我理解得正确的话,你的问题可能出在其他地方(即使你将服务器放在虚拟机中,虚拟机也会为你解决MAC地址的问题;每个虚拟机都有自己独特的MAC地址)。 - Rmano
请查看 https://help.ubuntu.com/14.04/serverguide/network-configuration.html。路由器无法区分两台计算机;它只能看到相同的接口卡(NIC),无论哪个正在运行。 - belacqua
5个回答

我不确定这个方法能否解决你的问题,但它回答了你的问题,我认为值得一试。
要分配静态IP,你需要编辑/etc/network/interfaces文件。
接口可能被称为eth0。
当前的条目大致如下:
auto eth0
iface eth0 inet dhcp

你需要将此更改为:
auto eth0
iface eth0 inet static
   address 10.253.0.50
   netmask 255.255.255.0
   network 10.253.0.0
   gateway 10.253.0.1
   dns-nameservers 8.8.8.8

您需要根据您的网络进行数值调整,但您可以通过检查Windows中的ipconfig来获取相关信息。

请确保选择一个在DHCP服务器地址空间之外的地址。

然后重新启动网络:sudo service networking restart。如果遇到问题,请重新启动机器。


@dan08- 我认为这里也需要dns-nameservers。我建议你编辑你的回答。 - chili555
24使用sudo ifdown eth0 && sudo ifup eth0命令来重新启动eth0,而不是使用上一个命令。 - Kenny Evitt
在我的环境中,网关以.254结尾,不确定是否适用于每个人。除此之外,这个答案对14.14有效。 - mau
1我的设备不起作用,我仍然得到了DHCP IP地址。可悲的是它来自一个混合型调制解调器+路由器设备,它没有根据MAC地址设置静态IP的功能。:S 我可能需要买一个路由器。:S 根据 ifdown eth0 的输出,接口没有配置。 - inf3rno
但现在网络将会自动启动。 - Allan Ruin
嗨,在Ubuntu 16.04中,你不能修改这个配置文件。你应该使用网络管理器的用户界面或命令行来进行修改。谢谢。 - keniee van

/etc/network/interfaces中设置您的IP地址更改。例如:
auto eth0
iface eth0 inet static

address 192.168.1.128
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1

不要在/etc/resolv.conf中提供您的DNS配置,因为有时在重新启动服务器时配置会被删除。
因此,请使用vim /etc/resolvconf/resolv.conf.d/base(在更新此配置时不会被删除)
例如:
search  (domain name)
nameserver 8.8.8.8
nameserver 8.8.4.4

保存并重新启动您的服务器,这解决了我的静态问题!:)


3请记住,您的设备名称可能不是eth0。我的设备名称是enp1s7enp2s15。我有两张网卡。 - Vladimir Vukanac

我发现我必须包括DNS设置:
auto lo enp0s25

iface lo inet loopback

iface enp0s25 inet static
    address 192.168.1.128
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-search example.com
    dns-nameservers 8.8.8.8 8.8.4.4

查看此链接

你缺少网关 - Pavel Niedoba
是的,谢谢@Pavel Niedoba,现在我仔细看了一下我的服务器,不知道我怎么会错过那个。已修复。 - user8128167
18.8.8.8.7不是一个有效的IP地址。 - papaiatis

更改接口配置:

$ sudo nano /etc/network/interfaces

然后替换以下配置:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens160
iface ens160 inet static
# Enter your specific IP address
        address 192.168.1.130
        netmask 255.255.255.0
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4

然后通过以下方式触发它:
$ sudo service networking restart

或者

$ sudo ifdown ens160; ifup ens160

如果你遇到错误,请执行以下命令:
``` $ ip addr flush dev ens160 ```
另外,你也可以重启操作系统:
``` sudo reboot ```

[注意]:

  • ens160 是我的以太网名称,您可以通过 $ ifconfig 命令进行检查。
  • 这个方法在 Ubuntu 14.0416.04 中有效并经过测试。
  • 这是 Ubuntu 18.04配置方法

Ubuntu 20.04没有/etc/network/interfaces文件,而是使用/etc/netplan/.yaml。
.yaml配置文件是自动生成的,可以有很多不同的名称,只要它有.yaml扩展名就可以正常工作。在我的一台机器上是50-cloud-init.yaml,在另一台机器上是00-installer-config.yaml。
要将IP设置为192.168.0.102,在/etc/netplan/.yaml中:
network:
    ethernets:
        eth0:
            dhcp4: false
            addresses: [192.168.0.102/24]
            gateway4: 192.168.0.1
            nameservers:
              addresses: [8.8.8.8,8.8.4.4,192.168.0.1]
    version: 2

你可以使用ip route查找当前的网关,并将其替换为192.168.0.1
此外,你可以为你的网络选择一个不同的名称。如果是这样,请保留你的网络名称。
然后执行sudo netplan apply
这个操作让我从SSH中断了连接,因为我通过一个旧的IP进行了SSH连接。我不得不手动重新启动计算机。此时,重新启动路由器也是一个好主意,以消除可能的IP冲突。
此外,我发现建议编辑/etc/cloud中的yaml文件生成器,但是我没有找到如何做到这一点的绝对可靠的文档。相反,Canonical提供了https://netplan.io/examples,其中包含一系列适用于config.yaml文件的复制粘贴配置,这似乎是大多数情况下的一个很好的方法。