如何在Ubuntu Server 18.04上设置静态IP


29

我见过有人说设置静态IP的文件仍然 /etc/network/interfaces

而且我见过其他人说,在18.04版中此功能已经发布/etc/netplan(人们对此感到不满意)

我试着把这个:

version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.1.9/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]

在我的/etc/netplan/50-cloud-init.yaml工作中,sudo netplan apply但这只会杀死服务器与互联网的连接。


是台式机还是服务器?
user68186 '18

这是全新的18.04安装或从其他版本升级吗?
WinEunuuchs2Unix

抱歉,我应该在本文中这样说,它是新安装的18.04服务器。
final18年

对我而言,最简单的解决方案是在安装过程中(连同子网,网关等)一起指定静态IPv4地址。只需填写一些向导字段,而不会弄乱配置文件。
Uwe Keim '18

您也可以在路由器上执行此操作。步骤在路由器配置中是不言自明的。
EODCraft工作人员

Answers:


13

这是在Ubuntu-Server 18.04中设置的静态IP指令

$ sudo nano /etc/netplan/50-cloud-init.yaml

然后替换您的配置,例如,以下几行:

# This file describes the network interfaces available on your system
# For more information, see netplan(5).
network:
  version: 2
  renderer: networkd
  ethernets:
    ens160:
     dhcp4: no
     addresses: [192.168.1.137/24]
     gateway4: 192.168.1.1
     nameservers:
       addresses: [8.8.8.8,8.8.4.4]

应用更改:

$ sudo netplan apply

如果遇到一些问题,请执行:

$ sudo netplan --debug apply

[ 注意 ]:

  • /24 等价于 255.255.255.0
  • ens160 是您的以太网名称,您可以使用 $ ifconfig
  • Ubuntu 16.04和14.04网络接口配置具有不同的方法。
  • 该文件为YAML格式:请使用空格,不能使用制表符。

分配静态IP地址后无法ping通
user2763554

OK ....我可以在执行后ping通service networking restart
user2763554

1
我不会这样做,因为该文件是由CloudInit生成的
Ludovic Kuty

13

/etc/netplan/50-cloud-init.yaml由于使用了CloudInit,所有告诉您直接编辑的答案都是错误的,并且会生成该文件。在Ubuntu 18.04.2中,它清楚地写在文件中:

$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eno1:
            dhcp4: true
    version: 2

因此,/etc/cloud/cloud.cfg.d/如果您仍想使用CloudInit ,则不应编辑该文件,而应编辑下面的文件。

另一种方法是首先通过创建一个空文件来完全禁用CloudInit /etc/cloud/cloud-init.disabled(请参阅https://cloudinit.readthedocs.io/en/latest/topics/boot.html),然后其他答案都可以。在Ubuntu 18.04.2下,我不得不使用dpkg-reconfigure cloud-init它来考虑文件/etc/cloud/cloud-init.disabled。我认为这有点奇怪。

我建议您重命名该文件(由于50-cloud-init.yaml我们认为它仍使用CloudInit,因此名称不正确)。

然后,您可能会得到一个/etc/netplan/01-netcfg.yaml包含以下配置的文件名。请注意使用networkd渲染器,而不是NetworkManager因为配置在服务器上。

network:
  version: 2
  renderer: networkd
  ethernets:
    eno1:
      dhcp4: no
      addresses: [192.168.1.246/24]
      gateway4: 192.168.1.1
      nameservers:
         addresses: [192.168.1.1]

2
效果很好。这应该是最好的答案。所述的50-cloud-init.yaml不应修改。
文物

2
如果仍在使用CloudInit,则需要sudo cloud-init clean -r按照veperr的回答进行更改(至少对我而言,在Ubuntu Server 18.04.3上)。
Stuart Rossiter,

1
...加上该renderer行似乎不再有效(并且在您编辑的文件的基本版本中丢失)。
Stuart Rossiter

6

Ubuntu 18.04现在使用Netplan来配置网络接口,因此配置必须在文件中完成/etc/netplan/50-cloud-init.yaml,文档建议不要再将旧文件弄乱了/etc/network/interfaces。我已经在我的Ubuntu Server虚拟机上使用了此配置,并且到目前为止,它可以正常工作,只需确保信息正确即可。optional: true默认情况下,该设置通过不验证接口是否已连接来加快引导时间,这是默认设置,也无需声明未使用的值,例如DHCP,如果不存在,则将其视为已禁用,并且Ubuntu Server中的默认渲染器是默认渲染器,networkd因此无需声明它。从您的帖子中获取信息,应该像这样:

network:
    ethernets:
        eht0:
            addresses:
            - 192.168.1.9/24
            gateway4: 192.168.1.1
            nameservers:
                addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]
            optional: true
    version: 2

