When are network, broadcast and gateway required for configuring a network interface manually?
#How to set up static IP address and why#
Notice! I do not talk about other ways of seting up network like with NetworkManager. Any device mentioned in /etc/network/interfaces
are not touched by NM
To be able to communicate through an IP network (IPv4 and IPv6) the computer must know what IP address it has. So therefore address
directive is needed to tell the computer that.
When the computer then wants to talk to another computer, it uses that other computers IP address to check if that computer is in the same network, LAN. If so, the computer can communicate direct with the other computer.
So how do the computer knows when it is communicating with a computer on the same LAN? By using the networks netmask
, where the net part of the address is set to ones and host part is set to zeros. So by doing a bitwise AND operation between each bit in a IP address and the netmask we will get the network address of the IP address, where host part is zero. So if we do this on the computers IP address and the other computers IP address we get each network address.. If they are equal, it means that the computers are in the same network and can talk directly to each other.
If the network addresses are not equal they are on different LAN and cannot communicate directly to each other. Then the computer needs to use a special computer that is connected to other LANs. That computer is a router (that could also have a firewall and NAT). So when the computer want to talk to other computers outside the LAN, it need to know the address of that computer which is set with the gateway
directive. If another interface has already set a gateway
value, you do not and should not set another gateway directive for this interface. The gateway
directive sets the default route for the computer, so you need only one for IPv4 and only one for IPv6 on each machine.
This network address can be manually set with the network
directive.
Sometime the computer want to communicate with all computers in the LAN, and the it uses broadcast address. This address is listen to by all computers in the same LAN. This is basicly the same as network address, except the host part is not all zeros and instead all ones. This broadcast address is set by the directive broadcast
in the interface.
The interface network
address is only needed to be calculated once and is usually calculated correctly from that address
and netmask
directives. Same with the broadcast
address. So you do not need to set them. In fact if you set one or both to the wrong values, you could lose connection to internet and other computers in your LAN. So unless you have some strange values on them, let the computer calculate them for you.
So a minimal static settings, or stanza, in /etc/network/interfaces
could look like this for the device eth1
in a private network:
iface eth1 static inet
address 192.168.44.10
netmask 255.255.255.0
gateway 192.168.44.1
#How name resolving works and how it is tied to DNS.#
Domain names are used to convert between easy for humans to read and remember domain names and the computers not so easy to remember IP address, mentioned above. This is called Name Resolving.
This is usually controlled by the file /etc/nsswitc.conf
and the line which start with hosts:
. If you ask the computer to connect to the computer my.example.com
, it will look into this file and try to solve the IP address from the name my.example.com
. This file does not actually answers the question "which IP do my.example.com have", it just tell the computer where it could find the answer.
Usually it tries the /etc/hosts
file first for static local names, then avahi mDNS
for dynamic local names and then a DNS domain name resovler to get a name from internet.
If some of these are slow in answering your questions, it might look like the computer get stuck for a while. So if you get that, check name resolving first.
So adding static addresses you can just add it to your /etc/hosts
file. By the way, if you have a static address, you probably should change the IP address there for your machine to your IP address and not the default 127.0.1.1
(which is in the localnet network where localhost are, 127.0.0.1
). That only works ok for clients and not for servers.
The dynamic addresses you get from Linux machines with the avahi
package and from Apple machines (and MS Windows with iTunes?). That is handled by "magic" and you will not need to fix that.
The DNS is used to reach internet and you need to tell the computer where those DNS servers you want to use are, what IP address to use and what your default DNS domain are.
This is done in the file /etc/resolv.conf
and can be statically set up. This does not work that well in our not so static world, so usually you have a package called resolvconf
installed. This let you set up these settings in the /e/n/interfaces
file.
So if we assumes we want to add one of Googles DNS servers, 8.8.8.8
, and your ISP's DNS server, 192.0.2.1
, and your domain my.example.org
domain as default, you just edit the /etc/network/interfaces
file and add these two lines in the stanza for the static device.
dns-nameservers 8.8.8.8 192.0.2.10
dns-search my.example.org
You may also notice that the DNS resolver will only use a maximum of three DNS servers. Please look this up in the man
-page of resolv.conf
. As usually, you can use the command man nsswitch.conf
, man resolv.conf
and man resolvconf
for more information.
Also notice that I use domain example.com and example.org and IP network 192.0.2.0/24 for the ISP example DNS server. These are explicit defined to be used in examples. See http://example.com/ or https://www.rfc-editor.org/rfc/rfc2606 and rfc5735
How do you then check that it works?
You can do that in many ways, but I usually use
getent hosts my.test.com
to test the whole setup for name resolution. If I just want to check if DNS works, I use one of these commands:
host my.test.com
dig my.test.com
But remember that those only test DNS through the settings in the /etc/resolv.conf
file, and not the /etc/nsswitch.conf
part. It might be what you want, or not.
Related videos on Youtube
user1424739
Updated on September 18, 2022Comments
-
user1424739 almost 2 years
https://wiki.debian.org/NetworkConfiguration#Bridging_without_Switching
The above URL says, the following. But it is not clear to me when they are optional and when they are not. Could you provide me with some link to references that describe this? Thanks.
If you're configuring it manually then something like this will set the default gateway (network, broadcast and gateway are optional):
auto eth0 iface eth0 inet static address 192.0.2.7 netmask 255.255.255.0 gateway 192.0.2.254
-
chili555 over 10 yearsIn recent Ubuntu versions, which use dnsmasq, you also need to declare DNS nameservers.
-
Anders about 10 years@chili555, that works if you add the package resolvconf. Read my answer down under this one. ;-) Are you ok with the answer, user1424739?
-
chili555 about 10 yearsI believe in recent Ubuntu versions, that resolvconf is installed by default; no??
-
user.dz about 10 yearsCould you put some time to review @Anders answer. See What should I do when someone answers my question?
-
Anders about 10 years@chili555 Yes, it is. But I just wanted to make it clear the connection between that package and dns-servers in /e/n/interfaces. Sorry if I was unclear.
-
-
user.dz over 10 yearsNice explanation, Thank you. As chili555 mentions DNS importance to resolve domain names, It will be nice if you add a point about it. (As for Internet or WAN connections, it is needed to setup all)
-
Anders over 10 yearsSomething like this?
-
Anders about 10 yearsYou are welcome. :-) Wonder if it is a good enough answer to user1424739
-
Anders over 6 yearsAnyway,
/etc/internet/interfaces
are about to be obsoleted by Ubuntu, in favor of their ownNetPlan
, see/etc/netplan/*.yaml
andNM
(which can be modified withnm-tools
).