What is the most authoritative file/process for managing IP addresses on an 18.04 server?

7,121

Solution 1

Make your networking changes to the /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg file as if you were putting them in the yaml file.

Then do the following:

sudo cloud-init clean
sudo cloud-init init
sudo netplan apply

This will process your 50-curtin-networking.cfg file, generate the 50-cloud-init.yaml file and apply the yaml file netplan configuration.

In this way, you can write your networking config in the 50-curtin-networking.cfg file as the comments imply you should do.

A lot of the confusion between setting networking up in the 50-cloud-init.yaml file vs the 01-netcfg.yaml found in the /etc/netplan directory comes down to the installer used for Ubuntu 18.04 LTS.

The live installer uses cloud-init, whereas the alternate installer does not.

So for networking your installer choice changes how you will set up networking.

ubuntu-18.04.1-server-amd64.iso -> 01-netcfg.yaml ubuntu-18.04.1-live-server-amd64.iso -> 50-curtin-networking.cfg

Solution 2

I assume this is an ordinary server, behind a router or switch that then connects to the internet. I'd rename the 50-cloud-init.yaml file:

sudo mv /etc/netplan/50-cloud-init.yaml  /etc/netplan/01-netcfg.yaml 

Then find out the relevant interface name:

ifconfig 

Assuming, for an example, that your relevant interface is enp0s25, edit the file:

sudo nano /etc/netplan/01-netcfg.yaml 

Amend the file to read:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      addresses: [192.168.100.40/22]
      gateway4: 192.168.100.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

Of course, substitute your exact details here. Spacing, indentation, etc. are crucial. Proofread carefully. Save (Ctrl+O followed by Enter) and close (Ctrl+X) the text editor.

Next:

sudo netplan apply
sudo ip link set enp0s25 down
sudo ip link set enp0s25 up

Did you get the requested IP address?

ip addr show

Can you ping?

ping -c3 8.8.8.8
ping -c3 www.ubuntu.com

If you get ping returns, you are all set.

Share:
7,121

Related videos on Youtube

kartik_subbarao
Author by

kartik_subbarao

Open Systems Technologist, author of Enlightening Technical Leadership: http://kartiksubbarao.com/etl

Updated on September 18, 2022

Comments

  • kartik_subbarao
    kartik_subbarao over 1 year

    The 18.04 server installation process creates /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg, which, in turn, seems to generate /etc/netplan/50-cloud-init.yaml. I can't seem to find exactly how 50-cloud-init.yaml gets generated from 50-curtin-networking.cfg though.

    What is the recommended way to manage IP addresses on an 18.04 server? Edit 50-curtin-networking.cfg, and then run some command (?) to update 50-cloud-init.yaml? Or some other process?

    • Rinzwind
      Rinzwind almost 6 years
      network-config generates 50-cloud-init.cfg. and cloud-init ( cloudinit.readthedocs.io/en/latest ) triggers network-config ( cloudinit.readthedocs.io/en/latest/topics/network-config.htm‌​l ). That happens on initial creation, and on restarting but only when your force it.
    • kartik_subbarao
      kartik_subbarao almost 6 years
      I don't have any files named 50-cloud-init.cfg -- I have 50-curtin-networking.cfg and 50-cloud-init-yaml. Did you mean the former? If so, how exactly do you "force" cloud-init to regenerate 50-cloud-init.yaml from 50-curtin-networking.cfg?
  • kartik_subbarao
    kartik_subbarao almost 6 years
    It seems like you're suggesting that the text at the top of 50-cloud-init.yaml, warning against editing it manually, should be ignored :-) This may end up being the approach taken, but I'd ideally like to understand why that text is there in the first place. Presumably the designers had some workflow in mind when they created that process. And what about /etc/cloud/cloud.cfg.d/50-curtin-networking.cfg?
  • kartik_subbarao
    kartik_subbarao almost 6 years
    I've renamed the question to hopefully make it clearer.
  • chili555
    chili555 almost 6 years
    Is this a cloud instance?
  • kartik_subbarao
    kartik_subbarao almost 6 years
    No, it is not a cloud instance. It is a standalone server on an internal network.
  • chili555
    chili555 almost 6 years
    That's what I meant above when I said, "I assume this is an ordinary server, ..." Please check here: blog.printk.io/2018/04/… I still think 01-netcfg.yaml is appropriate.
  • kartik_subbarao
    kartik_subbarao almost 6 years
    I saw this post. Unfortunately, the author has the same uncertainty that I do: While the netplan file warns that it might get overwritten, I was not able to use the cloud-init file to change the netplan network configuration… I am not 100% sure if it is safe to edit the netplan directly in the default configuration. I'm asking here to see if someone (perhaps one of the Ubuntu developers?) has the 100% authoritative answer on this question.
  • Paco Hope
    Paco Hope over 5 years
    This answer is a good answer. Ironically the author wrote "Spacing, indentation, etc. are crucial. Proofread carefully." And there's an error in the code. The line "addresses" in the YAML needs to be indented. It is an attribute of nameservers. Thanks for the tip, though, it helped me.
  • chili555
    chili555 over 5 years
    Ironically, @PacoHope the author, hanging his head, made a small edit. Thanks for the heads up.
  • dmuir
    dmuir about 5 years
    You don't want to call cloud-init clean unless you're setting this machine up to be a cloud image. cloud-init is designed to run the first time you boot a machine (eg when deploying a new VM).
  • Alex Isayenko
    Alex Isayenko over 4 years
    Awesome. Thanks, man!
  • Mitar
    Mitar over 2 years
    Yes, I ran cloud-init and it re-initialized SSH keys on my existing server.