一旦你保存文件,运行sudo netplan --debug applydebug标志将输出更多信息,可以帮助检测任何错误。检查以太网电缆,如果在虚拟状态下查看VM配置。如果使用WLAN,我已阅读到设置起来会有些棘手,但我尚未设置使用此服务器版本连接到WiFi的计算机。

如果您想了解有关Netplan的更多信息,请访问网站,它提供了一些基本的配置示例。

https://netplan.io/


5

配置文件为YAML格式:配置文件时请勿使用TAB。它仅适用于SPACE

这是我的问题。


4

我发现了另一种使用cloud-init的方法。

  1. 编辑文件/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg-内容似乎与/ etc / netplan中的内容相同。
  2. cloud-init使用以下命令清理,重新引导并重新初始化:

    sudo cloud-init clean -r
    
  3. 而已!您的系统将重新启动,cloud-init将重新初始化并提取更改/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg并将其应用到其中/etc/netplan/50-cloud-init.yaml,一切都会顺利进行。用验证ifconfig


0

这是使其工作的设置。

$sudo nano /etc/netplan/50-cloud-init.yaml

network:
   ethernets:
     eth0:          
     addresses:
     - 192.168.1.9/24
     dhcp: false
     gateway4: 192.168.1.1
     nameservers:
        addresses:
        - 192.168.1.1
        - 8.8.8.8
        - 8.8.4.4
        search: []
  version: 2  

$sudo netplan apply

重新启动服务器

将eth0更改为您的适配器,使用ifconfig查找您的适配器。


0

要查找可用的以太网接口,请使用 ip link show

然后使用编辑50-cloud-init.yaml文件 $sudo nano /etc/netplan/50-cloud-init.yaml

添加可用接口的配置,例如eth0:和eth1:

network:
   ethernets:
     eth0:          
     addresses:
     - 192.168.1.9/24
     dhcp: false
     gateway4: 192.168.1.1
     nameservers:
        addresses:
        - 192.168.1.1
        - 8.8.8.8
        - 8.8.4.4
        search: []
     eth0:
     addresses:
     - 192.168.1.9/24
     dhcp: false
  version: 2  

然后使用命令$sudo netplan apply应用更改。


0

如何在Ubuntu Server 18.04上设置静态IP

然后使用编辑50-cloud-init.yaml文件$sudo vim /etc/netplan/50-cloud-init.yaml


network:
  ethernets:
    eno1:
        addresses:
        - 10.0.1.10/24
        dhcp4: false
        gateway4: 10.0.1.1
        nameservers:
            addresses:
            - 10.0.1.2
            search: []
version: 2

应用更改:

$ sudo netplan apply


我不会这样做,因为该文件是由CloudInit生成的。
Ludovic Kuty

为什么哦,为什么每本在18.04上设置静态IP的指南都告诉我编辑一个yaml文件,该文件说这是一个动态创建的文件,所以不会持久存在?Ubuntu开发人员的另一个残酷笑话,认为默认情况下可以打破问题...
Bigtexun

0

通过netplan管理18.04中的网络配置,并使用cloud-init进行配置。要更改网络配置,请50-curtin-networking.cfg在中编辑文件/etc/cloud/cloud.cfg.d/。如果此文件不存在,则创建它。

查找您的接口名称

ip address show

编辑/创建cloud-init网络配置文件

sudo nano /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg

要设置静态IP地址,请使用地址键,该键获取一个列表(IPv4或IPv6),地址以及子网前缀长度(例如/ 24)。也可以提供网关和DNS信息:

network:
  version: 2
  ethernets:
    eth0:
      addresses:
        - 192.168.1.9/24
      gateway4: 192.168.1.1
      nameservers:
          addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]

您可以在https://netplan.io/examples中找到更多配置选项

重新加载cloud-init配置。这将重新启动服务器。

sudo cloud-init clean -r
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.