# Network Debugging

Related articles

- VLAN

This article or section is a candidate for merging with Network Configuration.

Notes: already duplicates part of its content (Discuss in Talk:Network Debugging#)

This article handles the steps needed for basic network troubleshooting.

## Network Interfaces

The first step in troubleshooting network issues will be to identify which network interfaces are present on the system. See Network configuration#Get current device names for details.

## Link status

In the overview of `ip a`, the link status will already be displayed. But it can also be displayed by running:

    $ ip link show dev eth0

This will provide an output along the lines of:

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
       link/ether 70:5a:b6:8a:a0:87 brd ff:ff:ff:ff:ff:ff

Bringing up an interface can be done by issueing:

    # ip link set dev eth0 up

#### RTNETLINK answers: Cannot assign requested address

If you get this error when trying to set an interface up, its most probably because you've got an invalid MAC address. To set a working MAC, see MAC address spoofing.

## IP address

In the overview provided by `ip a`, the ip address will already be displayed. But it can also be displayed by running:

    $ ip addr show dev eth0

This will provide an output along the lines of:

     2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
       link/ether 70:5a:b6:8a:a0:87 brd ff:ff:ff:ff:ff:ff
       inet 192.168.1.143/24 brd 192.168.1.255 scope global eth0
       inet6 fe80::725a:b6ff:fe8a:a087/64 scope link
          valid_lft forever preferred_lft forever

Adding a temporary ip address:

    # ip addr add 192.168.1.143/24 dev eth0

Removing an ip address:

    # ip addr del 192.168.1.143/24 dev eth0

## Route table

The route table can be displayed by running:

    $ ip route show

Route table for a specific interface:

    $ ip route show dev eth0

This will provide an output along the lines of:

    default via 192.168.1.1  proto static
    192.168.1.0/24  proto kernel  scope link  src 192.168.1.143

Configuring the default gateway:

    # ip route add 0/0 via 192.168.1.1 dev eth0

Removing the default gateway:

    # ip route del 0/0 via 192.168.1.1 dev eth0

## DNS Servers

Dns is responsible for converting hostnames to an ip address. When connectivity towards ip addresses is working, but the system is unable to connect to a hostname; there is a fair chance that this will be related to the dns configuration. The configuration can be displayed by running:

    $ cat /etc/resolv.conf

This will provide an output among the lines of:

    domain example.com
    search example.com
    nameserver 192.168.1.1

- The rule '`nameserver`' is the relevant section. Configuring multiple nameservers is supported.
- The '`domain`' and '`search`' rules are optional.
- Often the '`nameserver`' is the same as your default gateway.
- In case of doubt there is always the possibility to use the Google DNS servers as your default DNS servers:

    nameserver 8.8.8.8
    nameserver 8.8.4.4

Testing your dns configuration can be done through the `drill` command (from the ldns package):

    $ drill www.archlinux.org @8.8.4.4

The above command will perform a dns lookup of www.archlinux.org using the 8.8.4.4 dns server and return output as follows:

    ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 35144
    ;; flags: qr rd ra ; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
    ;; QUESTION SECTION:
    ;; www.archlinux.org.   IN      A

    ;; ANSWER SECTION:
    www.archlinux.org.      966     IN      CNAME   gudrun.archlinux.org.
    gudrun.archlinux.org.   18966   IN      A       66.211.214.131

    ;; AUTHORITY SECTION:

    ;; ADDITIONAL SECTION:

    ;; Query time: 38 msec
    ;; SERVER: 8.8.4.4
    ;; WHEN: Wed Jun 17 20:21:47 2015
    ;; MSG SIZE  rcvd: 72

As an alternative to drill, there are also the `dig`, `host`, and `nslookup` tools from the bind-tools package.

## Ping & Tracepath/Traceroute

The ping command can help test connectivity towards a specific host.

The first step would be verifying connectivity towards the default gateway (replace the ip address with your own default gateway):

    $ ping -c4 192.168.1.1

When erasing the "-c4" parameter, the ping will continue endlessly. It can be aborted by hitting "Control-C".

    PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
    64 bytes from 192.168.1.1: icmp_req=1 ttl=64 time=0.193 ms
    64 bytes from 192.168.1.1: icmp_req=2 ttl=64 time=0.190 ms
    64 bytes from 192.168.1.1: icmp_req=3 ttl=64 time=0.192 ms
    64 bytes from 192.168.1.1: icmp_req=4 ttl=64 time=0.189 ms

    --- 192.168.1.1 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 2999ms
    rtt min/avg/max/mdev = 0.165/0.184/0.193/0.014 ms

The output above indicated the default gateway is reachable. When instead a "`Destination Host Unreachable`" message is displayed, doublecheck the ip address, netmask and default gateway config. This message can also be displayed when ICMP traffic is not permitted towards the default gateway (blocked by a firewall, router,...).

The next step is verifying connectivity towards the configured dns server(s). When no reply is received, `tracepath` or `traceroute` can be used to verify the routing towards said server and get an idea of where the issue lies.

    $ traceroute 8.8.4.4

Traceroute also used ICMP to determine the path and hence there can be "no reply" answers as well when ICMP traffic is blocked.

Category:

- Networking

Hidden category:

- Pages or sections flagged with Template:Merge