Skip to main content

Using static IPs in Linux

It is often a requirement to assign static IP addresses to some important and permanent network interfaces. This is to avoid setting up a local DHCP server or relying on IP given by your network provider which may not be stable.

This post shows steps to configure static IPs in Linux using Ubuntu 16.04 and Ubuntu 18.04 distros. We are considering two distros as network configuration has changed significantly in Ubuntu 18.04.

There are two general steps to be followed:
1. Configure the network interface and assign a static IP.
2. Restart interface for the changes to take effect.

Ubuntu 16.04

 The current interfaces on the system are as follows:



As can be seen, enp0s8 interface does not have any IP. Let's assign a static IP to it. In case you already have an interface with a DHCP assigned IP, you just need to change that IP and make it static.

Edit the /etc/network/interfaces file and add the following code block. Prefer using the IP address range available for private use (see [1]) while deciding an IP. I want to add the server to the local 10.0.2.1/24 network. The word "static" at the end of second line indicates that this is a static IP.


Now restart the network interface with the following command:
sudo ifdown enp0s8 && sudo ip add flush dev enp0s8 && sudo ifup --force enp0s8

In case this doesn't work, try restarting the networking service:
sudo systemctl restart networking.service

While this has always worked for me, in case this doesn't work, check the configuration again and restart the server:
sudo init 6
OR
sudo reboot
Upon restart the interface should be configured with static IP.

This is my ifconfig output:

Let's see how to assign a static IP for Ubuntu 18.04 before testing.

 

Ubuntu 18.04

From Ubuntu 18.04, Ubuntu shifted to Netplan network configuration. This uses yaml based configuration setup. While the method of setup changes, the steps remain the same.

The current interfaces on the system are as follows:

Here also, enp0s8 interface does not have any IP.

Edit the `/etc/netplan/50-cloud-init.yaml` file (NOTE: the file name may be different depending on system) and add the following code block. Here also, we will use an IP from the 10.0.2.0/24 network. The line "dhcp4: no" indicates that this is a static IP.


Apply the configuration using the following command:
sudo netplan apply
Use --debug flag for debugging purposes


It can be seen in the above screenshot that the new config has been merged in the existing config. Let's check our interface with ifconfig,


The IP has been assigned successfully.

Testing

Make sure you are on the server which is in the same network as the network of static IPs for testing purposes. Here we will use the two servers that we have set the static IP for.

PING test:


SSH test


 

Use Cases:

Static IPs are useful when:
  1. The DHCP server is unstable or insufficient to manage a large number of servers. 
  2. Another possible issue is that the static IP lease expires frequently and takes time to reestablish causing frequent outages.

Have you faced any such issues with your DHCP server? Have you used any innovative strategies for static IP assignment? Let me know in the comments.


References:

[1] https://en.wikipedia.org/wiki/Private_network 

Comments

Popular posts from this blog

CRIF HighMark Credit Report Application Process

As per the RBI circular of 2017, you are entitled to get one free credit report every calendar year from each credit bureaus in India. CRIF HighMark is one of the four credit bureaus in India. This article will focus on creating a new account and getting your yearly free credit report. Visit the official website of CRIF HighMark https://www.crifhighmark.com/your-credit-score  In the next screen, click on " Get Your Score Now"  Register After registering, follow the below steps: Enter Personal Details Full Name DOB Email ID Mobile Number Gender Father's Name or Spouse Name Identification PAN or UID necessary Rest optional Communication Address CAPTCHA Review Terms of Use and Click Submit Choose free report Click " No Thanks, Take me to my FREE report " below the Upgrade me button. You will receive a confirmation email with your username and password and activation link. Click on activation link to...

My Entry into the World of Credit Cards

After joining my job in June 2018, my salary account was opened in ICICI Bank. During the account opening process, I was offered a Life Time Free (LTF) credit card. Simply put, this was my first chance to get into the credit world without any extra hassle because first of all, neither was I aware of the concept of credit scores nor I had any credit history and secondly, I was just curious about credit cards after seeing of my father use his credit cards with extra caution and the monthly event of credit card bill payment that used to happen at my home. And in that sudden moment of joy, I made my first mistake in the credit world. Representative Image (Source: https://jessepollak.github.io/card/) Now if your guess is that I started spending crazy amounts of money which I couldn't repay, then you are WRONG! I am a miserly person. Money doesn't leave my hands and in general, my credit utilization has never exceeded 5% of my credit limit. So coming back to my first mis...

Generate Large Files in Linux using dd

The programming community often requires large files for stress testing programmes. For example, sometimes such files are required to check the response time of certain programme or testing request handling capacity of servers. Many times, it does not matter what the contents of the file are, however, it is often difficult to find such large files when the need arises. Linux provides us a fast, efficient way of generating such huge files through simple command line options. For the purposes of this demo, I am using Ubuntu 16.04 and 18.04 linux distros. Ubuntu provides dd command to create such huge files in a matter of seconds. A typical dd command to create a 1 GB file is given below. dd if=/dev/zero of=big_file.txt count=1024 bs=1048576 parameters of dd: if - input file from which the content is read of - output file where the content is written count - number of blocks in output file bs - number of bytes in each block The above command creates a file named big_file.txt...